diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..427441d --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,17 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions +Firefox ESR +not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. diff --git a/.commitlintrc b/.commitlintrc new file mode 100644 index 0000000..0df1d25 --- /dev/null +++ b/.commitlintrc @@ -0,0 +1,5 @@ +{ + "extends": [ + "@commitlint/config-conventional" + ] +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..59d9a3a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..0f3107c --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +node_modules/* +package.json +package-lock.json +yarn.lock +dist diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..20eb55e --- /dev/null +++ b/.eslintrc @@ -0,0 +1,127 @@ +{ + "root": true, + "overrides": [ + { + "files": ["*.js"], + "parserOptions": { + "ecmaVersion": 2018 + } + }, + { + "files": ["*.ts"], + "parserOptions": { + "project": ["tsconfig.app.json"], + "createDefaultProgram": true + }, + "extends": [ + "eslint:recommended", + "plugin:import/errors", + "plugin:import/warnings", + "plugin:import/typescript", + "google", + "plugin:@angular-eslint/recommended", + "plugin:@typescript-eslint/recommended", + "prettier" + ], + "settings": { + "import/resolver": { + "node": { + "extensions": [".js", ".jsx", ".ts", ".tsx"] + } + } + }, + "rules": { + "@angular-eslint/component-class-suffix": [ + "error", + { + "suffixes": ["Component", "Page"] + } + ], + "@angular-eslint/directive-selector": [ + "error", + { "type": "attribute", "prefix": "wen", "style": "camelCase" } + ], + "@angular-eslint/component-selector": [ + "error", + { "type": "element", "prefix": "wen", "style": "kebab-case" } + ], + "@angular-eslint/contextual-decorator": [2], + "@angular-eslint/contextual-lifecycle": [2], + "@angular-eslint/no-attribute-decorator": [2], + "@angular-eslint/no-lifecycle-call": [2], + "@angular-eslint/no-output-native": [2], + "@angular-eslint/prefer-on-push-component-change-detection": [2], + "@angular-eslint/use-injectable-provided-in": [2], + "@angular-eslint/use-lifecycle-interface": [2], + "new-cap": [ + "error", + { + "capIsNew": true, + "capIsNewExceptions": [ + "UntilDestroy", + "Directive", + "HostBinding", + "HostListener", + "Injectable", + "Input", + "NgModule", + "Output", + "Pipe", + "ViewChild", + "ViewChildren", + "Component", + "Inject", + "MockComponent", + "MockProvider", + "MockModule" + ], + "newIsCap": true, + "properties": true + } + ], + "@typescript-eslint/no-explicit-any": 1, + "@typescript-eslint/no-non-null-assertion": 0, + "import/no-unresolved": 0, + "valid-jsdoc": 0, + "indent": 0, + "no-invalid-this": 2, + "use-isnan": 2, + "@typescript-eslint/await-thenable": 2, + "@typescript-eslint/no-misused-new": 2, + "@typescript-eslint/no-use-before-define": 2, + "keyword-spacing": 0, + "space-before-blocks": 2, + "space-before-function-paren": 0, + "@typescript-eslint/type-annotation-spacing": 2, + "comma-spacing": 2, + "quotes": [2, "single", { "allowTemplateLiterals": true }], + "no-multi-spaces": 2, + "no-multiple-empty-lines": 2, + "@typescript-eslint/prefer-enum-initializers": 2, + "@typescript-eslint/member-delimiter-style": 2, + "@typescript-eslint/ban-ts-comment": 1, + // "@typescript-eslint/member-ordering": 2, + // "@typescript-eslint/restrict-plus-operands": 2, + // "@typescript-eslint/no-unnecessary-condition": 2, + // Disabled for now. + "require-jsdoc": 0 // ["error", { + // "require": { + // "FunctionDeclaration": true, + // "MethodDefinition": true, + // "ClassDeclaration": true, + // "ArrowFunctionExpression": true, + // "FunctionExpression": true + // } + // }] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@angular-eslint/template/recommended"] + }, + { + "files": ["*.component.ts"], + "extends": ["plugin:@angular-eslint/template/process-inline-templates"] + } + ] +} diff --git a/.firebaserc b/.firebaserc new file mode 100644 index 0000000..90c6594 --- /dev/null +++ b/.firebaserc @@ -0,0 +1,26 @@ +{ + "projects": { + "default": "soonaverse", + "preview": "soonaverse-test", + "dev": "soonaverse-dev" + }, + "targets": { + "soonaverse": { + "hosting": { + "5d1024cf-d55e-4b10-9d27-eccc37e80161": [ + "5d1024cf-d55e-4b10-9d27-eccc37e80161" + ], + "def-host": [ + "soonaverse" + ] + } + }, + "soonaverse-test": { + "hosting": { + "def-host": [ + "soonaverse-test" + ] + } + } + } +} diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..521a9f7 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +legacy-peer-deps=true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..2c23c59 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,7 @@ +/dist +coverage +**/src/**/files +lib +**/lib +**/node_modules +.angular diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..810222e --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,57 @@ +# Contributing to Soonaverse + +We want to make contributing to this project as easy and transparent as possible, whether it's: + +- Reporting a bug +- Discussing the current state of the code +- Submitting a fix +- Proposing new features +- Becoming a maintainer + +## We Develop with Github + +We use github to host code, to track issues and feature requests, as well as accept pull requests. + +## We Use [Github Flow](https://guides.github.com/introduction/flow/index.html), So All Code Changes Happen Through Pull Requests + +Pull requests are the best way to propose changes to the codebase (we use [Github Flow](https://guides.github.com/introduction/flow/index.html)). We actively welcome your pull requests: + +1. Fork the repo and create your branch from `develop`. +2. If you've added code that should be tested, add tests. +3. If you've changed APIs, update the documentation. +4. Ensure the test suite passes. +5. Make sure your code lints. +6. Submit the pull request picking "develop" as the base branch. + +## Any contributions you make will be under the MIT Software License + +In short, when you submit code changes, your submissions are understood to be under the same [MIT License](http://choosealicense.com/licenses/mit/) that covers the project. Feel free to contact the maintainers if that's a concern. + +## Report bugs using Github's [issues](https://github.com/soonaverse/soonaverse/issues) + +We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://docs.github.com/en/github/managing-your-work-on-github/creating-an-issue) + +## Write bug reports with detail, background, and sample code + +**Great Bug Reports** tend to have: + +- A quick summary and/or background +- Steps to reproduce + - Be specific! + - Give sample code if you can. +- What you expected would happen +- What actually happens +- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work) + +## Use a Consistent Coding Style + +- 2 spaces for indentation rather than tabs +- You can try running `npm run lint` for style unification + +## License + +By contributing, you agree that your contributions will be licensed under its MIT License. + +## References + +This document was adapted from the open-source contribution guidelines for [Facebook's Draft](https://github.com/facebook/draft-js/blob/a9316a723f9e918afde44dea68b5f9f39b7d9b00/CONTRIBUTING.md) diff --git a/angular-locale-enabled.json b/angular-locale-enabled.json new file mode 100644 index 0000000..5291393 --- /dev/null +++ b/angular-locale-enabled.json @@ -0,0 +1,273 @@ +{ + "$schema": "../../node_modules/@angular/cli/lib/config/schema.json", + "cli": { + "analytics": false + }, + "version": 1, + "newProjectRoot": "projects", + "projects": { + "soonaverse": { + "projectType": "application", + "schematics": { + "@schematics/angular:application": { + "strict": true + }, + "@schematics/angular:component": { + "style": "less", + "changeDetection": "OnPush" + }, + "@ngneat/spectator:spectator-component": { + "jest": true + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "wen", + "i18n": { + "sourceLocale": { + "baseHref": "", + "code": "en" + }, + "locales": { + "de": { + "translation": "src/locale/messages.de-DE.xlf", + "baseHref": "" + }, + "es": { + "translation": "src/locale/messages.es-ES.xlf", + "baseHref": "" + }, + "fr": { + "translation": "src/locale/messages.fr-FR.xlf", + "baseHref": "" + }, + "it": { + "translation": "src/locale/messages.it-IT.xlf", + "baseHref": "" + }, + "ko": { + "translation": "src/locale/messages.ko-KR.xlf", + "baseHref": "" + }, + "nl": { + "translation": "src/locale/messages.nl-NL.xlf", + "baseHref": "" + }, + "zh-CN": { + "translation": "src/locale/messages.zh-CN.xlf", + "baseHref": "" + } + } + }, + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/soonaverse", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "less", + "assets": [ + "src/favicon.ico", + "src/maintenance.html", + "src/assets", + { + "glob": "**/*", + "input": "src/assets/static-home", + "output": "/home" + }, + { + "glob": "**/*", + "input": "../../node_modules/@ant-design/icons-angular/src/inline-svg/", + "output": "/assets/" + } + ], + "styles": [ + "src/theme/styles.less", + "../../node_modules/instantsearch.css/themes/satellite.css" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "15mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + }, + "de": { + "localize": ["de"], + "i18nMissingTranslation": "warning" + }, + "es": { + "localize": ["es"], + "i18nMissingTranslation": "warning" + }, + "fr": { + "localize": ["fr"], + "i18nMissingTranslation": "warning" + }, + "it": { + "localize": ["it"], + "i18nMissingTranslation": "warning" + }, + "ko": { + "localize": ["ko"], + "i18nMissingTranslation": "warning" + }, + "nl": { + "localize": ["nl"], + "i18nMissingTranslation": "warning" + }, + "zh-CN": { + "localize": ["zh-CN"], + "i18nMissingTranslation": "warning" + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "browserTarget": "test:build:production" + }, + "development": { + "browserTarget": "soonaverse:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "soonaverse:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "inlineStyleLanguage": "scss", + "assets": ["src/favicon.ico", "src/assets"], + "styles": [], + "scripts": [] + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"] + } + }, + "server": { + "builder": "@angular-devkit/build-angular:server", + "options": { + "outputPath": "dist/soonaverse-server", + "main": "server.ts", + "tsConfig": "tsconfig.server.json", + "inlineStyleLanguage": "less" + }, + "configurations": { + "production": { + "outputHashing": "media", + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ] + }, + "development": { + "optimization": false, + "sourceMap": true, + "extractLicenses": false + }, + "de": { + "i18nMissingTranslation": "warning" + }, + "es": { + "i18nMissingTranslation": "warning" + }, + "fr": { + "i18nMissingTranslation": "warning" + }, + "it": { + "i18nMissingTranslation": "warning" + }, + "ko": { + "i18nMissingTranslation": "warning" + }, + "nl": { + "i18nMissingTranslation": "warning" + }, + "zh-CN": { + "i18nMissingTranslation": "warning" + } + }, + "defaultConfiguration": "production" + }, + "serve-ssr": { + "builder": "@nguniversal/builders:ssr-dev-server", + "configurations": { + "development": { + "browserTarget": "soonaverse:build:development", + "serverTarget": "soonaverse:server:development" + }, + "production": { + "browserTarget": "soonaverse:build:production", + "serverTarget": "soonaverse:server:production" + } + }, + "defaultConfiguration": "development" + }, + "prerender": { + "builder": "@nguniversal/builders:prerender", + "options": { + "routes": ["/"] + }, + "configurations": { + "production": { + "browserTarget": "soonaverse:build:production", + "serverTarget": "soonaverse:server:production" + }, + "development": { + "browserTarget": "soonaverse:build:development", + "serverTarget": "soonaverse:server:development" + } + }, + "defaultConfiguration": "production" + } + } + } + }, + "defaultProject": "soonaverse" +} diff --git a/angular.json b/angular.json new file mode 100644 index 0000000..ce015c6 --- /dev/null +++ b/angular.json @@ -0,0 +1,188 @@ +{ + "$schema": "../../node_modules/@angular/cli/lib/config/schema.json", + "cli": { + "analytics": false + }, + "version": 1, + "newProjectRoot": "projects", + "projects": { + "soonaverse": { + "projectType": "application", + "schematics": { + "@schematics/angular:application": { + "strict": true + }, + "@schematics/angular:component": { + "style": "less", + "changeDetection": "OnPush" + }, + "@ngneat/spectator:spectator-component": { + "jest": true + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "wen", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "less", + "assets": [ + "src/favicon.ico", + "src/maintenance.html", + "src/assets", + { + "glob": "**/*", + "input": "src/assets/static-home", + "output": "/home" + }, + { + "glob": "**/*", + "input": "../../node_modules/@ant-design/icons-angular/src/inline-svg/", + "output": "/assets/" + } + ], + "styles": [ + "src/theme/styles.less", + "../../node_modules/instantsearch.css/themes/satellite.css" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "15mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "browserTarget": "test:build:production" + }, + "development": { + "browserTarget": "soonaverse:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "soonaverse:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "inlineStyleLanguage": "scss", + "assets": ["src/favicon.ico", "src/assets"], + "styles": [], + "scripts": [] + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"] + } + }, + "server": { + "builder": "@angular-devkit/build-angular:server", + "options": { + "outputPath": "dist/soonaverse-server", + "main": "server.ts", + "tsConfig": "tsconfig.server.json", + "inlineStyleLanguage": "less" + }, + "configurations": { + "production": { + "outputHashing": "media", + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ] + }, + "development": { + "optimization": false, + "sourceMap": true, + "extractLicenses": false + } + }, + "defaultConfiguration": "production" + }, + "serve-ssr": { + "builder": "@nguniversal/builders:ssr-dev-server", + "configurations": { + "development": { + "browserTarget": "soonaverse:build:development", + "serverTarget": "soonaverse:server:development" + }, + "production": { + "browserTarget": "soonaverse:build:production", + "serverTarget": "soonaverse:server:production" + } + }, + "defaultConfiguration": "development" + }, + "prerender": { + "builder": "@nguniversal/builders:prerender", + "options": { + "routes": ["/"] + }, + "configurations": { + "production": { + "browserTarget": "soonaverse:build:production", + "serverTarget": "soonaverse:server:production" + }, + "development": { + "browserTarget": "soonaverse:build:development", + "serverTarget": "soonaverse:server:development" + } + }, + "defaultConfiguration": "production" + } + } + } + }, + "defaultProject": "soonaverse" +} diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..cfbe748 --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,41 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma'), + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false, // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true, // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, './coverage/bla'), + subdir: '.', + reporters: [{ type: 'html' }, { type: 'text-summary' }], + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true, + }); +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000..47428bb --- /dev/null +++ b/package.json @@ -0,0 +1,117 @@ +{ + "name": "@soonaverse/ui", + "version": "0.0.0", + "license": "Apache-2.0", + "main": "lib/index.js", + "private": "true", + "directories": { + "lib": "lib" + }, + "files": [ + "lib" + ], + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build --configuration=development && sh scripts/post-build.sh", + "build:prod": "ng build && sh scripts/post-build.sh", + "build:stats": "ng build --stats-json", + "watch": "ng build --watch --configuration development", + "test": "ng test", + "test:watch": "ng test --watch-all --detect-open-handles", + "lint": "ng lint", + "i18n": "ng extract-i18n --out-file=src/locale/messages.xlf", + "analyze": "webpack-bundle-analyzer dist/soonaverse/stats.json", + "dev:ssr": "node --max-old-space-size=8192 node_modules/@angular/cli/bin/ng run soonaverse:serve-ssr", + "serve:ssr": "node dist/soonaverse-server/main.js" + }, + "dependencies": { + "@angular/animations": "15.1.3", + "@angular/common": "15.1.3", + "@angular/compiler": "15.1.3", + "@angular/core": "15.1.3", + "@angular/forms": "15.1.3", + "@angular/platform-browser": "15.1.3", + "@angular/platform-browser-dynamic": "15.1.3", + "@angular/platform-server": "15.1.3", + "@angular/router": "15.1.3", + "@metamask/detect-provider": "2.0.0", + "@ngneat/until-destroy": "9.2.3", + "@nguniversal/express-engine": "15.1.0", + "@soonaverse/interfaces": "*", + "@soonaverse/lib": "*", + "@tailwindcss/line-clamp": "0.4.2", + "algoliasearch": "4.14.3", + "angular-instantsearch": "4.4.0", + "chart.js": "4.2.0", + "dayjs": "1.11.7", + "domino": "2.1.6", + "express": "4.18.2", + "js-big-decimal": "1.3.15", + "lightweight-charts": "3.8.0", + "localstorage-polyfill": "1.0.1", + "ng-zorro-antd": "15.0.3", + "ng2-charts": "4.1.1", + "ngx-infinite-scroll": "15.0.0", + "papaparse": "5.3.2", + "rehype-stringify": "9.0.3", + "remark": "14.0.2", + "remark-gfm": "3.0.1", + "remark-rehype": "10.1.0", + "strip-markdown": "5.0.0", + "zone.js": "0.12.0", + "rxjs": "7.8.1" + }, + "devDependencies": { + "@angular-devkit/architect": "0.1501.4", + "@angular-devkit/build-angular": "15.1.4", + "@angular-eslint/builder": "15.2.0", + "@angular-eslint/eslint-plugin": "15.2.0", + "@angular-eslint/eslint-plugin-template": "15.2.0", + "@angular-eslint/schematics": "15.2.0", + "@angular-eslint/template-parser": "15.2.0", + "@angular/cli": "15.1.4", + "@angular/compiler-cli": "15.1.3", + "@angular/localize": "15.1.3", + "@ngneat/spectator": "14.0.0", + "@nguniversal/builders": "15.1.0", + "@types/express": "4.17.17", + "@types/jasmine": "4.3.1", + "@types/marked": "4.0.8", + "@types/node": "18.11.19", + "@types/papaparse": "5.3.7", + "@types/react": "18.0.27", + "@typescript-eslint/eslint-plugin": "5.50.0", + "@typescript-eslint/parser": "5.50.0", + "autoprefixer": "10.4.13", + "eslint": "8.33.0", + "eslint-config-google": "0.14.0", + "eslint-config-prettier": "8.6.0", + "eslint-plugin-angular": "4.1.0", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-jsdoc": "39.8.0", + "eslint-plugin-prefer-arrow": "1.2.3", + "eslint-plugin-prettier": "4.2.1", + "glob": "8.1.0", + "jasmine": "4.5.0", + "jasmine-core": "4.5.0", + "jasmine-html-reporter": "0.0.7", + "jasmine-spec-reporter": "7.0.0", + "karma": "6.4.1", + "karma-chrome-launcher": "3.1.1", + "karma-coverage": "2.2.0", + "karma-jasmine": "5.1.0", + "karma-jasmine-html-reporter": "2.0.0", + "less-vars-to-js": "1.3.0", + "ng-mocks": "14.6.0", + "postcss": "8.4.21", + "prettier": "2.8.3", + "prettier-eslint": "15.0.1", + "tailwindcss": "3.2.4", + "ts-loader": "9.4.2", + "ts-node": "10.9.1", + "tslib": "2.5.0", + "typescript": "4.9.5", + "webpack-bundle-analyzer": "4.7.0" + } +} diff --git a/scripts/post-build.sh b/scripts/post-build.sh new file mode 100644 index 0000000..43ae02e --- /dev/null +++ b/scripts/post-build.sh @@ -0,0 +1,5 @@ +#!/bin/sh +# Localization disabled. +# mv ./dist/soonaverse ./dist/localized +# cp -r ./dist/localized/en/* ./dist/ +# mv ./dist/localized/zh-CN ./dist/localized/zh_CN diff --git a/server.ts b/server.ts new file mode 100644 index 0000000..a90450d --- /dev/null +++ b/server.ts @@ -0,0 +1,115 @@ +import 'localstorage-polyfill'; +import 'zone.js/dist/zone-node'; + +import { APP_BASE_HREF } from '@angular/common'; +import { ngExpressEngine } from '@nguniversal/express-engine'; +import * as express from 'express'; +import { existsSync, readFileSync } from 'fs'; +import { join } from 'path'; +import { AppServerModule } from './src/main.server'; + +import * as domino from 'domino'; + +const distFolder = join(process.cwd(), 'dist/soonaverse'); +const template = readFileSync(join(distFolder, 'index.html')).toString(); +const win = domino.createWindow(template.toString()); +(global as any).window = win; +global['document'] = win.document; +(global as any).self = win; +global['document'] = win.document; +global['navigator'] = win.navigator; +global['getComputedStyle'] = win.getComputedStyle; + +global['localStorage'] = localStorage; + +// eslint-disable-next-line @typescript-eslint/no-empty-function +const mock = () => {}; +Object.defineProperty(window, 'matchMedia', { + writable: true, + value: (query: any) => { + return { + matches: false, + media: query, + onchange: null, + addListener: mock, // deprecated + removeListener: mock, // deprecated + addEventListener: mock, + removeEventListener: mock, + dispatchEvent: mock, + }; + }, +}); + +// The Express app is exported so that it can be used by serverless Functions. +export function app(): express.Express { + const server = express(); + const distFolder = join(process.cwd(), 'dist/soonaverse'); + const indexHtml = existsSync(join(distFolder, 'index.original.html')) + ? 'index.original.html' + : 'index'; + + // Our Universal express-engine (found @ https://github.com/angular/universal/tree/main/modules/express-engine) + server.engine( + 'html', + ngExpressEngine({ + bootstrap: AppServerModule, + }), + ); + + server.set('view engine', 'html'); + server.set('views', distFolder); + + // Serve static files from /browser + server.get( + '*.*', + express.static(distFolder, { + maxAge: '1y', + }), + ); + + // All regular routes use the Universal engine + server.get('*', (req, res) => { + console.log('Request: ', req.originalUrl); + res.render( + indexHtml, + { + req, + providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }], + }, + (err, html) => { + if (err) { + console.error(err); + res.send(err); + } else { + console.log('Received', req.originalUrl); + res.send(html); + } + }, + ); + }); + + return server; +} + +function run(): void { + const port = process.env['PORT'] || 4000; + + // Start up the Node server + const server = app(); + server.listen(port, () => { + console.log(`Node Express server listening on http://localhost:${port}`); + }); +} + +// Webpack will replace 'require' with '__webpack_require__' +// '__non_webpack_require__' is a proxy to Node 'require' +// The below code is to ensure that the server is run only when not requiring the bundle. +// declare const __non_webpack_require__: NodeRequire; +// const mainModule = __non_webpack_require__.main; +// const moduleFilename = mainModule && mainModule.filename || ''; +// if (moduleFilename === __filename || moduleFilename.includes('iisnode')) { +// run(); +// } + +run(); +export * from './src/main.server'; diff --git a/src/app/@api/award.api.ts b/src/app/@api/award.api.ts new file mode 100644 index 0000000..636d2d8 --- /dev/null +++ b/src/app/@api/award.api.ts @@ -0,0 +1,87 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { + Award, + Member, + PublicCollections, + Timestamp, + WEN_FUNC, + WenRequest, +} from '@soonaverse/interfaces'; +import { + AwardFilter, + AwardOwnerRepository, + AwardParticipantRepository, + AwardRepository, +} from '@soonaverse/lib'; + +import { map, Observable, of } from 'rxjs'; +import { BaseApi, SOON_ENV } from './base.api'; + +export interface AwardParticipantWithMember extends Member { + comment?: string; + participatedOn: Timestamp; + completed: boolean; +} + +@Injectable({ + providedIn: 'root', +}) +export class AwardApi extends BaseApi { + protected awardRepo = new AwardRepository(SOON_ENV); + protected awardOwnerRepo = new AwardOwnerRepository(SOON_ENV); + protected awardParticipantRepo = new AwardParticipantRepository(SOON_ENV); + + constructor(protected httpClient: HttpClient) { + super(PublicCollections.AWARD, httpClient); + } + + public listenSpace = (space: string, filter = AwardFilter.ALL) => + this.awardRepo.getBySpaceAndFilterLive(space, filter); + + public listenOwners = (award: string, lastValue?: string) => + this.awardOwnerRepo.getAllLive(award, lastValue); + + public lastActive = (lastValue?: string) => this.awardRepo.getLastActiveLive(lastValue); + + public listenPendingParticipants = (award: string, lastValue?: string, searchIds?: string[]) => + this.awardParticipantRepo + .getParticipantsLive(award, false, searchIds, lastValue) + .pipe( + map((participants) => participants.map((p) => ({ ...p, participatedOn: p.createdOn }))), + ); + + public listenIssuedParticipants = (award: string, lastValue?: string, searchIds?: string[]) => + this.awardParticipantRepo + .getParticipantsLive(award, true, searchIds, lastValue) + .pipe( + map((participants) => participants.map((p) => ({ ...p, participatedOn: p.createdOn }))), + ); + + public isMemberParticipant(awardId: string, memberId: string): Observable { + if (!awardId || !memberId) { + return of(false); + } + return this.awardParticipantRepo + .getByIdLive(awardId, memberId) + .pipe(map((awardMember) => !!awardMember)); + } + + public create = (req: WenRequest): Observable => + this.request(WEN_FUNC.createAward, req); + + public participate = (req: WenRequest): Observable => + this.request(WEN_FUNC.participateAward, req); + + public approveParticipant = (req: WenRequest): Observable => + this.request(WEN_FUNC.approveParticipantAward, req); + + public approve = (req: WenRequest): Observable => + this.request(WEN_FUNC.fundAward, req); + + public reject = (req: WenRequest): Observable => + this.request(WEN_FUNC.rejectAward, req); + + public fundAndMint = (req: WenRequest): Observable => + this.request(WEN_FUNC.fundAward, req); +} diff --git a/src/app/@api/base.api.ts b/src/app/@api/base.api.ts new file mode 100644 index 0000000..c14dd5e --- /dev/null +++ b/src/app/@api/base.api.ts @@ -0,0 +1,42 @@ +import { HttpClient } from '@angular/common/http'; +import { environment } from '@env/environment'; +import { + EthAddress, + PublicCollections, + SOON_PROD_ADDRESS_API, + SOON_TEST_ADDRESS_API, + WEN_FUNC, +} from '@soonaverse/interfaces'; +import { SoonEnv, initSoonEnv } from '@soonaverse/lib'; +import { CrudRepository } from '@soonaverse/lib/lib/repositories/CrudRepository'; +import { Observable, map } from 'rxjs'; + +export const DEFAULT_LIST_SIZE = 50; +export const WHERE_IN_BATCH = 10; +export const FULL_LIST = 10000; +// TODO Migrations that should happen. +export const FULL_TODO_CHANGE_TO_PAGING = FULL_LIST; +export const FULL_TODO_MOVE_TO_PROTOCOL = FULL_LIST; + +export const SOON_ENV = environment.production ? SoonEnv.PROD : SoonEnv.TEST; + +initSoonEnv(SOON_ENV); + +export class BaseApi { + protected repo: CrudRepository; + + constructor(public readonly collection: PublicCollections, protected httpClient: HttpClient) { + this.repo = new CrudRepository(SOON_ENV, this.collection); + } + + public listen = (id: string) => this.repo.getByIdLive(id); + + public listenMultiple = (ids: EthAddress[]) => this.repo.getManyByIdLive(ids); + + public top = (lastValue?: string, limit?: number) => this.repo.getTopLive(lastValue, limit); + + protected request(func: WEN_FUNC, req: any): Observable { + const origin = environment.production ? SOON_PROD_ADDRESS_API : SOON_TEST_ADDRESS_API; + return this.httpClient.post(origin + func, { data: req }).pipe(map((b: any) => b.data)); + } +} diff --git a/src/app/@api/collection.api.ts b/src/app/@api/collection.api.ts new file mode 100644 index 0000000..b32d22f --- /dev/null +++ b/src/app/@api/collection.api.ts @@ -0,0 +1,64 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { + Collection, + PublicCollections, + Transaction, + WEN_FUNC, + WenRequest, +} from '@soonaverse/interfaces'; +import { CollectionRepository, CollectionStatsRepository } from '@soonaverse/lib'; +import { Observable, of } from 'rxjs'; +import { BaseApi, SOON_ENV } from './base.api'; + +export enum CollectionFilter { + ALL = 'all', + PENDING = 'pending', + REJECTED = 'rejected', + AVAILABLE = 'available', +} + +@Injectable({ + providedIn: 'root', +}) +export class CollectionApi extends BaseApi { + protected colRepo = new CollectionRepository(SOON_ENV); + protected colStatRepo = new CollectionStatsRepository(SOON_ENV); + + constructor(protected httpClient: HttpClient) { + super(PublicCollections.COLLECTION, httpClient); + } + + public mintCollection = (req: WenRequest): Observable => + this.request(WEN_FUNC.mintCollection, req); + + public vote = (req: WenRequest): Observable => + this.request(WEN_FUNC.voteController, req); + + public rank = (req: WenRequest): Observable => + this.request(WEN_FUNC.rankController, req); + + public stats = (collectionId: string) => + collectionId ? this.colStatRepo.getByIdLive(collectionId, collectionId) : of(undefined); + + public allPendingSpace = (space: string, lastValue?: string) => + this.colRepo.getAllPendingLive(space, lastValue); + + public allAvailableSpace = (space: string, lastValue?: string) => + this.colRepo.getAllAvailableLive(space, lastValue); + + public allRejectedSpace = (space: string, lastValue?: string) => + this.colRepo.getAllRejectedLive(space, lastValue); + + public create = (req: WenRequest): Observable => + this.request(WEN_FUNC.createCollection, req); + + public update = (req: WenRequest): Observable => + this.request(WEN_FUNC.updateCollection, req); + + public approve = (req: WenRequest): Observable => + this.request(WEN_FUNC.approveCollection, req); + + public reject = (req: WenRequest): Observable => + this.request(WEN_FUNC.rejectCollection, req); +} diff --git a/src/app/@api/file.api.ts b/src/app/@api/file.api.ts new file mode 100644 index 0000000..c4ec35a --- /dev/null +++ b/src/app/@api/file.api.ts @@ -0,0 +1,62 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { environment } from '@env/environment'; +import { + FILE_SIZES, + SOON_PROD_ADDRESS_API, + SOON_TEST_ADDRESS_API, + WEN_FUNC, +} from '@soonaverse/interfaces'; +import { NzUploadXHRArgs } from 'ng-zorro-antd/upload'; +import { Observable, map, of } from 'rxjs'; + +const EXTENSION_PAT = /\.[^/.]+$/; + +@Injectable({ + providedIn: 'root', +}) +export class FileApi { + constructor(protected httpClient: HttpClient) {} + + public static getUrl(org: string, size?: FILE_SIZES): string { + const ext = org.match(EXTENSION_PAT)?.[0]?.replace('.', '_'); + if (!size || !ext) { + return org; + } + return org.replace(EXTENSION_PAT, ext + '_' + size + '.webp'); + } + + public static getVideoPreview(org: string): string | undefined { + const extensionPat = EXTENSION_PAT; + const ext = org.match(extensionPat)?.[0]?.replace('.', '_'); + if (!ext) { + return undefined; + } + return org.replace(EXTENSION_PAT, ext + '_preview.webp'); + } + + public getMetadata = (url?: string): Observable<'video' | 'image'> => { + if (!url) { + return of('image'); + } + return of(url.match('.mp4$') ? 'video' : 'image'); + }; + + public upload(memberId: string, item: NzUploadXHRArgs) { + const formData = new FormData(); + formData.append('file', item.postFile); + formData.append('member', memberId); + formData.append('uid', item.file.uid); + const origin = environment.production ? SOON_PROD_ADDRESS_API : SOON_TEST_ADDRESS_API; + return this.httpClient + .post(origin + WEN_FUNC.uploadFile, formData) + .pipe( + map((b: any) => { + if (item.onSuccess) { + item.onSuccess(b.url, item.file, b.url); + } + }), + ) + .subscribe(); + } +} diff --git a/src/app/@api/member.api.ts b/src/app/@api/member.api.ts new file mode 100644 index 0000000..c76beb8 --- /dev/null +++ b/src/app/@api/member.api.ts @@ -0,0 +1,230 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { environment } from '@env/environment'; +import { + EthAddress, + Member, + Proposal, + PublicCollections, + SOON_TOKEN, + SOON_TOKEN_TEST, + Stake, + Token, + TokenDistribution, + TokenDrop, + TokenDropStatus, + Transaction, + WEN_FUNC, + WenRequest, +} from '@soonaverse/interfaces'; +import { + AirdropRepository, + AwardParticipantRepository, + AwardRepository, + MemberRepository, + ProposalMemberRepository, + ProposalRepository, + SpaceKnockingMemberRepository, + SpaceMemberRepository, + SpaceRepository, + StakeRepository, + TokenDistributionRepository, + TokenRepository, + TransactionRepository, +} from '@soonaverse/lib'; +import dayjs from 'dayjs'; +import { Observable, combineLatest, map, switchMap } from 'rxjs'; +import { BaseApi, SOON_ENV } from './base.api'; + +export interface TokenDistributionWithAirdrops extends TokenDistribution { + tokenDrops: TokenDrop[]; +} + +export interface TokenWithMemberDistribution extends Token { + distribution: TokenDistributionWithAirdrops; +} + +export interface TransactionWithFullMember extends Transaction { + memberRec?: Member; +} + +export interface StakeWithTokenRec extends Stake { + tokenRec: Token; +} + +@Injectable({ + providedIn: 'root', +}) +export class MemberApi extends BaseApi { + protected memberRepo = new MemberRepository(SOON_ENV); + protected tokenDistRepo = new TokenDistributionRepository(SOON_ENV); + protected airdropRepo = new AirdropRepository(SOON_ENV); + protected stakeRepo = new StakeRepository(SOON_ENV); + protected tokenRepo = new TokenRepository(SOON_ENV); + protected spaceRepo = new SpaceRepository(SOON_ENV); + protected spaceMemberRepo = new SpaceMemberRepository(SOON_ENV); + protected spaceKnockingRepo = new SpaceKnockingMemberRepository(SOON_ENV); + protected awardRepo = new AwardRepository(SOON_ENV); + protected awardParticipantRepo = new AwardParticipantRepository(SOON_ENV); + protected proposalRepo = new ProposalRepository(SOON_ENV); + protected proposalMemberRepo = new ProposalMemberRepository(SOON_ENV); + protected transactionRepo = new TransactionRepository(SOON_ENV); + + constructor(protected httpClient: HttpClient) { + super(PublicCollections.MEMBER, httpClient); + } + + public soonDistributionStats = (id: EthAddress) => { + const tokenId = environment.production ? SOON_TOKEN : SOON_TOKEN_TEST; + return this.tokenDistRepo.getByIdLive(tokenId, id.toLowerCase()).pipe( + switchMap(async (distribution) => { + if (!distribution) { + return; + } + const tokenDrops = await this.airdropRepo.getByField( + ['member', 'token', 'status'], + [id.toLowerCase(), tokenId, TokenDropStatus.UNCLAIMED], + ); + return { ...distribution, tokenDrops }; + }), + ) as Observable; + }; + + public listenMultiple = (ids: EthAddress[]) => + this.memberRepo + .getByFieldLive( + ids.map(() => 'uid'), + ids, + ) + .pipe( + map((members) => { + members.sort((a, b) => (a.createdOn?.seconds || 0) - (b.createdOn?.seconds || 0)); + return members; + }), + ); + + public topStakes = (memberId: EthAddress, lastValue?: string): Observable => + this.stakeRepo.getByMemberLive(memberId, lastValue).pipe( + switchMap(async (stakes: Stake[]) => { + const tokenIds = Array.from(new Set(stakes.map((s) => s.token))); + const tokenPromises = tokenIds.map((id) => this.tokenRepo.getById(id)); + const tokens = await Promise.all(tokenPromises); + + return stakes.map((stake) => ({ + ...stake, + tokenRec: tokens.find((t) => t?.uid === stake.token)!, + })); + }), + ); + + public topTokens = (memberId: EthAddress): Observable => + this.tokenDistRepo.getTopBySubColIdLive(memberId, [], []).pipe( + switchMap(async (distributions) => { + const promises = distributions.map(async (distribution) => { + const token = await this.tokenRepo.getById(distribution.parentId); + const tokenDrops = await this.airdropRepo.getByField( + ['member', 'token', 'status'], + [memberId, distribution.parentId, TokenDropStatus.UNCLAIMED], + ); + return { + ...token, + distribution: { ...distribution, tokenDrops }, + } as TokenWithMemberDistribution; + }); + return await Promise.all(promises); + }), + ); + + public topSpaces = ( + memberId: EthAddress, + orderBy = ['createdOn'], + orderByDir = ['desc'], + lastValue?: string, + limit?: number, + ) => this.spaceRepo.getTopByMember(memberId, orderBy, orderByDir, lastValue, limit); + + public pendingSpaces = ( + memberId: EthAddress, + orderBy = ['createdOn'], + orderByDir = ['desc'], + lastValue?: string, + ) => this.spaceRepo.getPendingSpacesByMemberLive(memberId, orderBy, orderByDir, lastValue); + + public topAwardsPending = (memberId: EthAddress, lastValue?: string) => + this.awardRepo.getTopByMemberLive(memberId, false, lastValue); + + public topAwardsCompleted = (memberId: EthAddress, lastValue?: string) => + this.awardRepo.getTopByMemberLive(memberId, true, lastValue); + + public topProposals = ( + memberId: EthAddress, + orderBy = ['createdOn'], + orderByDir = ['desc'], + lastValue?: string, + ) => + this.proposalMemberRepo.getTopBySubColIdLive(memberId, orderBy, orderByDir, lastValue).pipe( + switchMap(async (members) => { + const result: Proposal[] = []; + for (const member of members) { + const proposal = (await this.proposalRepo.getById(member.parentId))!; + const endDate = proposal.settings.endDate?.toDate(); + if (endDate && dayjs(endDate).isAfter(dayjs(new Date()))) { + result.push(proposal); + } + } + return result; + }), + ); + + public topBadges( + memberId: string, + orderBy: string | string[] = 'createdOn', + lastValue?: string, + ): Observable { + const orderBys = Array.isArray(orderBy) ? orderBy : [orderBy]; + return this.transactionRepo.getBadgesForMemberLive(memberId, orderBys, lastValue); + } + + public topTransactions( + memberId: string, + orderBy: string | string[] = 'createdOn', + lastValue?: string, + ): Observable { + const orderBys = Array.isArray(orderBy) ? orderBy : [orderBy]; + + const all = this.transactionRepo + .getTopTransactionsLive(orderBys, lastValue) + .pipe(map((result) => result.filter((t) => t.member !== memberId))); + + const members = this.transactionRepo.getTopTransactionsLive(orderBys, lastValue, memberId); + + return combineLatest([all, members]).pipe( + map(([notForMember, forMember]) => + [...notForMember, ...forMember].sort((a, b) => { + const aTime = a.createdOn?.toDate().getTime() || 0; + const bTime = b.createdOn?.toDate().getTime() || 0; + return -aTime + bTime; + }), + ), + ); + } + + public allSpacesAsMember = (memberId: EthAddress, lastValue?: string) => + this.spaceMemberRepo.getTopBySubColIdLive(memberId, [], [], lastValue).pipe( + switchMap(async (spaceMembers) => { + const spacePromises = spaceMembers.map( + async (member) => (await this.spaceRepo.getById(member.parentId))!, + ); + return await Promise.all(spacePromises); + }), + ); + + public createIfNotExists = (address: string): Observable => + this.request(WEN_FUNC.createMember, address); + + public updateMember = (req: WenRequest): Observable => + this.request(WEN_FUNC.updateMember, req); + + public generateAuthToken = (req: WenRequest): Observable => + this.request(WEN_FUNC.generateCustomToken, req); +} diff --git a/src/app/@api/milestone.api.ts b/src/app/@api/milestone.api.ts new file mode 100644 index 0000000..d326b1c --- /dev/null +++ b/src/app/@api/milestone.api.ts @@ -0,0 +1,13 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Milestone, PublicCollections } from '@soonaverse/interfaces'; +import { BaseApi } from './base.api'; + +@Injectable({ + providedIn: 'root', +}) +export class MilestoneApi extends BaseApi { + constructor(protected httpClient: HttpClient) { + super(PublicCollections.MILESTONE, httpClient); + } +} diff --git a/src/app/@api/milestone_atoi.api.ts b/src/app/@api/milestone_atoi.api.ts new file mode 100644 index 0000000..3930195 --- /dev/null +++ b/src/app/@api/milestone_atoi.api.ts @@ -0,0 +1,13 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Milestone, PublicCollections } from '@soonaverse/interfaces'; +import { BaseApi } from './base.api'; + +@Injectable({ + providedIn: 'root', +}) +export class MilestoneAtoiApi extends BaseApi { + constructor(protected httpClient: HttpClient) { + super(PublicCollections.MILESTONE_ATOI, httpClient); + } +} diff --git a/src/app/@api/milestone_rms.api.ts b/src/app/@api/milestone_rms.api.ts new file mode 100644 index 0000000..214c6c4 --- /dev/null +++ b/src/app/@api/milestone_rms.api.ts @@ -0,0 +1,13 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Milestone, PublicCollections } from '@soonaverse/interfaces'; +import { BaseApi } from './base.api'; + +@Injectable({ + providedIn: 'root', +}) +export class MilestoneRmsApi extends BaseApi { + constructor(protected httpClient: HttpClient) { + super(PublicCollections.MILESTONE_RMS, httpClient); + } +} diff --git a/src/app/@api/milestone_smr.api.ts b/src/app/@api/milestone_smr.api.ts new file mode 100644 index 0000000..efb9a8b --- /dev/null +++ b/src/app/@api/milestone_smr.api.ts @@ -0,0 +1,13 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Milestone, PublicCollections } from '@soonaverse/interfaces'; +import { BaseApi } from './base.api'; + +@Injectable({ + providedIn: 'root', +}) +export class MilestoneSmrApi extends BaseApi { + constructor(protected httpClient: HttpClient) { + super(PublicCollections.MILESTONE_SMR, httpClient); + } +} diff --git a/src/app/@api/nft.api.ts b/src/app/@api/nft.api.ts new file mode 100644 index 0000000..7670202 --- /dev/null +++ b/src/app/@api/nft.api.ts @@ -0,0 +1,166 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { + Member, + Network, + Nft, + PublicCollections, + Transaction, + TransactionOrder, + TransactionOrderType, + TransactionPayment, + TransactionType, + WEN_FUNC, + WenRequest, +} from '@soonaverse/interfaces'; +import { MemberRepository, NftRepository, TransactionRepository } from '@soonaverse/lib'; +import { Observable, switchMap } from 'rxjs'; +import { BaseApi, SOON_ENV } from './base.api'; + +export interface SuccesfullOrdersWithFullHistory { + newMember: Member; + order: TransactionOrder; + transactions: Transaction[]; +} + +export interface OffersHistory { + member: Member; + transaction: TransactionPayment; +} + +@Injectable({ + providedIn: 'root', +}) +export class NftApi extends BaseApi { + private transactionRepo = new TransactionRepository(SOON_ENV); + private memberRepo = new MemberRepository(SOON_ENV); + private nftRepo = new NftRepository(SOON_ENV); + + constructor(protected httpClient: HttpClient) { + super(PublicCollections.NFT, httpClient); + } + + public create = (req: WenRequest): Observable => + this.request(WEN_FUNC.createNft, req); + + public batchCreate = (req: WenRequest): Observable => + this.request(WEN_FUNC.createBatchNft, req); + + public setForSaleNft = (req: WenRequest): Observable => + this.request(WEN_FUNC.setForSaleNft, req); + + public withdrawNft = (req: WenRequest): Observable => + this.request(WEN_FUNC.withdrawNft, req); + + public depositNft = (req: WenRequest): Observable => + this.request(WEN_FUNC.depositNft, req); + + public stakeNft = (req: WenRequest): Observable => + this.request(WEN_FUNC.stakeNft, req); + + public successfullOrders( + nftId: string, + network?: Network, + lastValue?: string, + ): Observable { + const fieldNames = ['payload.nft', 'type', 'payload.royalty']; + const fieldValues = [nftId, TransactionType.BILL_PAYMENT, false]; + if (network) { + fieldNames.push('network'); + fieldValues.push(network); + } + return this.transactionRepo.getByFieldLive(fieldNames, fieldValues, lastValue).pipe( + switchMap(async (transactions) => { + const out: SuccesfullOrdersWithFullHistory[] = []; + for (const transaction of transactions) { + const sourceTransactions = transaction.payload.sourceTransaction; + const sourceTransaction = Array.isArray(sourceTransactions) + ? sourceTransactions[sourceTransactions.length - 1] + : sourceTransactions; + const order = (await this.transactionRepo.getById(sourceTransaction))!; + const member = (await this.memberRepo.getById(transaction.member!))!; + + const successfullOrder: SuccesfullOrdersWithFullHistory = { + newMember: member!, + order, + transactions: [], + }; + + for (const link of order.linkedTransactions) { + const linkedTransaction = (await this.transactionRepo.getById(link))!; + if ( + (!linkedTransaction.payload.void && !linkedTransaction.payload.invalidPayment) || + linkedTransaction.type === TransactionType.BILL_PAYMENT + ) { + successfullOrder.transactions.push(linkedTransaction); + // Make sure order price is ovewriten with payment price. + // During bidding this can be different to what it was initially. Date should also be when it was paid. + if (linkedTransaction.type === TransactionType.PAYMENT) { + order.payload.amount = linkedTransaction.payload.amount; + order.createdOn = linkedTransaction.createdOn; + } + } + } + successfullOrder.transactions.sort( + (a, b) => b.createdOn!.toMillis() - a.createdOn!.toMillis(), + ); + out.push(successfullOrder); + } + out.sort((a, b) => b.order.createdOn!.toMillis() - a.order.createdOn!.toMillis()); + + return out; + }), + ); + } + + public getOffers(nft: Nft, lastValue?: string): Observable { + return this.transactionRepo.getNftOffersLive(nft, lastValue).pipe( + switchMap(async (transactions) => { + const promises = transactions.map(async (transaction) => { + const member = (await this.memberRepo.getById(transaction.member!))!; + return { member, transaction } as OffersHistory; + }); + return (await Promise.all(promises)).sort( + (a, b) => b.transaction.payload.amount - a.transaction.payload.amount, + ); + }), + ); + } + + public getMembersBids = (member: Member, nft: Nft, currentAuction = false, lastValue?: string) => + this.transactionRepo.getMembersBidsLive(member.uid, nft, currentAuction, lastValue).pipe( + switchMap(async (transactions) => { + const promises = transactions.map(async (transaction) => { + let sourceTransactions = transaction.payload.sourceTransaction; + let sourceTransactionId = Array.isArray(sourceTransactions) + ? sourceTransactions[sourceTransactions.length - 1] + : sourceTransactions; + let sourceTransaction = (await this.transactionRepo.getById(sourceTransactionId))!; + + if (sourceTransaction.type === TransactionType.PAYMENT) { + sourceTransactions = sourceTransaction.payload.sourceTransaction; + sourceTransactionId = Array.isArray(sourceTransactions) + ? sourceTransactions[sourceTransactions.length - 1] + : sourceTransactions; + sourceTransaction = (await this.transactionRepo.getById(sourceTransactionId))!; + } + const isNftBid = sourceTransaction.payload.type === TransactionOrderType.NFT_BID; + return isNftBid ? transaction : undefined; + }); + + return (await Promise.all(promises)) + .filter((r) => !!r) + .map((r) => r!) + .sort((a, b) => b!.createdOn!.toMillis() - a!.createdOn!.toMillis()); + }), + ); + + public lastCollection = (collection: string, lastValue?: string) => + this.nftRepo.getByCollectionLive(collection, ['createdOn'], ['asc'], lastValue); + + public positionInCollection = (collection: string, lastValue?: string) => + this.nftRepo.getByCollectionLive(collection, ['position'], ['asc'], lastValue); + + public topMember = (member: string, lastValue?: string) => + this.nftRepo.getByOwnerLive(member, lastValue); +} diff --git a/src/app/@api/notification.api.ts b/src/app/@api/notification.api.ts new file mode 100644 index 0000000..e301d81 --- /dev/null +++ b/src/app/@api/notification.api.ts @@ -0,0 +1,19 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Notification, PublicCollections } from '@soonaverse/interfaces'; +import { NotificationRepository } from '@soonaverse/lib'; +import { BaseApi, SOON_ENV } from './base.api'; + +@Injectable({ + providedIn: 'root', +}) +export class NotificationApi extends BaseApi { + private notificationRepo = new NotificationRepository(SOON_ENV); + + constructor(protected httpClient: HttpClient) { + super(PublicCollections.NOTIFICATION, httpClient); + } + + public topMember = (memberUid: string, lastValue?: string, limit?: number) => + this.notificationRepo.getByMemberLive(memberUid, lastValue, limit); +} diff --git a/src/app/@api/order.api.ts b/src/app/@api/order.api.ts new file mode 100644 index 0000000..857826b --- /dev/null +++ b/src/app/@api/order.api.ts @@ -0,0 +1,41 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { + EthAddress, + PublicCollections, + Transaction, + WEN_FUNC, + WenRequest, +} from '@soonaverse/interfaces'; +import { TransactionRepository } from '@soonaverse/lib'; +import { Observable } from 'rxjs'; +import { BaseApi, SOON_ENV } from './base.api'; + +@Injectable({ + providedIn: 'root', +}) +export class OrderApi extends BaseApi { + private transactionRepo = new TransactionRepository(SOON_ENV); + + constructor(protected httpClient: HttpClient) { + super(PublicCollections.TRANSACTION, httpClient); + } + + public orderNft = (req: WenRequest): Observable => + this.request(WEN_FUNC.orderNft, req); + + public orderToken = (req: WenRequest): Observable => + this.request(WEN_FUNC.orderToken, req); + + public validateAddress = (req: WenRequest): Observable => + this.request(WEN_FUNC.validateAddress, req); + + public openBid = (req: WenRequest): Observable => + this.request(WEN_FUNC.openBid, req); + + public listenMultiple = (ids: EthAddress[]) => + this.transactionRepo.getByFieldLive( + ids.map(() => 'uid'), + ids, + ); +} diff --git a/src/app/@api/proposal.api.ts b/src/app/@api/proposal.api.ts new file mode 100644 index 0000000..08d234f --- /dev/null +++ b/src/app/@api/proposal.api.ts @@ -0,0 +1,140 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { + EthAddress, + Member, + Proposal, + PublicCollections, + Timestamp, + Transaction, + WEN_FUNC, + WenRequest, +} from '@soonaverse/interfaces'; +import { + MemberRepository, + ProposalMemberRepository, + ProposalRepository, + TransactionRepository, +} from '@soonaverse/lib'; +import { Observable, map, of, switchMap } from 'rxjs'; +import { BaseApi, SOON_ENV } from './base.api'; + +export enum ProposalFilter { + ALL = 'all', + DRAFT = 'draft', + ACTIVE = 'active', + COMPLETED = 'completed', + REJECTED = 'rejected', +} + +export interface ProposalParticipantWithMember extends Member { + voted?: boolean; + weight?: number; + values?: number[]; + + // Only internal variable. + _issuedOn?: Timestamp; +} + +export interface TransactionWithFullMember extends Transaction { + memberRec?: Member; +} + +@Injectable({ + providedIn: 'root', +}) +export class ProposalApi extends BaseApi { + private memberRepo = new MemberRepository(SOON_ENV); + private proposalRepo = new ProposalRepository(SOON_ENV); + private transactionRepo = new TransactionRepository(SOON_ENV); + private proposalMemberRepo = new ProposalMemberRepository(SOON_ENV); + + constructor(protected httpClient: HttpClient) { + super(PublicCollections.PROPOSAL, httpClient); + } + + public listen = (id: EthAddress) => this.proposalRepo.getByIdLive(id); + + public lastActive = (lastValue?: string) => this.proposalRepo.getActiveLive(lastValue); + + public listenSpace = ( + space: string, + filter: ProposalFilter = ProposalFilter.ALL, + lastValue?: string, + ) => this.proposalRepo.getBySpaceAndFilterLive(space, filter, lastValue); + + public lastVotes = (proposalId: string, lastValue?: string) => + this.transactionRepo.getLatestVotesForProposalLive(proposalId, undefined, lastValue).pipe( + switchMap(async (transactions) => { + const memberIds = Array.from(new Set(transactions.map((t) => t.member!))); + const memberPromises = memberIds.map((id) => this.memberRepo.getById(id)); + const members = await Promise.all(memberPromises); + + return transactions.map( + (t) => + ({ + ...t, + memberRec: members.find((m) => m?.uid === t.member), + } as TransactionWithFullMember), + ); + }), + ); + + public getMembersVotes = (proposalId: string, memberId: string, lastValue?: string) => + this.transactionRepo.getLatestVotesForProposalLive(proposalId, memberId, lastValue); + + public canMemberVote(proposalId: string, memberId: string) { + if (!proposalId || !memberId) { + return of(false); + } + return this.proposalMemberRepo + .getByIdLive(proposalId, memberId) + .pipe(map((member) => !!member)); + } + + public listenPendingMembers = (proposalId: string, lastValue?: string) => + this.proposalMemberRepo.getVotingMembersLive(proposalId, false, lastValue).pipe( + switchMap(async (proposalMembers) => { + const memberPromises = proposalMembers.map(async (propMember) => { + const member = (await this.memberRepo.getById(propMember.uid))!; + return { + ...member, + voted: propMember.voted, + weight: propMember.weight, + values: propMember.values, + _issuedOn: propMember.createdOn, + } as ProposalParticipantWithMember; + }); + return await Promise.all(memberPromises); + }), + ); + + public listenVotedMembers = (proposalId: string, lastValue?: string) => + this.proposalMemberRepo.getVotingMembersLive(proposalId, true, lastValue).pipe( + switchMap(async (proposalMembers) => { + const memberPromises = proposalMembers.map(async (propMember) => { + const member = (await this.memberRepo.getById(propMember.uid))!; + return { + ...member, + voted: propMember.voted, + weight: propMember.weight, + values: propMember.values, + _issuedOn: propMember.createdOn, + } as ProposalParticipantWithMember; + }); + return await Promise.all(memberPromises); + }), + ); + + public create = (req: WenRequest): Observable => + this.request(WEN_FUNC.createProposal, req); + + public approve = (req: WenRequest): Observable => + this.request(WEN_FUNC.approveProposal, req); + + public reject = (req: WenRequest): Observable => + this.request(WEN_FUNC.rejectProposal, req); + + public vote = (req: WenRequest): Observable => + this.request(WEN_FUNC.voteOnProposal, req); +} diff --git a/src/app/@api/space.api.ts b/src/app/@api/space.api.ts new file mode 100644 index 0000000..2a649bb --- /dev/null +++ b/src/app/@api/space.api.ts @@ -0,0 +1,114 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { + PublicCollections, + Space, + SpaceMember, + WEN_FUNC, + WenRequest, +} from '@soonaverse/interfaces'; +import { + MemberRepository, + SpaceBlockedMemberRepository, + SpaceGuardianRepository, + SpaceKnockingMemberRepository, + SpaceMemberRepository, +} from '@soonaverse/lib'; +import { Observable, map, of, switchMap } from 'rxjs'; +import { BaseApi, SOON_ENV } from './base.api'; + +@Injectable({ + providedIn: 'root', +}) +export class SpaceApi extends BaseApi { + private memberRepo = new MemberRepository(SOON_ENV); + private spaceMemberRepo = new SpaceMemberRepository(SOON_ENV); + private spaceGuardianRepo = new SpaceGuardianRepository(SOON_ENV); + private spaceBlockedRepo = new SpaceBlockedMemberRepository(SOON_ENV); + private spaceKnockingRepo = new SpaceKnockingMemberRepository(SOON_ENV); + + constructor(protected httpClient: HttpClient) { + super(PublicCollections.SPACE, httpClient); + } + + public isMemberWithinSpace(spaceId: string, memberId: string): Observable { + if (!spaceId || !memberId) { + return of(false); + } + return this.spaceMemberRepo.getByIdLive(spaceId, memberId).pipe(map((member) => !!member)); + } + + public isGuardianWithinSpace(spaceId: string, memberId: string): Observable { + if (!spaceId || !memberId) { + return of(false); + } + return this.spaceGuardianRepo.getByIdLive(spaceId, memberId).pipe(map((member) => !!member)); + } + + public isPendingMemberWithinSpace(spaceId: string, memberId: string): Observable { + if (!spaceId || !memberId) { + return of(false); + } + return this.spaceKnockingRepo.getByIdLive(spaceId, memberId).pipe(map((member) => !!member)); + } + + public listenGuardians = (spaceId: string, lastValue?: string) => + this.spaceGuardianRepo.getAllLive(spaceId, lastValue).pipe(switchMap(this.getMembers)); + + public listenMembersWithoutData = (spaceId: string, lastValue?: string) => + this.spaceMemberRepo + .getAllLive(spaceId, lastValue) + .pipe(map((members) => members.map((m) => ({ uid: m.uid })))); + + public listenMembers = (spaceId: string, lastValue?: string) => + this.spaceMemberRepo.getAllLive(spaceId, lastValue).pipe(switchMap(this.getMembers)); + + public listenBlockedMembers = (spaceId: string, lastValue?: string) => + this.spaceBlockedRepo.getAllLive(spaceId, lastValue).pipe(switchMap(this.getMembers)); + + public listenPendingMembers = (spaceId: string, lastValue?: string) => + this.spaceKnockingRepo.getAllLive(spaceId, lastValue).pipe(switchMap(this.getMembers)); + + private getMembers = async (spaceMembers: SpaceMember[]) => { + const promises = spaceMembers.map( + async (spaceMember) => (await this.memberRepo.getById(spaceMember.uid))!, + ); + return await Promise.all(promises); + }; + + public create = (req: WenRequest): Observable => + this.request(WEN_FUNC.createSpace, req); + + public save = (req: WenRequest): Observable => + this.request(WEN_FUNC.updateSpace, req); + + public join = (req: WenRequest): Observable => + this.request(WEN_FUNC.joinSpace, req); + + public leave = (req: WenRequest): Observable => + this.request(WEN_FUNC.leaveSpace, req); + + public setGuardian = (req: WenRequest): Observable => + this.request(WEN_FUNC.addGuardianSpace, req); + + public claimSpace = (req: WenRequest): Observable => + this.request(WEN_FUNC.claimSpace, req); + + public removeGuardian = (req: WenRequest): Observable => + this.request(WEN_FUNC.removeGuardianSpace, req); + + public blockMember = (req: WenRequest): Observable => + this.request(WEN_FUNC.blockMemberSpace, req); + + public unblockMember = (req: WenRequest): Observable => + this.request(WEN_FUNC.unblockMemberSpace, req); + + public acceptMember = (req: WenRequest): Observable => + this.request(WEN_FUNC.acceptMemberSpace, req); + + public rejectMember = (req: WenRequest): Observable => + this.request(WEN_FUNC.declineMemberSpace, req); + + public update = (req: WenRequest): Observable => + this.request(WEN_FUNC.updateSpace, req); +} diff --git a/src/app/@api/stake.ts b/src/app/@api/stake.ts new file mode 100644 index 0000000..626ec6e --- /dev/null +++ b/src/app/@api/stake.ts @@ -0,0 +1,13 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { PublicCollections, Stake } from '@soonaverse/interfaces'; +import { BaseApi } from './base.api'; + +@Injectable({ + providedIn: 'root', +}) +export class StakeApi extends BaseApi { + constructor(protected httpClient: HttpClient) { + super(PublicCollections.STAKE, httpClient); + } +} diff --git a/src/app/@api/stake_reward.ts b/src/app/@api/stake_reward.ts new file mode 100644 index 0000000..a81f176 --- /dev/null +++ b/src/app/@api/stake_reward.ts @@ -0,0 +1,71 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { + MIN_AMOUNT_TO_TRANSFER, + PublicCollections, + StakeReward, + StakeRewardStatus, + StakeType, + TokenStats, + WEN_FUNC, + WenRequest, +} from '@soonaverse/interfaces'; +import { StakeRewardRepository } from '@soonaverse/lib'; +import dayjs from 'dayjs'; +import { Observable } from 'rxjs'; +import { BaseApi, SOON_ENV } from './base.api'; + +@Injectable({ + providedIn: 'root', +}) +export class StakeRewardApi extends BaseApi { + private stakeRewardRepo = new StakeRewardRepository(SOON_ENV); + + constructor(protected httpClient: HttpClient) { + super(PublicCollections.STAKE_REWARD, httpClient); + } + + /** + "/ = % they own + + % they own * = total tokens earn in one year + + / " + */ + public calcApy( + tokenStats: TokenStats, + memberStakeAmount: number, + rewards: StakeReward[], + ): number { + const totalFutureRewards = rewards + .filter((v) => { + return ( + v.status === StakeRewardStatus.UNPROCESSED && + dayjs().add(52, 'weeks').isAfter(v.endDate.toDate()) + ); + }) + .reduce((acc, act) => acc + act.tokensToDistribute, 0); + + if (totalFutureRewards < MIN_AMOUNT_TO_TRANSFER) { + return 0; + } + let multiplier = + memberStakeAmount / + ((tokenStats.stakes?.[StakeType.DYNAMIC]?.value || 0) + memberStakeAmount); + if (multiplier > 1) { + multiplier = 1; + } + + const potentialEarnedTokens = multiplier * totalFutureRewards; + return potentialEarnedTokens / memberStakeAmount; + } + + public token = (token: string, lastValue?: string) => + this.stakeRewardRepo.getByTokenLive(token, lastValue); + + public submit = (req: WenRequest): Observable => + this.request(WEN_FUNC.stakeReward, req); + + public remove = (req: WenRequest): Observable => + this.request(WEN_FUNC.removeStakeReward, req); +} diff --git a/src/app/@api/ticker.api.ts b/src/app/@api/ticker.api.ts new file mode 100644 index 0000000..80a03c4 --- /dev/null +++ b/src/app/@api/ticker.api.ts @@ -0,0 +1,18 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { PublicCollections, Ticker } from '@soonaverse/interfaces'; +import { TickerRepository } from '@soonaverse/lib'; +import { BaseApi, SOON_ENV } from './base.api'; + +@Injectable({ + providedIn: 'root', +}) +export class TickerApi extends BaseApi { + private tickerRepo = new TickerRepository(SOON_ENV); + + constructor(protected httpClient: HttpClient) { + super(PublicCollections.TICKER, httpClient); + } + + public listen = (id: string) => this.tickerRepo.getByIdLive(id); +} diff --git a/src/app/@api/token.api.ts b/src/app/@api/token.api.ts new file mode 100644 index 0000000..7a5cfa6 --- /dev/null +++ b/src/app/@api/token.api.ts @@ -0,0 +1,102 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { + PublicCollections, + Token, + TokenDistribution, + Transaction, + WEN_FUNC, + WenRequest, +} from '@soonaverse/interfaces'; +import { + TokenDistributionRepository, + TokenRepository, + TokenStatsRepository, +} from '@soonaverse/lib'; +import { Observable, of } from 'rxjs'; +import { BaseApi, SOON_ENV } from './base.api'; + +@Injectable({ + providedIn: 'root', +}) +export class TokenApi extends BaseApi { + private tokenRepo = new TokenRepository(SOON_ENV); + private tokenStatsRepo = new TokenStatsRepository(SOON_ENV); + private tokenDistributionRepo = new TokenDistributionRepository(SOON_ENV); + + constructor(protected httpClient: HttpClient) { + super(PublicCollections.TOKEN, httpClient); + } + + public create = (req: WenRequest): Observable => + this.request(WEN_FUNC.createToken, req); + + public update = (req: WenRequest): Observable => + this.request(WEN_FUNC.updateToken, req); + + public setTokenAvailableForSale = (req: WenRequest): Observable => + this.request(WEN_FUNC.setTokenAvailableForSale, req); + + public vote = (req: WenRequest): Observable => + this.request(WEN_FUNC.voteController, req); + + public rank = (req: WenRequest): Observable => + this.request(WEN_FUNC.rankController, req); + + public cancelPublicSale = (req: WenRequest): Observable => + this.request(WEN_FUNC.cancelPublicSale, req); + + public airdropToken = (req: WenRequest): Observable => + this.request(WEN_FUNC.airdropToken, req); + + public airdropMintedToken = (req: WenRequest): Observable => + this.request(WEN_FUNC.airdropMintedToken, req); + + public creditToken = (req: WenRequest): Observable => + this.request(WEN_FUNC.creditToken, req); + + public claimAirdroppedToken = (req: WenRequest): Observable => + this.request(WEN_FUNC.claimAirdroppedToken, req); + + public claimMintedToken = (req: WenRequest): Observable => + this.request(WEN_FUNC.claimMintedTokenOrder, req); + + public depositStake = (req: WenRequest): Observable => + this.request(WEN_FUNC.depositStake, req); + + public voteOnProposal = (req: WenRequest): Observable => + this.request(WEN_FUNC.voteOnProposal, req); + + public enableTrading = (req: WenRequest): Observable => + this.request(WEN_FUNC.enableTokenTrading, req); + + public getMembersDistribution(tokenId: string, memberId: string) { + if (!tokenId || !memberId) { + return of(undefined); + } + return this.tokenDistributionRepo.getByIdLive(tokenId.toLowerCase(), memberId.toLowerCase()); + } + + public getDistributions(tokenId?: string): Observable { + if (!tokenId) { + return of(undefined); + } + return this.tokenDistributionRepo.getAllLive(tokenId.toLowerCase()); + } + + public stats(tokenId: string) { + if (!tokenId) { + return of(undefined); + } + return this.tokenStatsRepo.getByIdLive(tokenId.toLowerCase(), tokenId.toLowerCase()); + } + + public topPublic = (lastValue?: string, limit?: number) => + this.tokenRepo.getByStatusLive([], lastValue, limit); + + public top = (lastValue?: string, limit?: number): Observable => + this.tokenRepo.getTopLive(lastValue, limit); + + public space = (space: string, lastValue?: string) => + this.tokenRepo.getBySpaceLive(space, lastValue); +} diff --git a/src/app/@api/token_market.api.ts b/src/app/@api/token_market.api.ts new file mode 100644 index 0000000..44fc497 --- /dev/null +++ b/src/app/@api/token_market.api.ts @@ -0,0 +1,55 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { + PublicCollections, + TokenTradeOrder, + TokenTradeOrderStatus, + TokenTradeOrderType, + WEN_FUNC, + WenRequest, +} from '@soonaverse/interfaces'; +import { TokenMarketRepository } from '@soonaverse/lib'; +import { Observable, map } from 'rxjs'; +import { BaseApi, SOON_ENV } from './base.api'; + +@Injectable({ + providedIn: 'root', +}) +export class TokenMarketApi extends BaseApi { + private tokenMarketRepo = new TokenMarketRepository(SOON_ENV); + + constructor(protected httpClient: HttpClient) { + super(PublicCollections.TOKEN_MARKET, httpClient); + } + + public bidsActive = (token: string, lastValue?: string) => + this.tokenMarketRepo.getBidsLive( + token, + TokenTradeOrderType.BUY, + TokenTradeOrderStatus.ACTIVE, + lastValue, + ); + + public asksActive = (token: string, lastValue?: string) => + this.tokenMarketRepo.getBidsLive( + token, + TokenTradeOrderType.SELL, + TokenTradeOrderStatus.ACTIVE, + lastValue, + ); + + public membersBids = (member: string, token: string, lastValue?: string) => + this.tokenMarketRepo.getMemberBidsLive(token, member, TokenTradeOrderType.BUY, lastValue); + + public membersAsks = (member: string, token: string, lastValue?: string) => + this.tokenMarketRepo.getMemberBidsLive(token, member, TokenTradeOrderType.SELL, lastValue); + + public listenAvgPrice = (tokenId: string) => + this.tokenMarketRepo.getTokenPriceLive(tokenId).pipe(map((result) => result.price)); + + public tradeToken = (req: WenRequest): Observable => + this.request(WEN_FUNC.tradeToken, req); + + public cancel = (req: WenRequest): Observable => + this.request(WEN_FUNC.cancelTradeOrder, req); +} diff --git a/src/app/@api/token_mint.api.ts b/src/app/@api/token_mint.api.ts new file mode 100644 index 0000000..a0e5358 --- /dev/null +++ b/src/app/@api/token_mint.api.ts @@ -0,0 +1,26 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { + PublicCollections, + Token, + Transaction, + WEN_FUNC, + WenRequest, +} from '@soonaverse/interfaces'; +import { Observable } from 'rxjs'; +import { BaseApi } from './base.api'; + +@Injectable({ + providedIn: 'root', +}) +export class TokenMintApi extends BaseApi { + constructor(protected httpClient: HttpClient) { + super(PublicCollections.TOKEN, httpClient); + } + + public mintToken = (req: WenRequest): Observable => + this.request(WEN_FUNC.mintTokenOrder, req); + + public importToken = (req: WenRequest): Observable => + this.request(WEN_FUNC.importMintedToken, req); +} diff --git a/src/app/@api/token_purchase.api.ts b/src/app/@api/token_purchase.api.ts new file mode 100644 index 0000000..a2a2970 --- /dev/null +++ b/src/app/@api/token_purchase.api.ts @@ -0,0 +1,51 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { + PublicCollections, + TokenPurchase, + TokenPurchaseAge, + TokenTradeOrder, + TokenTradeOrderType, +} from '@soonaverse/interfaces'; +import { TokenPurchaseRepository, TokenStatsRepository } from '@soonaverse/lib'; +import { map } from 'rxjs'; +import { BaseApi, SOON_ENV } from './base.api'; + +const TRADE_HISTORY_SIZE = 100; + +@Injectable({ + providedIn: 'root', +}) +export class TokenPurchaseApi extends BaseApi { + private tokenStatRepo = new TokenStatsRepository(SOON_ENV); + private tokenPurchaseRepo = new TokenPurchaseRepository(SOON_ENV); + + constructor(protected httpClient: HttpClient) { + super(PublicCollections.TOKEN_PURCHASE, httpClient); + } + + public listenVolume7d = (tokenId: string) => + this.tokenStatRepo + .getByIdLive(tokenId, tokenId) + .pipe(map((stats) => (stats?.volume || {})[TokenPurchaseAge.IN_7_D] || 0)); + + public listenVolume24h = (tokenId: string) => + this.tokenStatRepo + .getByIdLive(tokenId, tokenId) + .pipe(map((stats) => (stats?.volume || {})[TokenPurchaseAge.IN_24_H] || 0)); + + public listenAvgPrice7d = (tokenId: string) => this.tokenPurchaseRepo.getAvgPriceLive(tokenId); + + public listenChangePrice24h = (tokenId: string) => + this.tokenPurchaseRepo.getPriceChangeLive(tokenId); + + public listenToPurchases = (tokenId: string, lastValue?: string) => + this.tokenPurchaseRepo.getPuchasesLive(tokenId, lastValue); + + public getPurchasesForTrade = (tradeOrder: TokenTradeOrder, lastValue?: string) => + this.tokenPurchaseRepo.getByFieldLive( + tradeOrder.type === TokenTradeOrderType.BUY ? 'buy' : 'sell', + tradeOrder.uid, + lastValue, + ); +} diff --git a/src/app/@api/transaction.api.ts b/src/app/@api/transaction.api.ts new file mode 100644 index 0000000..b23f7bd --- /dev/null +++ b/src/app/@api/transaction.api.ts @@ -0,0 +1,17 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { PublicCollections, Transaction, WEN_FUNC, WenRequest } from '@soonaverse/interfaces'; +import { Observable } from 'rxjs'; +import { BaseApi } from './base.api'; + +@Injectable({ + providedIn: 'root', +}) +export class TransactionApi extends BaseApi { + constructor(protected httpClient: HttpClient) { + super(PublicCollections.TRANSACTION, httpClient); + } + + public creditUnrefundable = (req: WenRequest): Observable => + this.request(WEN_FUNC.creditUnrefundable, req); +} diff --git a/src/app/@core/core.module.ts b/src/app/@core/core.module.ts new file mode 100644 index 0000000..853f468 --- /dev/null +++ b/src/app/@core/core.module.ts @@ -0,0 +1,9 @@ +import { CommonModule } from '@angular/common'; +import { HttpClientModule } from '@angular/common/http'; +import { NgModule } from '@angular/core'; +import { NzNotificationModule } from 'ng-zorro-antd/notification'; + +@NgModule({ + imports: [CommonModule, HttpClientModule, NzNotificationModule], +}) +export class CoreModule {} diff --git a/src/app/@core/directives/.gitkeep b/src/app/@core/directives/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/app/@core/directives/click-outside/click-outside.directive.ts b/src/app/@core/directives/click-outside/click-outside.directive.ts new file mode 100644 index 0000000..b9cad7c --- /dev/null +++ b/src/app/@core/directives/click-outside/click-outside.directive.ts @@ -0,0 +1,19 @@ +import { Directive, ElementRef, EventEmitter, HostListener, Output } from '@angular/core'; + +@Directive({ + selector: '[wenClickOutside]', +}) +export class ClickOutsideDirective { + @Output() clickOutside = new EventEmitter(); + + constructor(private elementRef: ElementRef) {} + + @HostListener('document:click', ['$event.target']) + onClick(target: HTMLElement): void { + const clickedInside = this.elementRef.nativeElement.contains(target); + + if (!clickedInside) { + this.clickOutside.emit(); + } + } +} diff --git a/src/app/@core/directives/click-outside/click-outside.module.ts b/src/app/@core/directives/click-outside/click-outside.module.ts new file mode 100644 index 0000000..5c80254 --- /dev/null +++ b/src/app/@core/directives/click-outside/click-outside.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { ClickOutsideDirective } from './click-outside.directive'; + +@NgModule({ + declarations: [ClickOutsideDirective], + imports: [CommonModule], + exports: [ClickOutsideDirective], +}) +export class ClickOutsideModule {} diff --git a/src/app/@core/directives/on-visible/on-visible.directive.ts b/src/app/@core/directives/on-visible/on-visible.directive.ts new file mode 100644 index 0000000..bf97f55 --- /dev/null +++ b/src/app/@core/directives/on-visible/on-visible.directive.ts @@ -0,0 +1,44 @@ +import { + AfterViewInit, + Directive, + ElementRef, + EventEmitter, + OnDestroy, + Output, +} from '@angular/core'; +import { DeviceService } from '@core/services/device'; + +@Directive({ selector: '[wenVisible]' }) +export class OnVisibleDirective implements AfterViewInit, OnDestroy { + @Output() public wenVisible: EventEmitter = new EventEmitter(); + + private _intersectionObserver?: any; + + constructor(private _element: ElementRef, private deviceService: DeviceService) {} + + public ngAfterViewInit() { + if (this.deviceService.isBrowser) { + this._intersectionObserver = new IntersectionObserver((entries) => { + this.checkForIntersection(entries); + }, {}); + this._intersectionObserver.observe(this._element.nativeElement); + } + } + + public ngOnDestroy() { + if (this._intersectionObserver) { + this._intersectionObserver.disconnect(); + } + } + + private checkForIntersection = (entries: Array) => { + entries.forEach((entry: IntersectionObserverEntry) => { + const isIntersecting = + (entry).isIntersecting && entry.target === this._element.nativeElement; + + if (isIntersecting) { + this.wenVisible.emit(); + } + }); + }; +} diff --git a/src/app/@core/directives/on-visible/on-visible.module.ts b/src/app/@core/directives/on-visible/on-visible.module.ts new file mode 100644 index 0000000..66a6ef7 --- /dev/null +++ b/src/app/@core/directives/on-visible/on-visible.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { OnVisibleDirective } from './on-visible.directive'; + +@NgModule({ + declarations: [OnVisibleDirective], + imports: [CommonModule], + exports: [OnVisibleDirective], +}) +export class OnVisibleModule {} diff --git a/src/app/@core/guards/.gitkeep b/src/app/@core/guards/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/app/@core/guards/auth.guard.ts b/src/app/@core/guards/auth.guard.ts new file mode 100644 index 0000000..61b3fcb --- /dev/null +++ b/src/app/@core/guards/auth.guard.ts @@ -0,0 +1,29 @@ +import { Injectable } from '@angular/core'; +import { CanLoad, Route, Router, UrlSegment } from '@angular/router'; +import { AuthService } from '@components/auth/services/auth.service'; +import { ROUTER_UTILS } from '../utils/router.utils'; + +@Injectable({ + providedIn: 'root', +}) +export class AuthGuard implements CanLoad { + constructor(private router: Router, private authService: AuthService) {} + + canLoad(route: Route, segments: UrlSegment[]): boolean { + const isLoggedIn = this.authService.isLoggedIn; + + if (isLoggedIn) { + return true; + } + + const returnUrl = segments.map((s) => s.path).join('/'); + + const { root, signIn } = ROUTER_UTILS.config.auth; + + this.router.navigate(['/', root, signIn], { + queryParams: { returnUrl }, + }); + + return false; + } +} diff --git a/src/app/@core/guards/index.ts b/src/app/@core/guards/index.ts new file mode 100644 index 0000000..c6eedf2 --- /dev/null +++ b/src/app/@core/guards/index.ts @@ -0,0 +1,3 @@ +export { AuthGuard } from './auth.guard'; +export { NoAuthGuard } from './no-auth.guard'; +export { RoleGuard } from './role.guard'; diff --git a/src/app/@core/guards/no-auth.guard.ts b/src/app/@core/guards/no-auth.guard.ts new file mode 100644 index 0000000..c713cfb --- /dev/null +++ b/src/app/@core/guards/no-auth.guard.ts @@ -0,0 +1,22 @@ +import { Injectable } from '@angular/core'; +import { CanLoad, Router } from '@angular/router'; +import { AuthService } from '@components/auth/services/auth.service'; +import { ROUTER_UTILS } from '../utils/router.utils'; + +@Injectable({ + providedIn: 'root', +}) +export class NoAuthGuard implements CanLoad { + constructor(private router: Router, private authService: AuthService) {} + + canLoad(): boolean { + const isLoggedIn = this.authService.isLoggedIn; + + if (isLoggedIn) { + this.router.navigate([ROUTER_UTILS.config.base.home]); + return false; + } + + return true; + } +} diff --git a/src/app/@core/guards/role.guard.ts b/src/app/@core/guards/role.guard.ts new file mode 100644 index 0000000..85eaa84 --- /dev/null +++ b/src/app/@core/guards/role.guard.ts @@ -0,0 +1,12 @@ +import { Injectable } from '@angular/core'; +import { CanActivate, UrlTree } from '@angular/router'; +import { Observable } from 'rxjs'; + +@Injectable({ + providedIn: 'root', +}) +export class RoleGuard implements CanActivate { + canActivate(): Observable | Promise | boolean | UrlTree { + return true; + } +} diff --git a/src/app/@core/pipes/bytes/bytes.module.ts b/src/app/@core/pipes/bytes/bytes.module.ts new file mode 100644 index 0000000..8815f84 --- /dev/null +++ b/src/app/@core/pipes/bytes/bytes.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { BytesPipe } from './bytes.pipe'; + +@NgModule({ + declarations: [BytesPipe], + imports: [CommonModule], + exports: [BytesPipe], +}) +export class BytesModule {} diff --git a/src/app/@core/pipes/bytes/bytes.pipe.ts b/src/app/@core/pipes/bytes/bytes.pipe.ts new file mode 100644 index 0000000..ddd203b --- /dev/null +++ b/src/app/@core/pipes/bytes/bytes.pipe.ts @@ -0,0 +1,20 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'bytes', +}) +export class BytesPipe implements PipeTransform { + transform(bytes: number, decimals = 2): string { + if (bytes === 0) { + return '0 Bytes'; + } + + const k = 1024; + const dm = decimals < 0 ? 0 : decimals; + const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + + const i = Math.floor(Math.log(bytes) / Math.log(k)); + + return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; + } +} diff --git a/src/app/@core/pipes/countdown-time/countdown-time.module.ts b/src/app/@core/pipes/countdown-time/countdown-time.module.ts new file mode 100644 index 0000000..cfb3ceb --- /dev/null +++ b/src/app/@core/pipes/countdown-time/countdown-time.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { CountdownTime } from './countdown-time.pipe'; + +@NgModule({ + declarations: [CountdownTime], + imports: [CommonModule], + exports: [CountdownTime], +}) +export class CountdownTimeModule {} diff --git a/src/app/@core/pipes/countdown-time/countdown-time.pipe.ts b/src/app/@core/pipes/countdown-time/countdown-time.pipe.ts new file mode 100644 index 0000000..8c39b02 --- /dev/null +++ b/src/app/@core/pipes/countdown-time/countdown-time.pipe.ts @@ -0,0 +1,19 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { Timestamp } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; + +@Pipe({ + pure: false, + name: 'countdownTime', +}) +export class CountdownTime implements PipeTransform { + transform(date: dayjs.Dayjs | Timestamp | null): string { + if (!date) { + return ''; + } + + const midnight: dayjs.Dayjs = dayjs(new Date().setHours(0, 0, 0, 0)); + const difInSec: number = dayjs(date.toDate()).diff(dayjs(), 'second'); + return difInSec > 0 ? midnight.add(difInSec, 'second').format('mm:ss') : 'expired'; + } +} diff --git a/src/app/@core/pipes/formatToken/convert-token.pipe.ts b/src/app/@core/pipes/formatToken/convert-token.pipe.ts new file mode 100644 index 0000000..794ae1d --- /dev/null +++ b/src/app/@core/pipes/formatToken/convert-token.pipe.ts @@ -0,0 +1,52 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { CacheService } from '@core/services/cache/cache.service'; +import { + DEFAULT_NETWORK, + NETWORK_DETAIL, + Network, + getDefDecimalIfNotSet, +} from '@soonaverse/interfaces'; +import { firstValueFrom, skipWhile } from 'rxjs'; + +export interface ConvertValue { + value: number | null | undefined; + exponents: number | null | undefined; // DEFAULT TO SIX +} +@Pipe({ + name: 'convertToken', +}) +export class ConvertTokenPipe implements PipeTransform { + public constructor(private cache: CacheService) {} + public async transform( + value: number, + tokenUidOrNetwork: string | null | Network = DEFAULT_NETWORK, + ): Promise { + if (tokenUidOrNetwork === null || tokenUidOrNetwork === undefined) { + tokenUidOrNetwork = DEFAULT_NETWORK; + } + + if (!value) { + value = 0; + } + + if (Object.keys(Network).includes(tokenUidOrNetwork.toUpperCase())) { + value = value * NETWORK_DETAIL[tokenUidOrNetwork].divideBy; + } else { + const token = await firstValueFrom( + this.cache.getToken(tokenUidOrNetwork).pipe( + skipWhile((t) => { + return !t; + }), + ), + ); + if (!token) { + // Unable to get token. + return 0; + } + + value = value * Math.pow(10, getDefDecimalIfNotSet(token.decimals)); + } + + return value; + } +} diff --git a/src/app/@core/pipes/formatToken/format-token.module.ts b/src/app/@core/pipes/formatToken/format-token.module.ts new file mode 100644 index 0000000..ab15445 --- /dev/null +++ b/src/app/@core/pipes/formatToken/format-token.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { ConvertTokenPipe } from './convert-token.pipe'; +import { FormatTokenPipe } from './format-token.pipe'; + +@NgModule({ + declarations: [FormatTokenPipe, ConvertTokenPipe], + imports: [CommonModule], + exports: [FormatTokenPipe, ConvertTokenPipe], +}) +export class FormatTokenModule {} diff --git a/src/app/@core/pipes/formatToken/format-token.pipe.ts b/src/app/@core/pipes/formatToken/format-token.pipe.ts new file mode 100644 index 0000000..42501d4 --- /dev/null +++ b/src/app/@core/pipes/formatToken/format-token.pipe.ts @@ -0,0 +1,97 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { CacheService } from '@core/services/cache/cache.service'; +import { + DEFAULT_NETWORK, + NETWORK_DETAIL, + Network, + getDefDecimalIfNotSet, +} from '@soonaverse/interfaces'; +import { firstValueFrom, skipWhile } from 'rxjs'; + +const DEF_DECIMALS = 6; +export interface ConvertValue { + value: number | null | undefined; + exponents: number | null | undefined; // DEFAULT TO SIX +} +@Pipe({ + name: 'formatToken', +}) +export class FormatTokenPipe implements PipeTransform { + public constructor(private cache: CacheService) {} + public async transformTest( + _value: number | null | undefined | ConvertValue, + _tokenUidOrNetwork?: string | null, + _removeZeroes = false, + _showUnit = true, + _defDecimals = DEF_DECIMALS, + ): Promise { + return ''; + } + + public async transform( + value: number | null | undefined | ConvertValue, + tokenUidOrNetwork?: string | null, + removeZeroes = false, + showUnit = true, + defDecimals = DEF_DECIMALS, + ): Promise { + let network = DEFAULT_NETWORK; + if (typeof value === 'object') { + if (value?.value) { + value = this.multiValue(value); + } else { + value = 0; + } + } + + if (!value) { + value = 0; + } + + let tokenUid: string | undefined = undefined; + if (tokenUidOrNetwork) { + if (Object.keys(Network).includes(tokenUidOrNetwork.toUpperCase())) { + network = tokenUidOrNetwork; + } else { + tokenUid = tokenUidOrNetwork; + } + } + + if (tokenUid) { + const token = await firstValueFrom( + this.cache.getToken(tokenUid).pipe( + skipWhile((t) => { + return !t; + }), + ), + ); + if (!token) { + // Unable to get token. + return '-'; + } + + // We default to IOTA if it's not minted yet. + network = token.mintingData?.networkFormat || token.mintingData?.network || DEFAULT_NETWORK; + if (defDecimals > token.decimals) { + defDecimals = token.decimals; + } + + value = value / Math.pow(10, getDefDecimalIfNotSet(token.decimals)); + } else { + value = value / NETWORK_DETAIL[network].divideBy; + } + + const parts = (removeZeroes ? value : value.toFixed(defDecimals)).toString().split('.'); + const formattedValue = + parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',') + (parts.length === 2 ? '.' + parts[1] : ''); + return formattedValue + (showUnit ? ` ${NETWORK_DETAIL[network].label}` : ''); + } + + public multiValue(value: ConvertValue): number { + if (value.exponents === 0) { + return value.value!; + } else { + return value.value! * Math.pow(10, getDefDecimalIfNotSet(value.exponents)); + } + } +} diff --git a/src/app/@core/pipes/ipfs-badge/ipfs-badge.module.ts b/src/app/@core/pipes/ipfs-badge/ipfs-badge.module.ts new file mode 100644 index 0000000..b344c59 --- /dev/null +++ b/src/app/@core/pipes/ipfs-badge/ipfs-badge.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IpfsBadgePipe } from './ipfs-badge.pipe'; + +@NgModule({ + declarations: [IpfsBadgePipe], + imports: [CommonModule], + exports: [IpfsBadgePipe], +}) +export class IpfsBadgeModule {} diff --git a/src/app/@core/pipes/ipfs-badge/ipfs-badge.pipe.ts b/src/app/@core/pipes/ipfs-badge/ipfs-badge.pipe.ts new file mode 100644 index 0000000..5a5dabc --- /dev/null +++ b/src/app/@core/pipes/ipfs-badge/ipfs-badge.pipe.ts @@ -0,0 +1,25 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { FileMetedata, FILE_SIZES, IPFS_GATEWAY_AVATAR } from '@soonaverse/interfaces'; + +@Pipe({ + name: 'ipfsBadge', +}) +export class IpfsBadgePipe implements PipeTransform { + transform( + metadata?: FileMetedata, + size: FILE_SIZES.small | FILE_SIZES.large = FILE_SIZES.small, + ): string { + if (!metadata?.avatar || !metadata?.fileName) { + return '/assets/mocks/trophy.png'; + } + + // This IPFS + return ( + IPFS_GATEWAY_AVATAR + + (size === FILE_SIZES.small ? metadata.avatar : metadata.original) + + '/' + + metadata.fileName + + '.png' + ); + } +} diff --git a/src/app/@core/pipes/markdown/markdown.module.ts b/src/app/@core/pipes/markdown/markdown.module.ts new file mode 100644 index 0000000..3bc5857 --- /dev/null +++ b/src/app/@core/pipes/markdown/markdown.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { MarkDownPipe } from './markdown.pipe'; + +@NgModule({ + declarations: [MarkDownPipe], + imports: [CommonModule], + exports: [MarkDownPipe], +}) +export class MarkDownModule {} diff --git a/src/app/@core/pipes/markdown/markdown.pipe.ts b/src/app/@core/pipes/markdown/markdown.pipe.ts new file mode 100644 index 0000000..f7d162a --- /dev/null +++ b/src/app/@core/pipes/markdown/markdown.pipe.ts @@ -0,0 +1,26 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import reHypeStringify from 'rehype-stringify'; +import remarkGfm from 'remark-gfm'; +import remarkParse from 'remark-parse'; +import remarkReHype from 'remark-rehype'; +import { unified } from 'unified'; + +@Pipe({ + name: 'markdown', +}) +export class MarkDownPipe implements PipeTransform { + public transform(str: string | undefined): string { + if (!str) { + return ''; + } + + const output = unified() + .use(remarkParse) + .use(remarkGfm) + .use(remarkReHype) + .use(reHypeStringify) + .processSync(str); + + return String(output); + } +} diff --git a/src/app/@core/pipes/relative-time/relative-time.module.ts b/src/app/@core/pipes/relative-time/relative-time.module.ts new file mode 100644 index 0000000..de5c83d --- /dev/null +++ b/src/app/@core/pipes/relative-time/relative-time.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RelativeTime } from './relative-time.pipe'; + +@NgModule({ + declarations: [RelativeTime], + imports: [CommonModule], + exports: [RelativeTime], +}) +export class RelativeTimeModule {} diff --git a/src/app/@core/pipes/relative-time/relative-time.pipe.ts b/src/app/@core/pipes/relative-time/relative-time.pipe.ts new file mode 100644 index 0000000..7a4bf10 --- /dev/null +++ b/src/app/@core/pipes/relative-time/relative-time.pipe.ts @@ -0,0 +1,39 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { Timestamp } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import * as relativeTime from 'dayjs/plugin/relativeTime'; +import * as updateLocale from 'dayjs/plugin/updateLocale'; + +dayjs.extend(relativeTime); +dayjs.extend(updateLocale); +dayjs.updateLocale('en', { + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'in %d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }, +}); + +@Pipe({ + pure: false, + name: 'relativeTime', +}) +export class RelativeTime implements PipeTransform { + transform(date: dayjs.Dayjs | Timestamp | null, type: 'from' | 'to' = 'from'): string { + if (!date) { + return ''; + } + + return type === 'from' ? dayjs(date.toDate()).fromNow() : dayjs(date.toDate()).toNow(); + } +} diff --git a/src/app/@core/pipes/resize-avatar/resize-avatar.module.ts b/src/app/@core/pipes/resize-avatar/resize-avatar.module.ts new file mode 100644 index 0000000..1dfa89c --- /dev/null +++ b/src/app/@core/pipes/resize-avatar/resize-avatar.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { ResizeAvatarPipe } from './resize-avatar.pipe'; + +@NgModule({ + declarations: [ResizeAvatarPipe], + imports: [CommonModule], + exports: [ResizeAvatarPipe], +}) +export class ResizeAvatarModule {} diff --git a/src/app/@core/pipes/resize-avatar/resize-avatar.pipe.ts b/src/app/@core/pipes/resize-avatar/resize-avatar.pipe.ts new file mode 100644 index 0000000..911170c --- /dev/null +++ b/src/app/@core/pipes/resize-avatar/resize-avatar.pipe.ts @@ -0,0 +1,15 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { FILE_SIZES } from '@soonaverse/interfaces'; + +@Pipe({ + name: 'resizeAvatar', +}) +export class ResizeAvatarPipe implements PipeTransform { + transform(url?: string, size: FILE_SIZES.small | FILE_SIZES.large = FILE_SIZES.small): string { + if (!url) { + return '/assets/mocks/no_avatar.png'; + } + + return url; + } +} diff --git a/src/app/@core/pipes/strip-markdown/strip-markdown.module.ts b/src/app/@core/pipes/strip-markdown/strip-markdown.module.ts new file mode 100644 index 0000000..cf46227 --- /dev/null +++ b/src/app/@core/pipes/strip-markdown/strip-markdown.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { StripMarkDownPipe } from './strip-markdown.pipe'; + +@NgModule({ + declarations: [StripMarkDownPipe], + imports: [CommonModule], + exports: [StripMarkDownPipe], +}) +export class StripMarkDownModule {} diff --git a/src/app/@core/pipes/strip-markdown/strip-markdown.pipe.ts b/src/app/@core/pipes/strip-markdown/strip-markdown.pipe.ts new file mode 100644 index 0000000..9c10d89 --- /dev/null +++ b/src/app/@core/pipes/strip-markdown/strip-markdown.pipe.ts @@ -0,0 +1,16 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { remark } from 'remark'; +import strip from 'strip-markdown'; + +@Pipe({ + name: 'stripMarkdown', +}) +export class StripMarkDownPipe implements PipeTransform { + public transform(str: string | undefined): string { + if (!str) { + return ''; + } + + return String(remark().use(strip).processSync(str)); + } +} diff --git a/src/app/@core/pipes/time/time.module.ts b/src/app/@core/pipes/time/time.module.ts new file mode 100644 index 0000000..d827e53 --- /dev/null +++ b/src/app/@core/pipes/time/time.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { Time } from './time.pipe'; + +@NgModule({ + declarations: [Time], + imports: [CommonModule], + exports: [Time], +}) +export class TimeModule {} diff --git a/src/app/@core/pipes/time/time.pipe.ts b/src/app/@core/pipes/time/time.pipe.ts new file mode 100644 index 0000000..47397d4 --- /dev/null +++ b/src/app/@core/pipes/time/time.pipe.ts @@ -0,0 +1,17 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { Timestamp } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; + +@Pipe({ + pure: false, + name: 'Time', +}) +export class Time implements PipeTransform { + transform(date: dayjs.Dayjs | Timestamp | null): string { + if (!date || !date.toDate) { + return '--:--:--'; + } + + return dayjs(date.toDate()).format('HH:mm:ss'); + } +} diff --git a/src/app/@core/pipes/truncate/truncate.module.ts b/src/app/@core/pipes/truncate/truncate.module.ts new file mode 100644 index 0000000..df74866 --- /dev/null +++ b/src/app/@core/pipes/truncate/truncate.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { TruncatePipe } from './truncate.pipe'; + +@NgModule({ + declarations: [TruncatePipe], + imports: [CommonModule], + exports: [TruncatePipe], +}) +export class TruncateModule {} diff --git a/src/app/@core/pipes/truncate/truncate.pipe.ts b/src/app/@core/pipes/truncate/truncate.pipe.ts new file mode 100644 index 0000000..27a93bf --- /dev/null +++ b/src/app/@core/pipes/truncate/truncate.pipe.ts @@ -0,0 +1,16 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'truncate', +}) +export class TruncatePipe implements PipeTransform { + transform(value: string | undefined, args: any[]): string { + if (!value) { + return ''; + } + + const limit = args.length > 0 ? parseInt(args[0], 10) : 20; + const trail = args.length > 1 ? args[1] : '...'; + return value.length > limit ? value.substring(0, limit) + trail : value; + } +} diff --git a/src/app/@core/pipes/unknown-if-zero/unknown-if-zero.module.ts b/src/app/@core/pipes/unknown-if-zero/unknown-if-zero.module.ts new file mode 100644 index 0000000..5b884d8 --- /dev/null +++ b/src/app/@core/pipes/unknown-if-zero/unknown-if-zero.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { UnknownIfZeroPipe } from './unknown-if-zero.pipe'; + +@NgModule({ + declarations: [UnknownIfZeroPipe], + imports: [CommonModule], + exports: [UnknownIfZeroPipe], +}) +export class UnknownIfZeroModule {} diff --git a/src/app/@core/pipes/unknown-if-zero/unknown-if-zero.pipe.ts b/src/app/@core/pipes/unknown-if-zero/unknown-if-zero.pipe.ts new file mode 100644 index 0000000..a780610 --- /dev/null +++ b/src/app/@core/pipes/unknown-if-zero/unknown-if-zero.pipe.ts @@ -0,0 +1,14 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'unknownIfZero', +}) +export class UnknownIfZeroPipe implements PipeTransform { + transform(value?: string | null): any { + if (!(parseFloat(value || '') < 0 || parseFloat(value || '') > 0)) { + return '-'; + } else { + return value; + } + } +} diff --git a/src/app/@core/pipes/usd-below-two-decimals/usd-below-two-decimals.module.ts b/src/app/@core/pipes/usd-below-two-decimals/usd-below-two-decimals.module.ts new file mode 100644 index 0000000..7da4d8f --- /dev/null +++ b/src/app/@core/pipes/usd-below-two-decimals/usd-below-two-decimals.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { UsdBelowTwoDecimals } from './usd-below-two-decimals.pipe'; + +@NgModule({ + declarations: [UsdBelowTwoDecimals], + imports: [CommonModule], + exports: [UsdBelowTwoDecimals], +}) +export class UsdBelowTwoDecimalsModule {} diff --git a/src/app/@core/pipes/usd-below-two-decimals/usd-below-two-decimals.pipe.ts b/src/app/@core/pipes/usd-below-two-decimals/usd-below-two-decimals.pipe.ts new file mode 100644 index 0000000..bce23b9 --- /dev/null +++ b/src/app/@core/pipes/usd-below-two-decimals/usd-below-two-decimals.pipe.ts @@ -0,0 +1,11 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + pure: false, + name: 'UsdBelowTwoDecimals', +}) +export class UsdBelowTwoDecimals implements PipeTransform { + transform(number: string | null): string { + return (number === '$0.00' ? '<' : '') + number; + } +} diff --git a/src/app/@core/services/.gitkeep b/src/app/@core/services/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/app/@core/services/cache/cache.service.ts b/src/app/@core/services/cache/cache.service.ts new file mode 100644 index 0000000..618f625 --- /dev/null +++ b/src/app/@core/services/cache/cache.service.ts @@ -0,0 +1,214 @@ +import { Injectable, OnDestroy } from '@angular/core'; +import { CollectionApi } from '@api/collection.api'; +import { TickerApi } from '@api/ticker.api'; +import { TokenApi } from '@api/token.api'; +import { Collection, Space, TICKERS, Ticker, Token } from '@soonaverse/interfaces'; +import { BehaviorSubject, Observable, Subscription, of, timer } from 'rxjs'; +import { SpaceApi } from './../../../@api/space.api'; + +export type CacheObject = { + [key: string]: BehaviorSubject; +}; + +export const MAX_MULTIPLE_ITEMS = 10; +export const CACHE_FETCH_DEBOUNCE_SPAN = 250; + +@Injectable({ + providedIn: 'root', +}) +export class CacheService implements OnDestroy { + public spaces: CacheObject = {}; + public tokens: CacheObject = {}; + public collections: CacheObject = {}; + public iotaUsdPrice$ = new BehaviorSubject(0); + public smrUsdPrice$ = new BehaviorSubject(0); + + // We use this instead of optional params to open check after clicking buy now in the NFT card. + public openCheckout = false; + + private collectionsToLoad: string[] = []; + private spacesToLoad: string[] = []; + private fetchSpacesTimeout?: number; + private tokensToLoad: string[] = []; + private fetchTokensTimeout?: number; + private fetchCollectionsTimeout?: number; + private spaceSubscriptions$: Subscription[] = []; + private tokenSubscriptions$: Subscription[] = []; + private collectionSubscriptions$: Subscription[] = []; + private interval$?: Subscription; + private tickers$: Subscription[] = []; + + constructor( + private spaceApi: SpaceApi, + private tokenApi: TokenApi, + private collectionApi: CollectionApi, + private tickerApi: TickerApi, + ) { + // none. + } + + public listenToUsdPrices(): void { + this.interval$?.unsubscribe(); + this.tickers$.forEach((s) => { + s.unsubscribe(); + }); + + // Every 5 minutes. + this.interval$ = timer(0, 5 * 60 * 1000).subscribe(async () => { + this.tickers$.push( + this.tickerApi.listen(TICKERS.IOTAUSD).subscribe((t?: Ticker) => { + if (!t) return; + this.iotaUsdPrice$.next(t.price); + }), + ); + this.tickers$.push( + this.tickerApi.listen(TICKERS.SMRUSD).subscribe((t?: Ticker) => { + if (!t) return; + this.smrUsdPrice$.next(t.price); + }), + ); + }); + } + + public getSpace(id?: string): BehaviorSubject { + if (!id) { + return new BehaviorSubject(undefined); + } + + if (this.spaces[id]) { + return this.spaces[id]; + } + + this.spaces[id] = new BehaviorSubject(undefined); + this.spacesToLoad.push(id); + + if (this.fetchSpacesTimeout) { + clearTimeout(this.fetchSpacesTimeout); + this.fetchSpacesTimeout = undefined; + } + + this.fetchSpacesTimeout = window?.setTimeout(() => { + this.fetchSpacesTimeout = undefined; + this.fetchSpaces(this.spacesToLoad); + this.spacesToLoad = []; + }, CACHE_FETCH_DEBOUNCE_SPAN); + + if (this.spacesToLoad.length === MAX_MULTIPLE_ITEMS) { + this.fetchSpaces(this.spacesToLoad); + this.spacesToLoad = []; + } + + return this.spaces[id]; + } + + private fetchSpaces(ids: string[]): void { + if (!ids.length) return; + + this.spaceSubscriptions$.push( + this.spaceApi.listenMultiple(ids).subscribe((s: Space[]) => { + s.map((c) => this.spaces[c.uid].next(c)); + }), + ); + } + + public getToken(id?: string): BehaviorSubject { + if (!id) { + return new BehaviorSubject(undefined); + } + + if (this.tokens[id]) { + return this.tokens[id]; + } + + this.tokens[id] = new BehaviorSubject(undefined); + this.tokensToLoad.push(id); + + if (this.fetchTokensTimeout) { + clearTimeout(this.fetchTokensTimeout); + this.fetchTokensTimeout = undefined; + } + + this.fetchTokensTimeout = window?.setTimeout(() => { + this.fetchTokensTimeout = undefined; + this.fetchTokens(this.tokensToLoad); + this.tokensToLoad = []; + }, CACHE_FETCH_DEBOUNCE_SPAN); + + if (this.tokensToLoad.length === MAX_MULTIPLE_ITEMS) { + this.fetchTokens(this.tokensToLoad); + this.tokensToLoad = []; + } + + return this.tokens[id]; + } + + private fetchTokens(ids: string[]): void { + if (!ids.length) return; + + this.tokenSubscriptions$.push( + this.tokenApi.listenMultiple(ids).subscribe((s: Token[]) => { + s.map((c) => this.tokens[c.uid].next(c)); + }), + ); + } + + public getCollection(id: string): Observable { + if (!id) { + return of(undefined); + } + + if (this.collections[id]) { + return this.collections[id]; + } + + this.collections[id] = new BehaviorSubject(undefined); + + this.collectionsToLoad.push(id); + if (this.fetchCollectionsTimeout) { + clearTimeout(this.fetchCollectionsTimeout); + this.fetchCollectionsTimeout = undefined; + } + + this.fetchCollectionsTimeout = window?.setTimeout(() => { + this.fetchCollectionsTimeout = undefined; + this.fetchCollections(this.collectionsToLoad); + this.collectionsToLoad = []; + }, CACHE_FETCH_DEBOUNCE_SPAN); + + if (this.collectionsToLoad.length === MAX_MULTIPLE_ITEMS) { + this.fetchCollections(this.collectionsToLoad); + this.collectionsToLoad = []; + } + + return this.collections[id]; + } + + private fetchCollections(ids: string[]): void { + if (!ids.length) return; + this.collectionSubscriptions$.push( + this.collectionApi.listenMultiple(ids).subscribe((s: Collection[]) => { + s.map((c) => this.collections[c.uid].next(c)); + }), + ); + } + + public cancelSubscriptions(): void { + this.interval$?.unsubscribe(); + this.tickers$.forEach((s) => { + s.unsubscribe(); + }); + this.spaceSubscriptions$.forEach((s) => { + s.unsubscribe(); + }); + this.tokenSubscriptions$.forEach((s) => { + s.unsubscribe(); + }); + this.collectionSubscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/@core/services/checkout/checkout.service.ts b/src/app/@core/services/checkout/checkout.service.ts new file mode 100644 index 0000000..d0ef03b --- /dev/null +++ b/src/app/@core/services/checkout/checkout.service.ts @@ -0,0 +1,9 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; + +@Injectable({ + providedIn: 'root', +}) +export class CheckoutService { + public modalOpen$ = new BehaviorSubject(false); +} diff --git a/src/app/@core/services/checkout/index.ts b/src/app/@core/services/checkout/index.ts new file mode 100644 index 0000000..4e25ebf --- /dev/null +++ b/src/app/@core/services/checkout/index.ts @@ -0,0 +1 @@ +export * from './checkout.service'; diff --git a/src/app/@core/services/device/device.service.ts b/src/app/@core/services/device/device.service.ts new file mode 100644 index 0000000..cb2ca74 --- /dev/null +++ b/src/app/@core/services/device/device.service.ts @@ -0,0 +1,58 @@ +import { isPlatformBrowser } from '@angular/common'; +import { Inject, Injectable, PLATFORM_ID } from '@angular/core'; +import { BehaviorSubject, debounceTime, fromEvent } from 'rxjs'; + +export const LAYOUT_CHANGE_DEBOUNCE_TIME = 50; + +@Injectable({ + providedIn: 'root', +}) +export class DeviceService { + public static MOBILE_MAX_WIDTH = 1024; + public static BREAK_HEIGHT = 830; + public viewWithSearch$ = new BehaviorSubject(true); + public isDesktop$ = new BehaviorSubject(false); + public isMobile$ = new BehaviorSubject(false); + public innerWidth$ = new BehaviorSubject(0); + public isBreakHeight$ = new BehaviorSubject(false); + public isNotBreakHeight$ = new BehaviorSubject(false); + public scrollX$ = new BehaviorSubject(0); + public scrollY$ = new BehaviorSubject(0); + + constructor(@Inject(PLATFORM_ID) private platformId: Record) { + this.setDevice(); + this.setScroll(); + + fromEvent(window, 'resize') + .pipe(debounceTime(LAYOUT_CHANGE_DEBOUNCE_TIME)) + .subscribe(this.setDevice.bind(this)); + fromEvent(window, 'scroll') + .pipe(debounceTime(LAYOUT_CHANGE_DEBOUNCE_TIME)) + .subscribe(this.setScroll.bind(this)); + } + + public get isBrowser(): boolean { + return isPlatformBrowser(this.platformId); + } + + private setDevice(): void { + this.isDesktop$.next(!this.getIsMobile()); + this.isMobile$.next(this.getIsMobile()); + this.innerWidth$.next(window?.innerWidth); + this.isBreakHeight$.next(this.getIsBreakHeight()); + this.isNotBreakHeight$.next(!this.getIsBreakHeight()); + } + + private setScroll(): void { + this.scrollX$.next(window?.scrollX); + this.scrollY$.next(window?.scrollY); + } + + private getIsMobile(): boolean { + return window?.innerWidth < DeviceService.MOBILE_MAX_WIDTH; + } + + private getIsBreakHeight(): boolean { + return window?.innerHeight < DeviceService.BREAK_HEIGHT; + } +} diff --git a/src/app/@core/services/device/index.ts b/src/app/@core/services/device/index.ts new file mode 100644 index 0000000..9101752 --- /dev/null +++ b/src/app/@core/services/device/index.ts @@ -0,0 +1 @@ +export * from './device.service'; diff --git a/src/app/@core/services/filter-storage/filter-storage.service.ts b/src/app/@core/services/filter-storage/filter-storage.service.ts new file mode 100644 index 0000000..bfa0ffe --- /dev/null +++ b/src/app/@core/services/filter-storage/filter-storage.service.ts @@ -0,0 +1,292 @@ +import { Injectable } from '@angular/core'; +import { flattenObj } from '@core/utils/manipulations.utils'; +import { TokenStatus } from '@soonaverse/interfaces'; +import { BehaviorSubject, map } from 'rxjs'; +import { DeviceService } from '../device'; +export interface DiscoverSpacesFilters { + sortBy: string; +} + +export interface DiscoverAwardsFilters { + sortBy: string; + refinementList?: { + space?: string[]; + token?: string[]; + }; +} + +export interface DiscoverCollectionsFilters { + sortBy: string; + refinementList?: { + space?: string[]; + }; +} + +export interface DiscoverMembersFilters { + sortBy: string; +} + +export interface DiscoverProposalsFilters { + sortBy: string; + refinementList?: { + space?: string[]; + }; +} + +export interface MarketNftsFilters { + sortBy: string; + refinementList?: { + available?: string[]; + space?: string[]; + collection?: string[]; + }; + range?: { + availablePrice: string; + }; +} + +export interface MarketCollectionsFilters { + sortBy: string; + refinementList?: { + access?: string[]; + space?: string[]; + category?: string[]; + }; + range?: { + price: string; + }; +} + +export interface TokensFilters { + refinementList?: { + status: string[]; + }; + toggle?: { + public: boolean; + }; +} + +export interface MemberNftsFilters { + sortBy: string; + refinementList?: { + space?: string[]; + collection?: string[]; + owner?: string[]; + }; +} + +export type Filters = + | DiscoverSpacesFilters + | DiscoverAwardsFilters + | DiscoverCollectionsFilters + | DiscoverMembersFilters + | DiscoverProposalsFilters + | MarketNftsFilters + | MarketCollectionsFilters + | TokensFilters + | MemberNftsFilters; + +export const RESET_IGNORE_KEYS = ['sortBy', 'range.price']; + +@Injectable({ + providedIn: 'root', +}) +export class FilterStorageService { + public discoverSpacesFiltersOptions = { + sortItems: [ + { value: 'space_top_members', label: $localize`Top Members` }, + { value: 'space', label: $localize`Recent` }, + { value: 'space_createdOn_desc', label: $localize`Oldest` }, + ], + }; + public discoverSpacesFiltersVisible$: BehaviorSubject = new BehaviorSubject( + this.deviceService.isMobile$.value ? false : true, + ); + public discoverSpacesResetVisible$: BehaviorSubject = new BehaviorSubject( + false, + ); + public discoverSpacesFilters$: BehaviorSubject = + new BehaviorSubject({ + sortBy: this.discoverSpacesFiltersOptions.sortItems[0].value, + }); + + public discoverAwardsFiltersOptions = { + sortItems: [ + { value: 'award_endDate_asc', label: $localize`Ending Soon` }, + { value: 'award_createdOn_desc', label: $localize`Recent` }, + { value: 'award_createdOn_asc', label: $localize`Oldest` }, + ], + }; + public discoverAwardsFiltersVisible$: BehaviorSubject = new BehaviorSubject( + this.deviceService.isMobile$.value ? false : true, + ); + public discoverAwardsResetVisible$: BehaviorSubject = new BehaviorSubject( + false, + ); + public discoverAwardsFilters$: BehaviorSubject = + new BehaviorSubject({ + sortBy: this.discoverAwardsFiltersOptions.sortItems[0].value, + }); + + public discoverCollectionsFiltersOptions = { + sortItems: [ + { value: 'collection', label: $localize`Recent` }, + { value: 'collection_createdOn_desc', label: $localize`Oldest` }, + ], + }; + public discoverCollectionsResetVisible$: BehaviorSubject = new BehaviorSubject( + false, + ); + public discoverCollectionsFilters$: BehaviorSubject = + new BehaviorSubject({ + sortBy: this.discoverCollectionsFiltersOptions.sortItems[0].value, + }); + + public discoverMembersFiltersOptions = { + sortItems: [ + { value: 'member', label: $localize`Recent` }, + { value: 'member_createdOn_desc', label: $localize`Oldest` }, + ], + }; + public discoverMembersFiltersVisible$: BehaviorSubject = new BehaviorSubject( + this.deviceService.isMobile$.value ? false : true, + ); + public discoverMembersResetVisible$: BehaviorSubject = new BehaviorSubject( + false, + ); + public discoverMembersFilters$: BehaviorSubject = + new BehaviorSubject({ + sortBy: this.discoverMembersFiltersOptions.sortItems[0].value, + }); + + public discoverProposalsFiltersOptions = { + sortItems: [ + { value: 'proposal_endDate_asc', label: $localize`Ending SOON` }, + { value: 'proposal_createdOn_desc', label: $localize`Recent` }, + { value: 'proposal_createdOn_asc', label: $localize`Oldest` }, + ], + }; + public discoverProposalsFiltersVisible$: BehaviorSubject = new BehaviorSubject( + this.deviceService.isMobile$.value ? false : true, + ); + public discoverProposalsResetVisible$: BehaviorSubject = new BehaviorSubject( + false, + ); + public discoverProposalsFilters$: BehaviorSubject = + new BehaviorSubject({ + sortBy: this.discoverProposalsFiltersOptions.sortItems[0].value, + }); + + public marketNftsFiltersOptions = { + sortItems: [ + { value: 'nft_availableFrom_asc', label: $localize`Available Date` }, + { value: 'nft_createdOn_desc', label: $localize`Recently Created` }, + { value: 'nft_price_asc', label: $localize`Price: Low to High` }, + { value: 'nft_price_desc', label: $localize`Price: High to Low` }, + { value: 'nft_totalTrades_desc', label: $localize`Top Traded` }, + { value: 'nft_lastTradedOn_desc', label: $localize`Recently Traded` }, + { value: 'nft_createdOn_asc', label: $localize`Oldest` }, + ], + }; + public marketNftsFiltersVisible$: BehaviorSubject = new BehaviorSubject( + this.deviceService.isMobile$.value ? false : true, + ); + public marketNftsResetVisible$: BehaviorSubject = new BehaviorSubject(false); + public marketNftsFilters$: BehaviorSubject = + new BehaviorSubject({ + sortBy: this.marketNftsFiltersOptions.sortItems[0].value, + }); + + public marketCollectionsFiltersOptions = { + sortItems: [ + { value: 'collection_vote_desc', label: $localize`Public Vote` }, + { value: 'collection_ranking_desc', label: $localize`Community Rank` }, + { value: 'collection_availableFrom_desc', label: $localize`SOON on Sale` }, + { value: 'collection_minted_on_desc', label: $localize`Recently Minted` }, + { value: 'collection_totalTrades_desc', label: $localize`Top Traded` }, + { value: 'collection_lastTradedOn_desc', label: $localize`Recently Traded` }, + { value: 'collection_createdOn_desc', label: $localize`Recently Created` }, + { value: 'collection_createdOn_asc', label: $localize`Oldest` }, + ], + }; + public marketCollectionsFiltersVisible$: BehaviorSubject = new BehaviorSubject( + this.deviceService.isMobile$.value ? false : true, + ); + public marketCollectionsResetVisible$: BehaviorSubject = new BehaviorSubject( + false, + ); + public marketCollectionsFilters$: BehaviorSubject = + new BehaviorSubject({ + sortBy: this.marketCollectionsFiltersOptions.sortItems[0].value, + }); + + public tokensAllTokensFilters$: BehaviorSubject = + new BehaviorSubject({ + refinementList: { + status: [ + TokenStatus.BASE, + TokenStatus.AVAILABLE, + TokenStatus.PRE_MINTED, + TokenStatus.MINTED, + ], + }, + toggle: { public: true }, + }); + + public tokensTradingPairsFilters$: BehaviorSubject = + new BehaviorSubject({ + refinementList: { status: [TokenStatus.BASE, TokenStatus.PRE_MINTED, TokenStatus.MINTED] }, + toggle: { public: true }, + }); + + public tokensLaunchpadFilters$: BehaviorSubject = + new BehaviorSubject({ + refinementList: { status: [TokenStatus.AVAILABLE] }, + toggle: { public: true }, + }); + + public memberNftsFitlers$: BehaviorSubject = + new BehaviorSubject({ sortBy: 'nft' }); + + constructor(private deviceService: DeviceService) { + this.discoverSpacesFilters$ + .pipe(map((filters) => this.filterToResetVisibility(filters))) + .subscribe(this.discoverSpacesResetVisible$); + + this.discoverAwardsFilters$ + .pipe(map((filters) => this.filterToResetVisibility(filters))) + .subscribe(this.discoverAwardsResetVisible$); + + this.discoverCollectionsFilters$ + .pipe(map((filters) => this.filterToResetVisibility(filters))) + .subscribe(this.discoverCollectionsResetVisible$); + + this.discoverMembersFilters$ + .pipe(map((filters) => this.filterToResetVisibility(filters))) + .subscribe(this.discoverMembersResetVisible$); + + this.discoverProposalsFilters$ + .pipe(map((filters) => this.filterToResetVisibility(filters))) + .subscribe(this.discoverProposalsResetVisible$); + + this.marketNftsFilters$ + .pipe(map((filters) => this.filterToResetVisibility(filters))) + .subscribe(this.marketNftsResetVisible$); + + this.marketCollectionsFilters$ + .pipe(map((filters) => this.filterToResetVisibility(filters))) + .subscribe(this.marketCollectionsResetVisible$); + } + + public filterToResetVisibility(filters: Filters): boolean { + const obj = flattenObj(filters as unknown as { [key: string]: unknown }); + return ( + Object.keys(obj).filter( + (key) => + !!obj[key] && + (!Array.isArray(obj[key]) || (obj[key] as unknown[]).length > 0) && + !RESET_IGNORE_KEYS.includes(key), + ).length > 0 + ); + } +} diff --git a/src/app/@core/services/filter-storage/index.ts b/src/app/@core/services/filter-storage/index.ts new file mode 100644 index 0000000..58531eb --- /dev/null +++ b/src/app/@core/services/filter-storage/index.ts @@ -0,0 +1 @@ +export * from './filter-storage.service'; diff --git a/src/app/@core/services/navigation/navigation.service.ts b/src/app/@core/services/navigation/navigation.service.ts new file mode 100644 index 0000000..0bae855 --- /dev/null +++ b/src/app/@core/services/navigation/navigation.service.ts @@ -0,0 +1,108 @@ +import { Injectable, OnDestroy } from '@angular/core'; +import { Router, RoutesRecognized } from '@angular/router'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { BehaviorSubject, filter, map, Observable, pairwise, Subscription } from 'rxjs'; + +export interface NavigationObject { + text: string; + url: string[]; +} + +@Injectable({ + providedIn: 'root', +}) +export class NavigationService implements OnDestroy { + private subsRouter$?: Subscription; + private navigationState = new BehaviorSubject([]); + + constructor(private router: Router) { + // None. + } + + public watchPathHistory(): void { + this.subsRouter$ = this.router.events + .pipe( + filter((evt: any) => evt instanceof RoutesRecognized), + pairwise(), + ) + .subscribe((events: RoutesRecognized[]) => { + const prevUrl = events[0].urlAfterRedirects; + const targetUrl = events[1].urlAfterRedirects; + this.returnableUrl().forEach((o) => { + if (prevUrl.startsWith('/' + o.url) && !targetUrl.startsWith('/' + o.url)) { + this.pushState({ text: o.text, url: prevUrl.split('/') }); + } + }); + this.forwardableUrl().forEach((o) => { + if (!prevUrl.startsWith('/' + o.url) && targetUrl.startsWith('/' + o.url)) { + this.pushState({ text: o.text, url: prevUrl.split('/') }); + } + }); + }); + } + + private returnableUrl(): { url: string; text: string }[] { + return [ + { url: ROUTER_UTILS.config.space.root, text: 'Space' }, + { url: ROUTER_UTILS.config.discover.root, text: 'Discover' }, + { url: ROUTER_UTILS.config.member.root, text: 'Profile' }, + { url: ROUTER_UTILS.config.market.root, text: 'Marketplace' }, + { url: ROUTER_UTILS.config.collection.root, text: 'Collection' }, + { url: ROUTER_UTILS.config.base.dashboard, text: 'Overview' }, + { url: ROUTER_UTILS.config.tokens.root, text: 'Tokens' }, + // { url: ROUTER_UTILS.config.award.root, text: 'Award' }, + // { url: ROUTER_UTILS.config.proposal.root, text: 'Proposal' }, + ]; + } + + private forwardableUrl(): { url: string; text: string }[] { + return [ + { + url: `${ROUTER_UTILS.config.collection.root}/${ROUTER_UTILS.config.collection.edit}`, + text: 'Collection', + }, + ]; + } + + public getLastUrl(): string[] { + const value = this.navigationState.getValue(); + return value[value.length - 1]?.url || ['']; + } + + public getTitle(): Observable { + return this.navigationState.pipe( + map((state) => $localize`Back` + ` ${state.length > 0 ? state[state.length - 1].text : ''}`), + ); + } + + public goBack(): void { + const prevUrl = this.router.url; + const url = [...this.getLastUrl()]; + this.popState(); + this.router.navigate(url); + setTimeout(() => { + if (this.getLastUrl().join('/') === prevUrl) { + this.popState(); + } + }, 0); + } + + private pushState(nav: NavigationObject): void { + this.navigationState.next([...this.navigationState.getValue(), nav]); + } + + private popState(): NavigationObject | null { + const value = this.navigationState.getValue(); + if (value.length > 0) { + this.navigationState.next(value.slice(0, value.length - 1)); + return value[value.length - 1]; + } + return null; + } + + public ngOnDestroy(): void { + if (this.subsRouter$) { + this.subsRouter$.unsubscribe(); + } + } +} diff --git a/src/app/@core/services/notification/index.ts b/src/app/@core/services/notification/index.ts new file mode 100644 index 0000000..866773a --- /dev/null +++ b/src/app/@core/services/notification/index.ts @@ -0,0 +1 @@ +export * from './notification.service'; diff --git a/src/app/@core/services/notification/notification.service.ts b/src/app/@core/services/notification/notification.service.ts new file mode 100644 index 0000000..e33f7b9 --- /dev/null +++ b/src/app/@core/services/notification/notification.service.ts @@ -0,0 +1,37 @@ +import { Injectable } from '@angular/core'; +import { NzNotificationService } from 'ng-zorro-antd/notification'; +import { Observable } from 'rxjs'; + +@Injectable({ + providedIn: 'root', +}) +export class NotificationService { + constructor(private notification: NzNotificationService) { + // none. + } + + public processRequest(request: Observable, msg: string, cb: any): Observable { + return new Observable((observe) => { + request.subscribe({ + next: (obj) => { + // Success + this.notification.success(msg, ''); + cb(true); + observe.next(obj); + }, + error: (obj: any) => { + // Error + if (obj?.error?.data?.message || obj?.error?.data?.key) { + this.notification.error(obj.error.data.message || obj.error.data.key, ''); + } else { + this.notification.error('Failed due internal error.', ''); + } + + // Pass it. + cb(false); + observe.error(obj); + }, + }); + }); + } +} diff --git a/src/app/@core/services/preview-image/index.ts b/src/app/@core/services/preview-image/index.ts new file mode 100644 index 0000000..825c401 --- /dev/null +++ b/src/app/@core/services/preview-image/index.ts @@ -0,0 +1 @@ +export * from './preview-image.service'; diff --git a/src/app/@core/services/preview-image/preview-image.service.ts b/src/app/@core/services/preview-image/preview-image.service.ts new file mode 100644 index 0000000..736b26f --- /dev/null +++ b/src/app/@core/services/preview-image/preview-image.service.ts @@ -0,0 +1,56 @@ +import { Injectable } from '@angular/core'; +import { FileApi } from '@api/file.api'; +import { FILE_SIZES } from '@soonaverse/interfaces'; + +@Injectable({ + providedIn: 'root', +}) +export class PreviewImageService { + public getUrl(url?: string | null): string | undefined { + if (!url) { + return undefined; + } + + return FileApi.getUrl(url); + } + + public getVideoPreview(url?: string | null): string | undefined { + if (!url) { + return undefined; + } + + return FileApi.getVideoPreview(url); + } + + public getTokenSize(url?: string | null): string | undefined { + if (!url) { + return undefined; + } + + return FileApi.getUrl(url, FILE_SIZES.small); + } + + public getAvatarSize(url?: string | null): string | undefined { + if (!url) { + return undefined; + } + + return FileApi.getUrl(url, FILE_SIZES.small); + } + + public getNftSize(url?: string | null): string | undefined { + if (!url) { + return undefined; + } + + return FileApi.getUrl(url, FILE_SIZES.medium); + } + + public getCollectionSize(url?: string | null): string | undefined { + if (!url) { + return undefined; + } + + return FileApi.getUrl(url, FILE_SIZES.medium); + } +} diff --git a/src/app/@core/services/router/index.ts b/src/app/@core/services/router/index.ts new file mode 100644 index 0000000..d30fe11 --- /dev/null +++ b/src/app/@core/services/router/index.ts @@ -0,0 +1 @@ +export * from './router.service'; diff --git a/src/app/@core/services/router/router.service.ts b/src/app/@core/services/router/router.service.ts new file mode 100644 index 0000000..529944a --- /dev/null +++ b/src/app/@core/services/router/router.service.ts @@ -0,0 +1,53 @@ +import { Injectable } from '@angular/core'; +import { NavigationEnd, Router } from '@angular/router'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { BehaviorSubject } from 'rxjs'; +import { DeviceService } from '../device'; + +@Injectable({ + providedIn: 'root', +}) +export class RouterService { + public homeRoute = ROUTER_UTILS.config.base.home; + + public isHomeRoute$ = new BehaviorSubject(false); + public isNewRoute$ = new BehaviorSubject(false); + + public urlToNewSpace = '/' + ROUTER_UTILS.config.space.root + '/new'; + public urlToNewProposal = '/' + ROUTER_UTILS.config.proposal.root + '/new'; + public urlToNewAward = '/' + ROUTER_UTILS.config.award.root + '/new'; + public urlToNewCollection = '/' + ROUTER_UTILS.config.collection.root + '/new'; + public urlToNewNft = '/' + ROUTER_UTILS.config.nft.root + '/new'; + public urlToNewToken = '/' + ROUTER_UTILS.config.token.root + '/new'; + + constructor(private router: Router, private deviceService: DeviceService) { + this.updateVariables(); + + this.router.events.subscribe((obj) => { + if (obj instanceof NavigationEnd) { + this.updateVariables(); + if (this.deviceService.isBrowser) { + window?.scrollTo({ + top: 0, + left: 0, + behavior: 'smooth', + }); + } + } + }); + } + + private updateVariables(): void { + this.isHomeRoute$.next((this.router.url || '/').substring(1) === this.homeRoute); + this.isNewRoute$.next( + [ + this.urlToNewSpace, + this.urlToNewProposal, + this.urlToNewAward, + this.urlToNewCollection, + this.urlToNewNft, + this.urlToNewToken, + ].includes(this.router.url), + ); + } +} diff --git a/src/app/@core/services/seo/index.ts b/src/app/@core/services/seo/index.ts new file mode 100644 index 0000000..0f53d5a --- /dev/null +++ b/src/app/@core/services/seo/index.ts @@ -0,0 +1 @@ +export * from './seo.service'; diff --git a/src/app/@core/services/seo/seo.service.ts b/src/app/@core/services/seo/seo.service.ts new file mode 100644 index 0000000..cd3e33b --- /dev/null +++ b/src/app/@core/services/seo/seo.service.ts @@ -0,0 +1,57 @@ +import { Injectable } from '@angular/core'; +import { Meta, Title } from '@angular/platform-browser'; +import { environment } from '@env/environment'; +import { WEN_NAME } from '@soonaverse/interfaces'; + +const DEFAULT_TITLE = WEN_NAME; +const DEFAULT_DESCRIPTION = $localize`Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products.`; +const DEFAULT_IMG = environment.soonaversePlaceholder; + +@Injectable({ + providedIn: 'root', +}) +export class SeoService { + constructor(private titleService: Title, private metaService: Meta) {} + + public setTags(title?: string, description?: string, image?: string): void { + this.setTitle(title); + this.setDescription(description); + this.setImage(image); + } + + private setTitle(title?: string): void { + if (title) { + title += ' | Soonaverse'; + } else { + title = DEFAULT_TITLE; + } + + this.titleService.setTitle(title); + + this.metaService.updateTag({ + property: 'og:title', + content: title, + }); + } + + private setDescription(description?: string): void { + description = description || DEFAULT_DESCRIPTION; + + this.metaService.updateTag({ + name: 'description', + content: description, + }); + + this.metaService.updateTag({ + property: 'og:description', + content: description, + }); + } + + private setImage(image?: string): void { + this.metaService.updateTag({ + property: 'og:image', + content: image || DEFAULT_IMG, + }); + } +} diff --git a/src/app/@core/services/theme/index.ts b/src/app/@core/services/theme/index.ts new file mode 100644 index 0000000..619d4f3 --- /dev/null +++ b/src/app/@core/services/theme/index.ts @@ -0,0 +1,2 @@ +export * from './theme.config'; +export * from './theme.service'; diff --git a/src/app/@core/services/theme/theme.config.ts b/src/app/@core/services/theme/theme.config.ts new file mode 100644 index 0000000..6c89e70 --- /dev/null +++ b/src/app/@core/services/theme/theme.config.ts @@ -0,0 +1,6 @@ +export enum ThemeList { + Light = 'light', + Dark = 'dark', +} + +export const DEFAULT_BASE_THEME = ThemeList.Light; diff --git a/src/app/@core/services/theme/theme.service.ts b/src/app/@core/services/theme/theme.service.ts new file mode 100644 index 0000000..bcad810 --- /dev/null +++ b/src/app/@core/services/theme/theme.service.ts @@ -0,0 +1,77 @@ +import { DOCUMENT } from '@angular/common'; +import { Inject, Injectable, OnDestroy } from '@angular/core'; +import { getItem, setItem, StorageItem } from '@core/utils'; +import { BehaviorSubject, fromEventPattern, Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import { DEFAULT_BASE_THEME, ThemeList } from './theme.config'; + +@Injectable({ + providedIn: 'root', +}) +export class ThemeService implements OnDestroy { + destroy$ = new Subject(); + theme$ = new BehaviorSubject(getItem(StorageItem.Theme)); + + private readonly mediaQuery = window?.matchMedia('(prefers-color-scheme: dark)'); + + constructor(@Inject(DOCUMENT) private document: Document) {} + + get storedTheme(): ThemeList { + return getItem(StorageItem.Theme); + } + + init(): void { + this.makeAutomaticCheck(); + this.listenForMediaQueryChanges(); + } + + /** themeService.theme$ | async + * Manually changes theme in LocalStorage & HTML body + * + * @param {ThemeList} theme Select theme you want to use. + */ + setTheme(theme: ThemeList): void { + this.clearThemes(); + setItem(StorageItem.Theme, theme); + this.theme$.next(theme); + + this.document.body.classList.add(theme); + } + + /** + * Makes initial theme check based on LocalStorage theme + * + */ + private makeAutomaticCheck(): void { + this.setTheme(this.storedTheme || DEFAULT_BASE_THEME); + } + + /** + * Handles system theme changes & applies theme automatically + * + */ + private listenForMediaQueryChanges(): void { + fromEventPattern( + this.mediaQuery.addListener.bind(this.mediaQuery), + this.mediaQuery.removeListener.bind(this.mediaQuery), + ).pipe(takeUntil(this.destroy$)); + } + + /** + * Clears all themes in ThemeList enum from the HTML element + * + */ + private clearThemes(): void { + for (const theme in ThemeList) { + if (Object.prototype.hasOwnProperty.call(ThemeList, theme)) { + const key: ThemeList = ThemeList[theme as keyof typeof ThemeList]; + this.document.body.classList.remove(key); + } + } + } + + ngOnDestroy(): void { + this.destroy$.complete(); + this.destroy$.unsubscribe(); + } +} diff --git a/src/app/@core/services/transaction/index.ts b/src/app/@core/services/transaction/index.ts new file mode 100644 index 0000000..05bac3b --- /dev/null +++ b/src/app/@core/services/transaction/index.ts @@ -0,0 +1 @@ +export * from './transaction.service'; diff --git a/src/app/@core/services/transaction/transaction.service.ts b/src/app/@core/services/transaction/transaction.service.ts new file mode 100644 index 0000000..dcd0aef --- /dev/null +++ b/src/app/@core/services/transaction/transaction.service.ts @@ -0,0 +1,91 @@ +import { Injectable } from '@angular/core'; +import { + DEF_WALLET_PAY_IN_PROGRESS, + Network, + Transaction, + TransactionMintCollectionType, + TransactionMintTokenType, + TransactionType, +} from '@soonaverse/interfaces'; + +@Injectable({ + providedIn: 'root', +}) +export class TransactionService { + public getTitle(t: Transaction): string { + if (t.type === TransactionType.BILL_PAYMENT) { + if (!t.payload.royalty) { + return $localize`Bill Payment`; + } else { + return $localize`Bill (royalty)`; + } + } else if ( + t.type === TransactionType.CREDIT || + t.type === TransactionType.CREDIT_TANGLE_REQUEST + ) { + return $localize`Credit`; + } else if (t.type === TransactionType.PAYMENT) { + return $localize`Payment`; + } else if (t.type === TransactionType.CREDIT_NFT) { + return $localize`Credit NFT`; + } else if (t.type === TransactionType.MINT_COLLECTION) { + return $localize`Mint Collection` + this.getMintedSubtypesText(t); + } else if (t.type === TransactionType.MINT_TOKEN) { + return $localize`Mint Token` + this.getMintedSubtypesText(t); + } else if (t.type === TransactionType.WITHDRAW_NFT) { + return $localize`Withdraw Asset`; + } else if (t.type === TransactionType.UNLOCK) { + return $localize`Unlock`; + } else if (t.type === TransactionType.VOTE) { + return $localize`Vote`; + } else { + return $localize`Order`; + } + } + + public getMintedSubtypesText(t: Transaction): string { + let base = ''; + if (t.payload.type === TransactionMintCollectionType.MINT_ALIAS) { + base += ' ' + $localize`(Mint Alias)`; + } else if (t.payload.type === TransactionMintCollectionType.MINT_NFTS) { + base += ' ' + $localize`(Mint NFTs)`; + } else if (t.payload.type === TransactionMintTokenType.MINT_FOUNDRY) { + base += ' ' + $localize`(Mint Foundry)`; + } else if (t.payload.type === TransactionMintCollectionType.SEND_ALIAS_TO_GUARDIAN) { + base += ' ' + $localize`(Send Alias to Guardian)`; + } else if (t.payload.type === TransactionMintCollectionType.LOCK_COLLECTION) { + base += ' ' + $localize`(Lock Collection)`; + } + + return base; + } + + public getExplorerLink(t?: Transaction): string | null { + if (!t) return null; + if (this.paymentNotProcessedOrInProgress(t)) return null; + const link = t.payload.chainReference || t.payload?.walletReference?.chainReference; + + return this.generateLink(link, t.network); + } + + public generateLink(link: string, network?: Network): string { + switch (network) { + case Network.RMS: + return 'https://explorer.shimmer.network/testnet/search/' + link; + case Network.SMR: + return 'https://explorer.shimmer.network/shimmer/search/' + link; + case Network.ATOI: + return 'https://explorer.iota.org/devnet/search/' + link; + case Network.IOTA: + default: + return 'https://explorer.iota.org/mainnet/search/' + link; + } + } + + public paymentNotProcessedOrInProgress(tran: Transaction | undefined | null): boolean { + return ( + (!tran?.payload.chainReference && !tran?.payload.walletReference?.chainReference) || + tran.payload.walletReference?.chainReference.startsWith(DEF_WALLET_PAY_IN_PROGRESS) + ); + } +} diff --git a/src/app/@core/services/units/index.ts b/src/app/@core/services/units/index.ts new file mode 100644 index 0000000..c2eb44e --- /dev/null +++ b/src/app/@core/services/units/index.ts @@ -0,0 +1 @@ +export * from './units.service'; diff --git a/src/app/@core/services/units/units.service.ts b/src/app/@core/services/units/units.service.ts new file mode 100644 index 0000000..23f5065 --- /dev/null +++ b/src/app/@core/services/units/units.service.ts @@ -0,0 +1,37 @@ +import { Injectable } from '@angular/core'; +import { DEFAULT_NETWORK, Network, NETWORK_DETAIL } from '@soonaverse/interfaces'; +import { map, Observable } from 'rxjs'; +import { CacheService } from '../cache/cache.service'; + +@Injectable({ + providedIn: 'root', +}) +export class UnitsService { + constructor(private cache: CacheService) { + // noe. + } + + public label(network?: Network | null): string { + return NETWORK_DETAIL[network || DEFAULT_NETWORK].label; + } + + public getUsd(value: number | null | undefined, network?: Network | null): Observable { + if (!network) { + network = DEFAULT_NETWORK; + } + + if (!value) { + value = 0; + } + + const mapPrice = (o: number) => { + return o * value!; + }; + + if (network === Network.IOTA) { + return this.cache.iotaUsdPrice$.pipe(map(mapPrice)); + } else { + return this.cache.smrUsdPrice$.pipe(map(mapPrice)); + } + } +} diff --git a/src/app/@core/utils/.gitkeep b/src/app/@core/utils/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/app/@core/utils/colors.utils.ts b/src/app/@core/utils/colors.utils.ts new file mode 100644 index 0000000..7e8fd2b --- /dev/null +++ b/src/app/@core/utils/colors.utils.ts @@ -0,0 +1,20 @@ +export const TOKEN_METRICS_INITIAL_COLORS = ['#F39200', '#008AF2', '#7863CB', '#EA849D', '#7CD4AA']; + +export const getRandomColor = (): string => `#${(((1 << 24) * Math.random()) | 0).toString(16)}`; +export const getProposalDoughnutColors = (answersCount: number): string[] => { + const START_COLOR = { R: 0xc2, G: 0x74, B: 0x00 }; + const END_COLOR = { R: 0xff, G: 0xe0, B: 0xb3 }; + return new Array(answersCount) + .fill('') + .map((_, index) => ({ + R: START_COLOR.R + ((END_COLOR.R - START_COLOR.R) * index) / Math.max(answersCount - 1, 1), + G: START_COLOR.G + ((END_COLOR.G - START_COLOR.G) * index) / Math.max(answersCount - 1, 1), + B: START_COLOR.B + ((END_COLOR.B - START_COLOR.B) * index) / Math.max(answersCount - 1, 1), + })) + .map( + ({ R, G, B }) => + `#${('0' + Math.round(R).toString(16)).slice(-2)}${('0' + Math.round(G).toString(16)).slice( + -2, + )}${('0' + Math.round(B).toString(16)).slice(-2)}`, + ); +}; diff --git a/src/app/@core/utils/cookie.utils.ts b/src/app/@core/utils/cookie.utils.ts new file mode 100644 index 0000000..c4ec194 --- /dev/null +++ b/src/app/@core/utils/cookie.utils.ts @@ -0,0 +1,16 @@ +export enum CookieItem { + languageOverride = 'language-override', +} + +export function getCookie(name: string): string | null { + const value = `; ${document.cookie}`; + const parts = value.split(`; ${name}=`); + if (parts.length >= 2) { + return parts.pop()?.split(';').shift() || null; + } + return null; +} + +export function setCookie(name: string, value: string): void { + document.cookie = `${name}=${value}; Path=/`; +} diff --git a/src/app/@core/utils/form-validation.utils.ts b/src/app/@core/utils/form-validation.utils.ts new file mode 100644 index 0000000..3231c7e --- /dev/null +++ b/src/app/@core/utils/form-validation.utils.ts @@ -0,0 +1,5 @@ +import { ValidatorFn, Validators } from '@angular/forms'; + +export function getUrlValidator(): ValidatorFn { + return Validators.pattern('(https?://)([\\da-z.-]+)\\.([a-z.]{2,6})[/\\w .-]*/?'); +} diff --git a/src/app/@core/utils/index.ts b/src/app/@core/utils/index.ts new file mode 100644 index 0000000..13a5787 --- /dev/null +++ b/src/app/@core/utils/index.ts @@ -0,0 +1 @@ +export * from './local-storage.utils'; diff --git a/src/app/@core/utils/language.util.ts b/src/app/@core/utils/language.util.ts new file mode 100644 index 0000000..279fa18 --- /dev/null +++ b/src/app/@core/utils/language.util.ts @@ -0,0 +1,61 @@ +/* eslint-disable camelcase */ +import { en_GB } from 'ng-zorro-antd/i18n'; + +// es_ES, +// fr_FR, +// it_IT, +// ko_KR, +// nl_NL, +// zh_CN +// de_DE, + +export interface LanguagesType { + [key: string]: { + ngZorro: any; + title: string; + remoteHosting: string; + }; +} + +export const Languages: LanguagesType = { + en: { + ngZorro: en_GB, + title: 'EN', + remoteHosting: 'en', + }, + // de: { + // ngZorro: de_DE, + // title: 'DE', + // remoteHosting: 'de', + // }, + // es: { + // ngZorro: es_ES, + // title: 'ES', + // remoteHosting: 'es', + // }, + // fr: { + // ngZorro: fr_FR, + // title: 'FR', + // remoteHosting: 'fr', + // }, + // it: { + // ngZorro: it_IT, + // title: 'IT', + // remoteHosting: 'it', + // }, + // ko: { + // ngZorro: ko_KR, + // title: 'KO', + // remoteHosting: 'ko', + // }, + // nl: { + // ngZorro: nl_NL, + // title: 'NL', + // remoteHosting: 'nl', + // }, + // zh_cn: { + // ngZorro: zh_CN, + // title: '简中', + // remoteHosting: 'cn', + // } +}; diff --git a/src/app/@core/utils/local-storage.utils.ts b/src/app/@core/utils/local-storage.utils.ts new file mode 100644 index 0000000..7feaa67 --- /dev/null +++ b/src/app/@core/utils/local-storage.utils.ts @@ -0,0 +1,136 @@ +import { Network } from '@soonaverse/interfaces'; + +export enum StorageItem { + CustomToken = 'App/customToken', + Theme = 'App/theme', + StakingDetails = 'App/stakingDetails', + VerificationTransaction = 'App/verificationTransaction-', + CheckoutTransaction = 'App/checkoutTransaction', + Notification = 'App/notification-', + BidTransaction = 'App/bidTransaction-', + TokenMintTransaction = 'App/tokenMintTransaction-', + AwardMintTransaction = 'App/awardMintTransaction-', + TokenAirdropTransaction = 'App/tokenAirdropTransaction-', + CollectionMintTransaction = 'App/collectionMintTransaction-', + CollectionMigrationWarningClosed = 'App/collectionMigrationWarningClosed', + TokenClaimTransaction = 'App/tokenClaimTransaction-', + SpaceClaimTransaction = 'App/spaceClaimTransaction-', + TokenStakeTransaction = 'App/tokenStakeTransaction-', + LockedTokenClaimTransaction = 'App/lockedTokenClaimTransaction-', + TokenMigrationWarningClosed = 'App/tokenMigrationWarningClosed', + NotMintedTokensWarningClosed = 'App/notMintedTokensWarningClosed', + FavouriteTokens = 'App/favouriteTokens', + TokenBidsAcceptedTerms = 'App/tokenBidsAcceptedTerms', + TokenOffersAcceptedTerms = 'App/tokenOffersAcceptedTerms', + SelectedTradePriceOption = 'App/selectedTradePriceOption', + DepositNftTransaction = 'App/depositNftTransaction-', + StakeNftTransaction = 'App/stakeNftTransaction-', +} + +export const getBitItemItem = (nftId: string): unknown | null => { + const item = localStorage.getItem(StorageItem.BidTransaction + nftId); + return item ? JSON.parse(item) : null; +}; + +export const setBitItemItem = (nftId: string, value: unknown): void => { + localStorage.setItem(StorageItem.BidTransaction + nftId, JSON.stringify(value)); +}; + +export const removeBitItemItem = (nftId: string): void => { + localStorage.removeItem(StorageItem.BidTransaction + nftId); +}; + +export const getVerifyAddressItem = (network: Network): unknown | null => { + const item = localStorage.getItem(StorageItem.VerificationTransaction + network); + return item ? JSON.parse(item) : null; +}; + +export const setVerifyAddressItem = (network: Network, value: unknown): void => { + localStorage.setItem(StorageItem.VerificationTransaction + network, JSON.stringify(value)); +}; + +export const removeVerifyAddressItem = (network: Network): void => { + localStorage.removeItem(StorageItem.VerificationTransaction + network); +}; + +export const getTokenClaimItem = (tokenId: string): unknown | null => { + const item = localStorage.getItem(StorageItem.TokenClaimTransaction + tokenId); + return item ? JSON.parse(item) : null; +}; + +export const setTokenClaimItem = (tokenId: string, value: unknown): void => { + localStorage.setItem(StorageItem.TokenClaimTransaction + tokenId, JSON.stringify(value)); +}; + +export const removeTokenClaimItem = (tokenId: string): void => { + localStorage.removeItem(StorageItem.TokenClaimTransaction + tokenId); +}; + +export const getSpaceClaimItem = (spaceId: string): unknown | null => { + const item = localStorage.getItem(StorageItem.SpaceClaimTransaction + spaceId); + return item ? JSON.parse(item) : null; +}; + +export const setSpaceClaimItem = (spaceId: string, value: unknown): void => { + localStorage.setItem(StorageItem.SpaceClaimTransaction + spaceId, JSON.stringify(value)); +}; + +export const removeSpaceClaimItem = (spaceId: string): void => { + localStorage.removeItem(StorageItem.SpaceClaimTransaction + spaceId); +}; + +export const getTokenStakeItem = (tokenId: string): unknown | null => { + const item = localStorage.getItem(StorageItem.TokenStakeTransaction + tokenId); + return item ? JSON.parse(item) : null; +}; + +export const setTokenStakeItem = (tokenId: string, value: unknown): void => { + localStorage.setItem(StorageItem.TokenStakeTransaction + tokenId, JSON.stringify(value)); +}; + +export const removeStakeTokenItem = (tokenId: string): void => { + localStorage.removeItem(StorageItem.TokenStakeTransaction + tokenId); +}; + +export const getLockedTokenClaimItem = (transactionId: string): unknown | null => { + const item = localStorage.getItem(StorageItem.LockedTokenClaimTransaction + transactionId); + return item ? JSON.parse(item) : null; +}; + +export const setLockedTokenClaimItem = (transactionId: string, value: unknown): void => { + localStorage.setItem( + StorageItem.LockedTokenClaimTransaction + transactionId, + JSON.stringify(value), + ); +}; + +export const removeLockedTokenClaimItem = (transactionId: string): void => { + localStorage.removeItem(StorageItem.LockedTokenClaimTransaction + transactionId); +}; + +export const getNotificationItem = (memberId: string): unknown | null => { + const item = localStorage.getItem(StorageItem.Notification + memberId); + try { + return item ? JSON.parse(item) : null; + } catch (err) { + console.error('Error while parsing local storage notification item', err); + return null; + } +}; + +export const setNotificationItem = (memberId: string, value: unknown): void => { + localStorage.setItem(StorageItem.Notification + memberId, JSON.stringify(value)); +}; + +export const getItem = (itemName: StorageItem): unknown | null => { + const item = localStorage.getItem(itemName); + return item ? JSON.parse(item) : null; +}; + +export const setItem = (itemName: StorageItem, value: unknown): void => { + localStorage.setItem(itemName, JSON.stringify(value)); +}; + +export const removeItem = (itemName: StorageItem): void => { + localStorage.removeItem(itemName); +}; diff --git a/src/app/@core/utils/manipulations.utils.ts b/src/app/@core/utils/manipulations.utils.ts new file mode 100644 index 0000000..f1ba7e7 --- /dev/null +++ b/src/app/@core/utils/manipulations.utils.ts @@ -0,0 +1,48 @@ +export function undefinedToEmpty(o: any): any { + Object.keys(o).forEach((k: any) => { + if (o[k] === undefined || o[k] === '') { + o[k] = null; + } + + // Objects. + if (typeof o[k] === 'object' && !Array.isArray(o[k]) && o[k] !== null) { + o[k] = undefinedToEmpty(o[k]); + } + + // Arrays. We assume there is an array directly under it. + if (Array.isArray(o[k]) && o[k].length > 0) { + o[k].forEach((v: any, i: number) => { + o[k][i] = undefinedToEmpty(o[k][i]); + }); + } + + return o; + }); + + return o; +} + +export function enumToArray(e: any): any[] { + const keys = Object.keys(e); + return keys + .filter((k: any) => typeof k !== 'number' && isNaN(Number(k))) + .map((k: any) => ({ key: k, value: e[k] })); +} + +export function flattenObj(obj: { [key: string]: unknown }): { [key: string]: unknown } { + const result: { [key: string]: unknown } = {}; + + for (const i in obj) { + if (typeof obj[i] === 'object' && !Array.isArray(obj[i])) { + const temp = flattenObj(obj[i] as { [key: string]: unknown }); + for (const j in temp) { + if (temp[j] !== undefined && temp[j] !== null) { + result[i + '.' + j] = temp[j]; + } + } + } else { + result[i] = obj[i]; + } + } + return result; +} diff --git a/src/app/@core/utils/metamask.service.ts b/src/app/@core/utils/metamask.service.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/app/@core/utils/modal.util.ts b/src/app/@core/utils/modal.util.ts new file mode 100644 index 0000000..d64e40b --- /dev/null +++ b/src/app/@core/utils/modal.util.ts @@ -0,0 +1 @@ +export const MODAL_WIDTH = 760; diff --git a/src/app/@core/utils/router.utils.ts b/src/app/@core/utils/router.utils.ts new file mode 100644 index 0000000..28264e0 --- /dev/null +++ b/src/app/@core/utils/router.utils.ts @@ -0,0 +1,115 @@ +import { URL_PATHS } from '@soonaverse/interfaces'; + +export const ROUTER_UTILS = { + config: { + base: { + home: '', + dashboard: 'dashboard', + }, + auth: { + root: 'auth', + signIn: 'signIn', + }, + market: { + root: 'market', + collections: 'collections', + nfts: 'nfts', + }, + tokens: { + root: 'tokens', + favourites: 'favourites', + allTokens: 'all', + tradingPairs: 'trading', + launchpad: 'launchpad', + }, + discover: { + root: 'discover', + spaces: 'spaces', + awards: 'awards', + proposals: 'proposals', + members: 'members', + }, + swap: { + root: 'swap', + }, + pool: { + root: 'pool', + }, + soonStaking: { + root: 'soon-staking', + }, + member: { + // Redirect back to discovery + root: URL_PATHS.MEMBER, + member: ':memberId', + activity: 'activity', + awards: 'awards', + badges: 'badges', + spaces: 'spaces', + nfts: 'nfts', + tokens: 'tokens', + transactions: 'transactions', + staking: 'staking', + }, + space: { + // Redirect back to discovery + root: URL_PATHS.SPACE, + space: ':spaceId', + new: 'new', + edit: 'edit', + manage: 'manage', + overview: 'overview', + proposals: 'proposals', + awards: 'awards', + staking: 'staking', + members: 'members', + collections: 'collections', + }, + proposal: { + // Redirect back to space?! + root: URL_PATHS.PROPOSAL, + newProposal: 'new', + proposal: ':proposalId', + overview: 'overview', + votes: 'votes', + participants: 'participants', + }, + award: { + // Redirect back to space?! + root: URL_PATHS.AWARD, + newAward: 'new', + award: ':awardId', + overview: 'overview', + participants: 'participants', + }, + collection: { + root: URL_PATHS.COLLECTION, + collection: ':collectionId', + new: 'new', + edit: 'edit', + }, + nft: { + root: URL_PATHS.NFT, + newNft: 'new', + nft: ':nftId', + single: 'single', + multiple: 'multiple', + notFound: 'not-found', + }, + token: { + root: URL_PATHS.TOKEN, + newToken: 'new', + token: ':tokenId', + overview: 'overview', + metrics: 'metrics', + airdrops: 'airdrops', + trade: 'trade', + }, + errorResponse: { + notFound: '404', + }, + about: { + root: 'about', + }, + }, +}; diff --git a/src/app/@core/utils/tools.utils.ts b/src/app/@core/utils/tools.utils.ts new file mode 100644 index 0000000..45612fa --- /dev/null +++ b/src/app/@core/utils/tools.utils.ts @@ -0,0 +1,38 @@ +export function copyToClipboard(text: string): void { + const el = document.createElement('textarea'); + el.value = text; + el.style.zIndex = '-1000'; + document.body.appendChild(el); + el.select(); + document.execCommand('copy'); + document.body.removeChild(el); +} + +export function download(data: string, name: string): void { + const encodedUri = encodeURI(data); + const link = document.createElement('a'); + link.setAttribute('href', encodedUri); + link.setAttribute('download', name); + document.body.appendChild(link); + link.click(); +} + +export const flattenObject = (obj: any, prefix = '') => { + const flattened: any = {}; + Object.keys(obj).forEach((key) => { + const value = obj[key]; + + // FB Timestamp + if (value?.nanoseconds > 0 && value?.seconds > 0) { + flattened[prefix + key] = new Date(value.seconds * 1000); + } else if (typeof value === 'object' && value !== null && !Array.isArray(value)) { + Object.assign(flattened, flattenObject(value, prefix + key + '.')); + } else if (Array.isArray(value)) { + flattened[prefix + key] = value.join(','); + } else { + flattened[prefix + key] = value; + } + }); + + return flattened; +}; diff --git a/src/app/@shell/ft/web-shell.module.ts b/src/app/@shell/ft/web-shell.module.ts new file mode 100644 index 0000000..61a5c0e --- /dev/null +++ b/src/app/@shell/ft/web-shell.module.ts @@ -0,0 +1,120 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { NotFoundModule } from '@shell/ui/not-found/not-found.module'; +import { FooterModule } from '../ui/footer/footer.module'; +import { HeaderModule } from '../ui/header/header.module'; +import { LayoutModule } from '../ui/layout/layout.module'; +import { NotFoundPage } from '../ui/not-found/not-found.page'; + +const APP_ROUTES: Routes = [ + { + path: ROUTER_UTILS.config.auth.root, + loadChildren: async () => (await import('@components/auth/auth.module')).AuthModule, + canLoad: [], + }, + { + path: ROUTER_UTILS.config.base.home, + redirectTo: ROUTER_UTILS.config.discover.root, + pathMatch: 'full', + }, + { + path: ROUTER_UTILS.config.base.dashboard, + loadChildren: async () => (await import('@pages/dashboard/dashboard.module')).DashboardModule, + canLoad: [], + }, + { + path: ROUTER_UTILS.config.discover.root, + loadChildren: async () => (await import('@pages/discover/discover.module')).DiscoverModule, + canLoad: [], + }, + { + path: ROUTER_UTILS.config.member.root, + loadChildren: async () => (await import('@pages/member/member.module')).MemberModule, + canLoad: [], + }, + { + path: ROUTER_UTILS.config.space.root, + loadChildren: async () => (await import('@pages/space/space.module')).SpaceModule, + canLoad: [], + }, + { + path: ROUTER_UTILS.config.proposal.root, + loadChildren: async () => (await import('@pages/proposal/proposal.module')).ProposalModule, + canLoad: [], + }, + { + path: ROUTER_UTILS.config.award.root, + loadChildren: async () => (await import('@pages/award/award.module')).AwardModule, + canLoad: [], + }, + { + path: ROUTER_UTILS.config.market.root, + loadChildren: async () => (await import('@pages/market/market.module')).MarketModule, + canLoad: [], + }, + { + path: ROUTER_UTILS.config.swap.root, + loadChildren: async () => (await import('@pages/swap/swap.module')).SwapModule, + canLoad: [], + }, + { + path: ROUTER_UTILS.config.soonStaking.root, + loadChildren: async () => + (await import('@pages/soon-staking/soon-staking.module')).SoonStakingModule, + canLoad: [], + }, + { + path: ROUTER_UTILS.config.pool.root, + loadChildren: async () => (await import('@pages/pool/pool.module')).PoolModule, + canLoad: [], + }, + { + path: ROUTER_UTILS.config.collection.root, + loadChildren: async () => + (await import('@pages/collection/collection.module')).CollectionModule, + canLoad: [], + }, + { + path: ROUTER_UTILS.config.nft.root, + loadChildren: async () => (await import('@pages/nft/nft.module')).NFTModule, + canLoad: [], + }, + { + path: ROUTER_UTILS.config.token.root, + loadChildren: async () => (await import('@pages/token/token.module')).TokenModule, + canLoad: [], + }, + { + path: ROUTER_UTILS.config.tokens.root, + loadChildren: async () => (await import('@pages/tokens/tokens.module')).TokensModule, + canLoad: [], + }, + { + path: '**', + loadChildren: async () => (await import('@shell/ui/not-found/not-found.module')).NotFoundModule, + component: NotFoundPage, + }, + { + path: ROUTER_UTILS.config.base.home, + loadChildren: async () => (await import('@pages/market/market.module')).MarketModule, + canLoad: [], + }, +]; + +@NgModule({ + imports: [ + CommonModule, + RouterModule.forRoot(APP_ROUTES, { + onSameUrlNavigation: 'reload', + initialNavigation: 'enabledBlocking', + }), + FooterModule, + HeaderModule, + LayoutModule, + NotFoundModule, + ], + exports: [RouterModule, FooterModule, HeaderModule, LayoutModule, NotFoundModule], +}) +export class WebShellModule {} diff --git a/src/app/@shell/ui/footer/footer.component.html b/src/app/@shell/ui/footer/footer.component.html new file mode 100644 index 0000000..e69de29 diff --git a/src/app/@shell/ui/footer/footer.component.less b/src/app/@shell/ui/footer/footer.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/@shell/ui/footer/footer.component.ts b/src/app/@shell/ui/footer/footer.component.ts new file mode 100644 index 0000000..60c4273 --- /dev/null +++ b/src/app/@shell/ui/footer/footer.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-footer', + templateUrl: './footer.component.html', + styleUrls: ['./footer.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class FooterComponent {} diff --git a/src/app/@shell/ui/footer/footer.module.ts b/src/app/@shell/ui/footer/footer.module.ts new file mode 100644 index 0000000..7282ca0 --- /dev/null +++ b/src/app/@shell/ui/footer/footer.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FooterComponent } from './footer.component'; + +@NgModule({ + declarations: [FooterComponent], + imports: [CommonModule], + exports: [FooterComponent], +}) +export class FooterModule {} diff --git a/src/app/@shell/ui/header/header.component.html b/src/app/@shell/ui/header/header.component.html new file mode 100644 index 0000000..31c4476 --- /dev/null +++ b/src/app/@shell/ui/header/header.component.html @@ -0,0 +1,290 @@ + +
+ + + + +
+ + + + + +
+ + +
+ + + + + + + + + + Space + + + Proposal + + + Award + +
+ + Collection + + + Token + +
+ +
+
+ + + + + + + + +
+ + + + + +
None.
+
+
+ + + + + + My Profile + + + + +
+ + + + + + +
+ +
+
+ Purchase has not been completed +
+
+ You have {{ expiryTicker$ | async | countdownTime }} to finish your transaction +
+ +
+
+
+ + + + diff --git a/src/app/@shell/ui/header/header.component.less b/src/app/@shell/ui/header/header.component.less new file mode 100644 index 0000000..e91741b --- /dev/null +++ b/src/app/@shell/ui/header/header.component.less @@ -0,0 +1,15 @@ +.disabled-box { + @apply rounded-2xl; + + .ant-dropdown-menu-item:hover { + @apply bg-transparent !important; + } + + .ant-dropdown-menu-item:not(.title) { + @apply space-x-2 px-2 text-foregrounds-secondary dark:text-foregrounds-secondary-dark !important; + } + + .title { + @apply px-2; + } +} diff --git a/src/app/@shell/ui/header/header.component.ts b/src/app/@shell/ui/header/header.component.ts new file mode 100644 index 0000000..d0ff6fc --- /dev/null +++ b/src/app/@shell/ui/header/header.component.ts @@ -0,0 +1,382 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, + TemplateRef, + ViewChild, +} from '@angular/core'; +import { NavigationStart, Router } from '@angular/router'; +import { CollectionApi } from '@api/collection.api'; +import { NftApi } from '@api/nft.api'; +import { NotificationApi } from '@api/notification.api'; +import { OrderApi } from '@api/order.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { FormatTokenPipe } from '@core/pipes/formatToken/format-token.pipe'; +import { CheckoutService } from '@core/services/checkout'; +import { DeviceService } from '@core/services/device'; +import { RouterService } from '@core/services/router'; +import { + StorageItem, + getItem, + getNotificationItem, + removeItem, + setNotificationItem, +} from '@core/utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { + Collection, + FILE_SIZES, + Member, + Nft, + Notification, + NotificationType, + TRANSACTION_AUTO_EXPIRY_MS, + TransactionOrder, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { NzNotificationRef, NzNotificationService } from 'ng-zorro-antd/notification'; +import { + BehaviorSubject, + Subscription, + debounceTime, + firstValueFrom, + fromEvent, + interval, + skip, +} from 'rxjs'; +import { MemberApi } from './../../../@api/member.api'; + +const IS_SCROLLED_HEIGHT = 20; + +export interface NotificationContent { + title: string; + content: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-header', + templateUrl: './header.component.html', + styleUrls: ['./header.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class HeaderComponent implements OnInit, OnDestroy { + @ViewChild('notCompletedNotification', { static: false }) + notCompletedNotification!: TemplateRef; + @ViewChild('emptyIcon', { static: false }) emptyIcon!: TemplateRef; + + public path = ROUTER_UTILS.config.base; + public enableCreateAwardProposal = false; + public accessSubscriptions$: Subscription[] = []; + public isMemberProfile = false; + public isLandingPage = false; + public isMobileMenuVisible = false; + public isScrolled = false; + public isCheckoutOpen = false; + public currentCheckoutNft?: Nft; + public currentCheckoutCollection?: Collection; + public notifications$: BehaviorSubject = new BehaviorSubject([]); + private notificationRef?: NzNotificationRef; + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + private transaction$: BehaviorSubject = new BehaviorSubject< + TransactionOrder | undefined + >(undefined); + private subscriptionTransaction$?: Subscription; + private subscriptionNotification$?: Subscription; + + constructor( + public auth: AuthService, + public deviceService: DeviceService, + public routerService: RouterService, + public formatToken: FormatTokenPipe, + private router: Router, + private memberApi: MemberApi, + private orderApi: OrderApi, + private nftApi: NftApi, + private notificationApi: NotificationApi, + private collectionApi: CollectionApi, + private cd: ChangeDetectorRef, + private nzNotification: NzNotificationService, + private checkoutService: CheckoutService, + ) {} + + public ngOnInit(): void { + this.member$.pipe(untilDestroyed(this)).subscribe((obj) => { + if (obj?.uid) { + this.cancelAccessSubscriptions(); + this.accessSubscriptions$.push( + this.memberApi + .topSpaces(obj.uid, undefined, undefined, undefined, 1) + .subscribe((space) => { + this.enableCreateAwardProposal = space.length > 0; + this.cd.markForCheck(); + }), + ); + } else { + this.enableCreateAwardProposal = false; + this.cd.markForCheck(); + } + }); + + const memberRoute = `/${ROUTER_UTILS.config.member.root}/`; + const landingPageRoute = `/${ROUTER_UTILS.config.base.home}`; + + this.router.events.pipe(untilDestroyed(this)).subscribe((obj) => { + if (obj instanceof NavigationStart) { + const previousIsMemberProfile = this.isMemberProfile; + const previousIsLandingPage = this.isLandingPage; + + this.isMemberProfile = Boolean(obj.url.startsWith(memberRoute)); + this.isLandingPage = Boolean(obj.url === landingPageRoute); + + if ( + previousIsMemberProfile !== this.isMemberProfile || + previousIsLandingPage || + this.isLandingPage + ) { + this.cd.markForCheck(); + } + } + }); + + // Monitor scroll. + fromEvent(window, 'scroll') + .pipe(debounceTime(50), untilDestroyed(this)) + .subscribe(this.onScroll.bind(this)); + + this.transaction$.pipe(skip(1), untilDestroyed(this)).subscribe((o) => { + let expired = false; + if (o) { + const expiresOn: dayjs.Dayjs = dayjs(o.createdOn!.toDate()).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + this.expiryTicker$.next(expiresOn); + if (expiresOn.isBefore(dayjs()) || o.payload?.void || o.payload?.reconciled) { + expired = true; + } + } + + if (expired === false && o?.payload.void === false && o.payload.reconciled === false) { + if (!this.notificationRef) { + this.notificationRef = this.nzNotification.template(this.notCompletedNotification, { + nzDuration: 0, + nzCloseIcon: this.emptyIcon, + }); + } + } else { + this.removeCheckoutNotification(); + } + }); + + // Check periodically if there is something in the checkout. + interval(500) + .pipe(untilDestroyed(this)) + .subscribe(() => { + if (this.checkoutService.modalOpen$.value) { + this.removeCheckoutNotification(false); + } else { + if ( + getItem(StorageItem.CheckoutTransaction) && + (!this.subscriptionTransaction$ || this.subscriptionTransaction$.closed) + ) { + this.subscriptionTransaction$ = this.orderApi + .listen(getItem(StorageItem.CheckoutTransaction)) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } + }); + + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value && this.expiryTicker$.value.isBefore(dayjs())) { + this.expiryTicker$.next(null); + int.unsubscribe(); + this.removeCheckoutNotification(); + } + }); + + let lastMember: string | undefined; + this.auth.member$.pipe(untilDestroyed(this)).subscribe((m) => { + if (m && lastMember !== m.uid) { + this.subscriptionNotification$?.unsubscribe(); + this.subscriptionNotification$ = this.notificationApi + .topMember(m.uid, undefined, 25) + .subscribe(this.notifications$); + lastMember = m.uid; + } else if (!m) { + this.notifications$.next([]); + lastMember = undefined; + } + }); + } + + public async onOpenCheckout(): Promise { + const t = this.transaction$.getValue(); + if (!t?.payload.nft || !t.payload.collection) { + return; + } + const collection: Collection | undefined = await firstValueFrom( + this.collectionApi.listen(t?.payload.collection), + ); + let nft: Nft | undefined = undefined; + try { + nft = await firstValueFrom(this.nftApi.listen(t?.payload?.nft)); + } catch (_e) { + // If it's not classic or re-sale we're using placeholder NFT + if (collection?.placeholderNft) { + nft = await firstValueFrom(this.nftApi.listen(collection?.placeholderNft)); + } + } + if (nft && collection) { + this.currentCheckoutCollection = collection; + this.currentCheckoutNft = nft; + this.isCheckoutOpen = true; + this.cd.markForCheck(); + } + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + public get isLoggedIn$(): BehaviorSubject { + return this.auth.isLoggedIn$; + } + + public get member$(): BehaviorSubject { + return this.auth.member$; + } + + public get urlToDiscover(): string { + return '/' + ROUTER_UTILS.config.market.root; + } + + public closeCheckout(): void { + this.checkoutService.modalOpen$.next(false); + this.isCheckoutOpen = false; + } + + public goToMyProfile(): void { + if (this.member$.value?.uid) { + this.router.navigate([ + ROUTER_UTILS.config.member.root, + this.member$.value.uid, + ROUTER_UTILS.config.member.activity, + ]); + } + } + + private onScroll(): void { + this.isScrolled = window?.scrollY > IS_SCROLLED_HEIGHT; + this.cd.markForCheck(); + } + + public trackByUid(index: number, item: Notification) { + return item.uid; + } + + private removeCheckoutNotification(removeFromStorage = true): void { + if (this.notificationRef) { + this.nzNotification.remove(this.notificationRef.messageId); + this.notificationRef = undefined; + } + + this.subscriptionTransaction$?.unsubscribe(); + if (removeFromStorage) { + this.currentCheckoutNft = undefined; + this.currentCheckoutCollection = undefined; + removeItem(StorageItem.CheckoutTransaction); + } + } + + public notificationVisibleChange(): void { + if (!this.auth.member$.value?.uid) { + return; + } + + setTimeout(() => { + if (this.auth.member$.value) { + setNotificationItem( + this.auth.member$.value.uid, + this.notifications$.value[this.notifications$.value.length - 1]?.uid, + ); + } + this.cd.markForCheck(); + }, 2500); + } + + public unreadNotificationCount(): number { + if (!this.notifications$.value.length || !this.auth.member$.value?.uid) { + return 0; + } + + if (!getNotificationItem(this.auth.member$.value?.uid)) { + return this.notifications$.value.length; + } + + return ( + this.notifications$.value.indexOf( + getNotificationItem(this.auth.member$.value?.uid), + ) + 1 + ); + } + + public getNotificationDetails(not: Notification): NotificationContent { + if (not.type === NotificationType.WIN_BID) { + const title = $localize`You won the NFT`; + const contentYour = $localize`You are a proud owner of a new NFT. Congratulations!`; + + return { + title: title + ' ' + not.params.nft.name, + content: contentYour, + }; + } else if (not.type === NotificationType.LOST_BID) { + const title = $localize`You lost your bid!`; + const contentYour = $localize`Your bid on `; + const contentReceived = $localize` was outbid. Try again!`; + + return { + title: title, + content: contentYour + ' ' + not.params.nft.name + ' ' + contentReceived, + }; + } else if (not.type === NotificationType.NEW_BID) { + const titleOffered = $localize`just made an offer.`; + const contentYour = $localize`Your`; + const contentReceived = $localize`has received a new bid.`; + + return { + title: '@' + not.params.member.name + ' ' + titleOffered, + content: contentYour + ' ' + not.params.nft.name + ' ' + contentReceived, + }; + } else { + return { + title: $localize`Unsupported`, + content: $localize`This notification is not yet supported in your language`, + }; + } + } + + public cancelAccessSubscriptions(): void { + this.accessSubscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelAccessSubscriptions(); + this.subscriptionNotification$?.unsubscribe(); + this.subscriptionTransaction$?.unsubscribe(); + this.currentCheckoutNft = undefined; + this.currentCheckoutCollection = undefined; + } +} diff --git a/src/app/@shell/ui/header/header.module.ts b/src/app/@shell/ui/header/header.module.ts new file mode 100644 index 0000000..e4026db --- /dev/null +++ b/src/app/@shell/ui/header/header.module.ts @@ -0,0 +1,56 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { AuthModule } from '@components/auth/auth.module'; +import { IconModule } from '@components/icon/icon.module'; +import { MenuModule } from '@components/menu/menu.module'; +import { NftCheckoutModule } from '@components/nft/components/nft-checkout/nft-checkout.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { FormatTokenPipe } from '@core/pipes/formatToken/format-token.pipe'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzBadgeModule } from 'ng-zorro-antd/badge'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzDropDownModule } from 'ng-zorro-antd/dropdown'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzLayoutModule } from 'ng-zorro-antd/layout'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzNotificationModule } from 'ng-zorro-antd/notification'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { MobileHeaderModule } from '../mobile-header/mobile-header.module'; +import { MobileMenuModule } from '../mobile-menu/mobile-menu.module'; +import { TruncateModule } from './../../../@core/pipes/truncate/truncate.module'; +import { HeaderComponent } from './header.component'; + +@NgModule({ + declarations: [HeaderComponent], + providers: [FormatTokenPipe], + imports: [ + CommonModule, + TruncateModule, + NzModalModule, + AuthModule, + FormatTokenModule, + RouterModule, + ResizeAvatarModule, + NzToolTipModule, + NzLayoutModule, + NzIconModule, + NzBadgeModule, + NzButtonModule, + NzAvatarModule, + NzNotificationModule, + NzTagModule, + IconModule, + CountdownTimeModule, + NzDropDownModule, + MenuModule, + NftCheckoutModule, + MobileMenuModule, + MobileHeaderModule, + ], + exports: [HeaderComponent], +}) +export class HeaderModule {} diff --git a/src/app/@shell/ui/layout/content/content.component.html b/src/app/@shell/ui/layout/content/content.component.html new file mode 100644 index 0000000..fd812fb --- /dev/null +++ b/src/app/@shell/ui/layout/content/content.component.html @@ -0,0 +1,20 @@ +
+ + + +
diff --git a/src/app/@shell/ui/layout/content/content.component.less b/src/app/@shell/ui/layout/content/content.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/@shell/ui/layout/content/content.component.ts b/src/app/@shell/ui/layout/content/content.component.ts new file mode 100644 index 0000000..bc15cd9 --- /dev/null +++ b/src/app/@shell/ui/layout/content/content.component.ts @@ -0,0 +1,22 @@ +import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { NavigationService } from '@core/services/navigation/navigation.service'; +import { Observable, of } from 'rxjs'; + +@Component({ + selector: 'wen-content', + templateUrl: './content.component.html', + styleUrls: ['./content.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ContentComponent implements OnInit { + @Input() showBackButton = false; + + public title: Observable = of(''); + + constructor(public nav: NavigationService, public device: DeviceService) {} + + ngOnInit(): void { + this.title = this.nav.getTitle(); + } +} diff --git a/src/app/@shell/ui/layout/layout.component.html b/src/app/@shell/ui/layout/layout.component.html new file mode 100644 index 0000000..885ec41 --- /dev/null +++ b/src/app/@shell/ui/layout/layout.component.html @@ -0,0 +1,33 @@ + + + + + + + + +
+
+
+
+ +
+ + +
+
diff --git a/src/app/@shell/ui/layout/layout.component.less b/src/app/@shell/ui/layout/layout.component.less new file mode 100644 index 0000000..427d067 --- /dev/null +++ b/src/app/@shell/ui/layout/layout.component.less @@ -0,0 +1,3 @@ +:host { + @apply flex flex-col min-h-full; +} diff --git a/src/app/@shell/ui/layout/layout.component.ts b/src/app/@shell/ui/layout/layout.component.ts new file mode 100644 index 0000000..b404b06 --- /dev/null +++ b/src/app/@shell/ui/layout/layout.component.ts @@ -0,0 +1,46 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { NavigationCancel, NavigationEnd, Router } from '@angular/router'; +import { DeviceService, LAYOUT_CHANGE_DEBOUNCE_TIME } from '@core/services/device'; +import { RouterService } from '@core/services/router'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { BehaviorSubject, combineLatest } from 'rxjs'; +import { debounceTime, filter } from 'rxjs/operators'; + +@UntilDestroy() +@Component({ + selector: 'wen-layout', + templateUrl: './layout.component.html', + styleUrls: ['./layout.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class LayoutComponent implements OnInit { + public showSideBar$: BehaviorSubject = new BehaviorSubject(true); + + constructor( + private router: Router, + private deviceService: DeviceService, + public routerService: RouterService, + ) {} + + public ngOnInit(): void { + combineLatest([this.router.events, this.deviceService.isMobile$]) + .pipe( + untilDestroyed(this), + debounceTime(LAYOUT_CHANGE_DEBOUNCE_TIME), + filter(([event]: [any, boolean]) => { + return ( + !event?.routerEvent || + event.routerEvent instanceof NavigationEnd || + event.routerEvent instanceof NavigationCancel + ); + }), + ) + .subscribe(() => { + if (this.deviceService.isMobile$.getValue()) { + this.showSideBar$.next(false); + } else { + this.showSideBar$.next(true); + } + }); + } +} diff --git a/src/app/@shell/ui/layout/layout.module.ts b/src/app/@shell/ui/layout/layout.module.ts new file mode 100644 index 0000000..22c5f32 --- /dev/null +++ b/src/app/@shell/ui/layout/layout.module.ts @@ -0,0 +1,25 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzLayoutModule } from 'ng-zorro-antd/layout'; +import { FooterModule } from '../footer/footer.module'; +import { HeaderModule } from '../header/header.module'; +import { SiderModule } from '../sider/sider.module'; +import { ContentComponent } from './content/content.component'; +import { LayoutComponent } from './layout.component'; + +@NgModule({ + declarations: [LayoutComponent, ContentComponent], + imports: [ + CommonModule, + HeaderModule, + FooterModule, + NzLayoutModule, + SiderModule, + IconModule, + NzButtonModule, + ], + exports: [LayoutComponent, ContentComponent], +}) +export class LayoutModule {} diff --git a/src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html b/src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html new file mode 100644 index 0000000..d7415f4 --- /dev/null +++ b/src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html @@ -0,0 +1,89 @@ + + + +
+ + + + + + + + +
+
diff --git a/src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.less b/src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.ts b/src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.ts new file mode 100644 index 0000000..b834e68 --- /dev/null +++ b/src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.ts @@ -0,0 +1,19 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { AuthService } from '@components/auth/services/auth.service'; +import { RouterService } from '@core/services/router'; + +@Component({ + selector: 'wen-create-dropdown', + templateUrl: './create-dropdown.component.html', + styleUrls: ['./create-dropdown.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CreateDropdownComponent { + // TODO Clean up this passing around of inputs. This messy. + @Input() isMemberProfile = false; + @Input() isLandingPage = false; + @Input() enableCreateAwardProposal = true; + @Output() wenOnCreateClick = new EventEmitter(); + + constructor(public routerService: RouterService, public auth: AuthService) {} +} diff --git a/src/app/@shell/ui/mobile-header/mobile-header.component.html b/src/app/@shell/ui/mobile-header/mobile-header.component.html new file mode 100644 index 0000000..650eeca --- /dev/null +++ b/src/app/@shell/ui/mobile-header/mobile-header.component.html @@ -0,0 +1,93 @@ + diff --git a/src/app/@shell/ui/mobile-header/mobile-header.component.less b/src/app/@shell/ui/mobile-header/mobile-header.component.less new file mode 100644 index 0000000..fd734be --- /dev/null +++ b/src/app/@shell/ui/mobile-header/mobile-header.component.less @@ -0,0 +1,3 @@ +.word-break { + word-break: break-word; +} diff --git a/src/app/@shell/ui/mobile-header/mobile-header.component.ts b/src/app/@shell/ui/mobile-header/mobile-header.component.ts new file mode 100644 index 0000000..40e4586 --- /dev/null +++ b/src/app/@shell/ui/mobile-header/mobile-header.component.ts @@ -0,0 +1,59 @@ +import { Location } from '@angular/common'; +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { AuthService } from '@components/auth/services/auth.service'; +import { RouterService } from '@core/services/router'; +import { UnitsService } from '@core/services/units'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { Notification } from '@soonaverse/interfaces'; +import { BehaviorSubject } from 'rxjs'; +import { NotificationContent } from '../header/header.component'; + +@UntilDestroy() +@Component({ + selector: 'wen-mobile-header', + templateUrl: './mobile-header.component.html', + styleUrls: ['./mobile-header.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MobileHeaderComponent { + // TODO Clean up this passing around of inputs. This messy. + @Input() isMobileMenuVisible = false; + @Input() isMemberProfile = false; + @Input() isLandingPage = false; + @Input() goBackHeader = false; + @Input() enableCreateAwardProposal = true; + @Input() notifications: Notification[] = []; + @Input() unreadNotificationCount = 0; + @Input() getNotificationDetails!: (not: Notification) => NotificationContent; + @Output() wenOnVisibleChange = new EventEmitter(); + @Output() wenOnNotificationVisibleChange = new EventEmitter(); + + public homeRoute = ROUTER_UTILS.config.base.home; + + constructor( + public auth: AuthService, + public location: Location, + public routerService: RouterService, + public unitsService: UnitsService, + ) {} + + public setMobileMenuVisible(isVisible: boolean): void { + this.isMobileMenuVisible = isVisible; + this.wenOnVisibleChange.emit(isVisible); + } + + public wenOnCreateClick(): void { + if (this.isMobileMenuVisible) { + this.setMobileMenuVisible(false); + } + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + public get isLoggedIn$(): BehaviorSubject { + return this.auth.isLoggedIn$; + } +} diff --git a/src/app/@shell/ui/mobile-header/mobile-header.module.ts b/src/app/@shell/ui/mobile-header/mobile-header.module.ts new file mode 100644 index 0000000..37f996f --- /dev/null +++ b/src/app/@shell/ui/mobile-header/mobile-header.module.ts @@ -0,0 +1,27 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { IconModule } from '@components/icon/icon.module'; +import { MenuModule } from '@components/menu/menu.module'; +import { NzBadgeModule } from 'ng-zorro-antd/badge'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzDropDownModule } from 'ng-zorro-antd/dropdown'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { CreateDropdownComponent } from './create-dropdown/create-dropdown.component'; +import { MobileHeaderComponent } from './mobile-header.component'; + +@NgModule({ + declarations: [MobileHeaderComponent, CreateDropdownComponent], + imports: [ + CommonModule, + RouterModule, + IconModule, + NzDropDownModule, + NzToolTipModule, + NzButtonModule, + NzBadgeModule, + MenuModule, + ], + exports: [MobileHeaderComponent], +}) +export class MobileHeaderModule {} diff --git a/src/app/@shell/ui/mobile-menu/mobile-menu.component.html b/src/app/@shell/ui/mobile-menu/mobile-menu.component.html new file mode 100644 index 0000000..7351847 --- /dev/null +++ b/src/app/@shell/ui/mobile-menu/mobile-menu.component.html @@ -0,0 +1,108 @@ + +
+ + + +
+
+ +
+ +
+ + {{ + '@' + ((member$ | async)?.name || (member$ | async)?.uid || '') | truncate : [12] + }} + VIP LEVEL {{ auth.memberLevel$ | async }} + +
+
+
+ + +
+
+ +
+
Metamask
+
+ Connect to your MetaMask wallet +
+
+
+ +
+ +
+
TanglePay
+
Connect via TanglePay
+
+
+
+
+
+
+ +
+ +
+ +
+ + +
+ +
+
+ + Log out +
+ +
+ Powered by + +
+
+
+
diff --git a/src/app/@shell/ui/mobile-menu/mobile-menu.component.less b/src/app/@shell/ui/mobile-menu/mobile-menu.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/@shell/ui/mobile-menu/mobile-menu.component.ts b/src/app/@shell/ui/mobile-menu/mobile-menu.component.ts new file mode 100644 index 0000000..ebec03e --- /dev/null +++ b/src/app/@shell/ui/mobile-menu/mobile-menu.component.ts @@ -0,0 +1,57 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { Router } from '@angular/router'; +import { AuthService, Wallets } from '@components/auth/services/auth.service'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { FILE_SIZES, Member } from '@soonaverse/interfaces'; +import { BehaviorSubject } from 'rxjs'; + +@Component({ + selector: 'wen-mobile-menu', + templateUrl: './mobile-menu.component.html', + styleUrls: ['./mobile-menu.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MobileMenuComponent { + // TODO Clean up this passing around of inputs. This messy. + @Input() isVisible = false; + @Input() isMemberProfile = false; + @Input() isLandingPage = false; + @Input() filesizes!: typeof FILE_SIZES; + @Input() enableCreateAwardProposal = true; + @Output() isVisibleChanged = new EventEmitter(); + + constructor(public auth: AuthService, private router: Router) {} + + wenOnVisibleChange(isVisible: boolean): void { + this.isVisible = isVisible; + this.isVisibleChanged.emit(isVisible); + } + + public get isLoggedIn$(): BehaviorSubject { + return this.auth.isLoggedIn$; + } + + public get member$(): BehaviorSubject { + return this.auth.member$; + } + + public onClickProfile(w: Wallets): void { + if (!this.auth.isLoggedIn$.value) { + this.auth.signIn(w).then((res) => { + // Only redirect to dashboard if home. + if (this.router.url === '/' && res) { + this.router.navigate([ROUTER_UTILS.config.base.dashboard]); + this.wenOnVisibleChange(false); + } + }); + } + } + + public onClickProfileMetamask(): void { + this.onClickProfile(Wallets.Metamask); + } + + public onClickProfileTanglePay(): void { + this.onClickProfile(Wallets.TanglePay); + } +} diff --git a/src/app/@shell/ui/mobile-menu/mobile-menu.module.ts b/src/app/@shell/ui/mobile-menu/mobile-menu.module.ts new file mode 100644 index 0000000..e7a901f --- /dev/null +++ b/src/app/@shell/ui/mobile-menu/mobile-menu.module.ts @@ -0,0 +1,38 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { MobileHeaderModule } from '../mobile-header/mobile-header.module'; +import { MenuModule } from '../sider/menu/menu.module'; +import { NavigationModule } from '../sider/navigation/navigation.module'; +import { NetworkStatusModule } from '../sider/network-status/network-status.module'; +import { ThemeSwitchModule } from '../sider/theme-switch/theme-switch.module'; +import { MobileMenuComponent } from './mobile-menu.component'; + +@NgModule({ + declarations: [MobileMenuComponent], + imports: [ + CommonModule, + MobileHeaderModule, + NzDrawerModule, + NzAvatarModule, + IconModule, + TruncateModule, + NzTagModule, + ResizeAvatarModule, + MenuModule, + ThemeSwitchModule, + NzIconModule, + NzToolTipModule, + NetworkStatusModule, + NavigationModule, + ], + exports: [MobileMenuComponent], +}) +export class MobileMenuModule {} diff --git a/src/app/@shell/ui/not-found/not-found.module.ts b/src/app/@shell/ui/not-found/not-found.module.ts new file mode 100644 index 0000000..947f790 --- /dev/null +++ b/src/app/@shell/ui/not-found/not-found.module.ts @@ -0,0 +1,25 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NotFoundPage } from './not-found.page'; + +@NgModule({ + declarations: [NotFoundPage], + imports: [ + CommonModule, + RouterModule.forChild([ + { + path: ROUTER_UTILS.config.errorResponse.notFound, + component: NotFoundPage, + data: { + title: 'The page you were looking for could not be found', + robots: 'noindex, nofollow', + }, + }, + ]), + NzButtonModule, + ], +}) +export class NotFoundModule {} diff --git a/src/app/@shell/ui/not-found/not-found.page.html b/src/app/@shell/ui/not-found/not-found.page.html new file mode 100644 index 0000000..46fc368 --- /dev/null +++ b/src/app/@shell/ui/not-found/not-found.page.html @@ -0,0 +1,13 @@ +
+
+

404:(

+

The page you were looking for was not found

+ + Discover Soonaverse + +
+
diff --git a/src/app/@shell/ui/not-found/not-found.page.less b/src/app/@shell/ui/not-found/not-found.page.less new file mode 100644 index 0000000..3784adc --- /dev/null +++ b/src/app/@shell/ui/not-found/not-found.page.less @@ -0,0 +1,4 @@ +.not-found-page { + background-image: url('/assets/mocks/not_found.jpg'); + border-radius: 40px; +} diff --git a/src/app/@shell/ui/not-found/not-found.page.ts b/src/app/@shell/ui/not-found/not-found.page.ts new file mode 100644 index 0000000..949386f --- /dev/null +++ b/src/app/@shell/ui/not-found/not-found.page.ts @@ -0,0 +1,15 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; + +@Component({ + templateUrl: './not-found.page.html', + styleUrls: ['./not-found.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NotFoundPage { + path = ROUTER_UTILS.config.base; + + public get discoverRoute() { + return ['/', ROUTER_UTILS.config.discover.root]; + } +} diff --git a/src/app/@shell/ui/sider/menu/menu-item.directive.ts b/src/app/@shell/ui/sider/menu/menu-item.directive.ts new file mode 100644 index 0000000..91ff5f5 --- /dev/null +++ b/src/app/@shell/ui/sider/menu/menu-item.directive.ts @@ -0,0 +1,11 @@ +import { Directive, Input, ViewContainerRef } from '@angular/core'; +import { MenuItem } from './menu-item'; + +@Directive({ + selector: '[wenMenuItem]', +}) +export class MenuItemDirective { + @Input() wenMenuItem: MenuItem | null = null; + + constructor(public viewContainerRef: ViewContainerRef) {} +} diff --git a/src/app/@shell/ui/sider/menu/menu-item.ts b/src/app/@shell/ui/sider/menu/menu-item.ts new file mode 100644 index 0000000..b3bdf7b --- /dev/null +++ b/src/app/@shell/ui/sider/menu/menu-item.ts @@ -0,0 +1,4 @@ +export class MenuItem { + // TODO - better type for icon + constructor(public route: string[], public icon: any) {} +} diff --git a/src/app/@shell/ui/sider/menu/menu.component.html b/src/app/@shell/ui/sider/menu/menu.component.html new file mode 100644 index 0000000..f38c7ba --- /dev/null +++ b/src/app/@shell/ui/sider/menu/menu.component.html @@ -0,0 +1,26 @@ + diff --git a/src/app/@shell/ui/sider/menu/menu.component.less b/src/app/@shell/ui/sider/menu/menu.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/@shell/ui/sider/menu/menu.component.ts b/src/app/@shell/ui/sider/menu/menu.component.ts new file mode 100644 index 0000000..d087e51 --- /dev/null +++ b/src/app/@shell/ui/sider/menu/menu.component.ts @@ -0,0 +1,80 @@ +import { + AfterViewChecked, + ChangeDetectionStrategy, + Component, + ComponentFactoryResolver, + Input, + QueryList, + ViewChildren, +} from '@angular/core'; +import { Router } from '@angular/router'; +import { MenuItem } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { MenuItemDirective } from './menu-item.directive'; + +@Component({ + selector: 'wen-menu', + templateUrl: './menu.component.html', + styleUrls: ['./menu.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MenuComponent implements AfterViewChecked { + @Input() set items(value: MenuItem[]) { + this.menuItems = value; + this.reCreateIcons = true; + } + + public menuItems: MenuItem[] = []; + @ViewChildren(MenuItemDirective) menuItemLabels!: QueryList; + private reCreateIcons = false; + + constructor( + public deviceService: DeviceService, + private router: Router, + private componentFactoryResolver: ComponentFactoryResolver, + ) {} + + loadIconComponents() { + if (this.menuItemLabels) { + for (const itemLabel of this.menuItemLabels.toArray()) { + const iconComponent = this.componentFactoryResolver.resolveComponentFactory( + itemLabel.wenMenuItem?.icon, + ); + itemLabel.viewContainerRef.clear(); + itemLabel.viewContainerRef.createComponent(iconComponent); + } + } + } + + public ngAfterViewChecked(): void { + if (this.reCreateIcons) { + this.loadIconComponents(); + this.reCreateIcons = false; + } + } + + public isSelectedRoute(route: any[]): boolean { + if ( + this.router.isActive(this.router.createUrlTree(route), { + paths: 'subset', + queryParams: 'subset', + fragment: 'ignored', + matrixParams: 'ignored', + }) + ) { + return true; + } + + // Default to first. + // TODO Defaulting of discovery when none of the above. + if (this.menuItems[0].route === route) { + // return true; + } + + return false; + } + + public trackByTitle(index: number, item: MenuItem): string { + return item.title; + } +} diff --git a/src/app/@shell/ui/sider/menu/menu.module.ts b/src/app/@shell/ui/sider/menu/menu.module.ts new file mode 100644 index 0000000..f8f7035 --- /dev/null +++ b/src/app/@shell/ui/sider/menu/menu.module.ts @@ -0,0 +1,14 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { NzMenuModule } from 'ng-zorro-antd/menu'; +import { NzPopoverModule } from 'ng-zorro-antd/popover'; +import { MenuItemDirective } from './menu-item.directive'; +import { MenuComponent } from './menu.component'; + +@NgModule({ + declarations: [MenuComponent, MenuItemDirective], + imports: [CommonModule, RouterModule, NzMenuModule, NzPopoverModule], + exports: [MenuComponent, MenuItemDirective], +}) +export class MenuModule {} diff --git a/src/app/@shell/ui/sider/navigation/navigation.component.html b/src/app/@shell/ui/sider/navigation/navigation.component.html new file mode 100644 index 0000000..5685494 --- /dev/null +++ b/src/app/@shell/ui/sider/navigation/navigation.component.html @@ -0,0 +1,49 @@ + diff --git a/src/app/@shell/ui/sider/navigation/navigation.component.less b/src/app/@shell/ui/sider/navigation/navigation.component.less new file mode 100644 index 0000000..ea4b4d6 --- /dev/null +++ b/src/app/@shell/ui/sider/navigation/navigation.component.less @@ -0,0 +1,19 @@ +:host { + @apply block w-full; +} + +.item { + @apply h-12 p-0 text-current lg:w-10 lg:h-10 rounded-3xl items-center justify-center my-1; + + &__selected { + @apply text-tabs-text-selected dark:text-tabs-text-selected-dark bg-tabs-selected dark:bg-tabs-selected-dark; + } +} + +.item_menu { + @apply px-4 py-0 text-current rounded-3xl my-1 w-full h-12 items-center; + + &__selected { + @apply text-tabs-text-selected dark:text-tabs-text-selected-dark bg-tabs-selected dark:bg-tabs-selected-dark; + } +} diff --git a/src/app/@shell/ui/sider/navigation/navigation.component.ts b/src/app/@shell/ui/sider/navigation/navigation.component.ts new file mode 100644 index 0000000..7030ef4 --- /dev/null +++ b/src/app/@shell/ui/sider/navigation/navigation.component.ts @@ -0,0 +1,91 @@ +import { + AfterViewChecked, + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + ComponentFactoryResolver, + Input, + OnInit, + QueryList, + ViewChildren, +} from '@angular/core'; +import { Router } from '@angular/router'; +import { AuthService, MenuItem } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { MenuItemDirective } from '../menu/menu-item.directive'; + +@UntilDestroy() +@Component({ + selector: 'wen-navigation', + templateUrl: './navigation.component.html', + styleUrls: ['./navigation.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NavigationComponent implements OnInit, AfterViewChecked { + @Input() set items(value: MenuItem[]) { + this.menuItems = value; + this.reCreateIcons = true; + } + + public menuItems: MenuItem[] = []; + @ViewChildren(MenuItemDirective) menuItemLabels!: QueryList; + private reCreateIcons = false; + + constructor( + public auth: AuthService, + public deviceService: DeviceService, + private router: Router, + private componentFactoryResolver: ComponentFactoryResolver, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + this.auth.isLoggedIn$.pipe(untilDestroyed(this)).subscribe(() => this.cd.markForCheck()); + this.router.events.pipe(untilDestroyed(this)).subscribe(() => this.cd.markForCheck()); + } + + public ngAfterViewChecked(): void { + if (this.reCreateIcons) { + this.loadIconComponents(); + this.reCreateIcons = false; + } + } + + loadIconComponents() { + if (this.menuItemLabels) { + for (const itemLabel of this.menuItemLabels.toArray()) { + const iconComponent = this.componentFactoryResolver.resolveComponentFactory( + itemLabel.wenMenuItem?.icon, + ); + itemLabel.viewContainerRef.clear(); + const component = itemLabel.viewContainerRef.createComponent(iconComponent); + (component.instance as any).size = 24; + this.cd.markForCheck(); + } + } + } + + public isSelectedRoute(route: any[]): boolean { + if ( + this.router.isActive(this.router.createUrlTree(route), { + paths: 'subset', + queryParams: 'subset', + fragment: 'ignored', + matrixParams: 'ignored', + }) + ) { + return true; + } + + return false; + } + + public showSeperator(item: MenuItem, loggedIn: boolean) { + return loggedIn ? item.authSepeator : item.unAuthauthSepeator; + } + + public trackByTitle(index: number, item: MenuItem): string { + return item.title; + } +} diff --git a/src/app/@shell/ui/sider/navigation/navigation.module.ts b/src/app/@shell/ui/sider/navigation/navigation.module.ts new file mode 100644 index 0000000..61126f8 --- /dev/null +++ b/src/app/@shell/ui/sider/navigation/navigation.module.ts @@ -0,0 +1,14 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { IconModule } from '@components/icon/icon.module'; +import { NzPopoverModule } from 'ng-zorro-antd/popover'; +import { MenuModule } from '../menu/menu.module'; +import { NavigationComponent } from './navigation.component'; + +@NgModule({ + declarations: [NavigationComponent], + imports: [CommonModule, NzPopoverModule, RouterModule, MenuModule, IconModule], + exports: [NavigationComponent], +}) +export class NavigationModule {} diff --git a/src/app/@shell/ui/sider/network-status/network-status.component.html b/src/app/@shell/ui/sider/network-status/network-status.component.html new file mode 100644 index 0000000..c1ef8a5 --- /dev/null +++ b/src/app/@shell/ui/sider/network-status/network-status.component.html @@ -0,0 +1,270 @@ + + + +
+ + +
Network status
+ +
+ +
+
+
IOTA
+
+ +
+
+ Network status +
+
+
Operational
+
+
+
+
Degraded Performance
+
+
+
+
Down
+
+
+
+ +
+
+ Last milestone +
+
+ {{ (lastIotaMilestone$ | async)?.['milestone'] }} +
+
+
+ + +
+ +
+
+
IOTA
+
+
+ Devnet +
+
+ +
+
+ Network status +
+
+
Operational
+
+
+
+
Degraded Performance
+
+
+
+
Down
+
+
+
+ +
+
+ Last milestone +
+
+ {{ (lastAtoiMilestone$ | async)?.['milestone'] }} +
+
+
+
+ +
+ +
+
+
Shimmer
+
+ +
+ Shimmer Mainnet Coming SOON +
+ +
+
+ Network status +
+
+
Operational
+
+
+
+
Degraded Performance
+
+
+
+
Down
+
+
+
+ +
+
+ Last milestone +
+
+ {{ (lastSmrMilestone$ | async)?.['milestone'] }} +
+
+
+ + +
+ +
+
+
Shimmer
+
+
+ Testnet +
+
+ +
+
+ Network status +
+
+
Operational
+
+
+
+
Degraded Performance
+
+
+
+
Down
+
+
+
+ +
+
+ Last milestone +
+
+ {{ (lastRmsMilestone$ | async)?.['milestone'] }} +
+
+
+
+ +
+ +
+
+
Assembly
+
+ +
+ Assembly Coming SOON +
+
+ +
+ +
+
+
+
Shimmer
+
+ EVM +
+
+
+ +
+ Shimmer EVM Coming SOON +
+
+
+
diff --git a/src/app/@shell/ui/sider/network-status/network-status.component.less b/src/app/@shell/ui/sider/network-status/network-status.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/@shell/ui/sider/network-status/network-status.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/@shell/ui/sider/network-status/network-status.component.ts b/src/app/@shell/ui/sider/network-status/network-status.component.ts new file mode 100644 index 0000000..b0e7402 --- /dev/null +++ b/src/app/@shell/ui/sider/network-status/network-status.component.ts @@ -0,0 +1,122 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + HostListener, + OnInit, +} from '@angular/core'; +import { MilestoneApi } from '@api/milestone.api'; +import { MilestoneAtoiApi } from '@api/milestone_atoi.api'; +import { MilestoneRmsApi } from '@api/milestone_rms.api'; +import { MilestoneSmrApi } from '@api/milestone_smr.api'; +import { DeviceService } from '@core/services/device'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { Milestone, Network, PROD_NETWORKS, TEST_NETWORKS } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, map } from 'rxjs'; + +const ESCAPE_KEY = 'Escape'; + +enum NetworkStatus { + GREEN = 0, + YELLOW = 1, + RED = 2, +} + +@UntilDestroy() +@Component({ + selector: 'wen-network-status', + templateUrl: './network-status.component.html', + styleUrls: ['./network-status.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NetworkStatusComponent implements OnInit { + @HostListener('document:keydown', ['$event']) + handleKeyboardEvent(event: KeyboardEvent) { + if (event.key === ESCAPE_KEY) { + this.isVisible = false; + this.cd.markForCheck(); + } + } + + public isVisible = false; + public environment = environment; + public lastIotaMilestone$ = new BehaviorSubject(undefined); + public lastAtoiMilestone$ = new BehaviorSubject(undefined); + public lastRmsMilestone$ = new BehaviorSubject(undefined); + public lastSmrMilestone$ = new BehaviorSubject(undefined); + + constructor( + public deviceService: DeviceService, + private milestoneApi: MilestoneApi, + private milestoneRmsApi: MilestoneRmsApi, + private milestoneSmrApi: MilestoneSmrApi, + private milestonreAtoiApi: MilestoneAtoiApi, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + this.milestoneApi + .top(undefined, 1) + ?.pipe( + untilDestroyed(this), + map((o: Milestone[]) => { + return o[0]; + }), + ) + .subscribe(this.lastIotaMilestone$); + + this.milestoneRmsApi + .top(undefined, 1) + ?.pipe( + untilDestroyed(this), + map((o: Milestone[]) => { + return o[0]; + }), + ) + .subscribe(this.lastRmsMilestone$); + + this.milestonreAtoiApi + .top(undefined, 1) + ?.pipe( + untilDestroyed(this), + map((o: Milestone[]) => { + return o[0]; + }), + ) + .subscribe(this.lastAtoiMilestone$); + + this.milestoneSmrApi + .top(undefined, 1) + ?.pipe( + untilDestroyed(this), + map((o: Milestone[]) => { + return o[0]; + }), + ) + .subscribe(this.lastSmrMilestone$); + } + + public isSmrEnabled(): boolean { + if (environment.production) { + return PROD_NETWORKS.includes(Network.SMR); + } else { + return [...PROD_NETWORKS, ...TEST_NETWORKS].includes(Network.SMR); + } + } + + public get networkStatuses(): typeof NetworkStatus { + return NetworkStatus; + } + + public getCurrentStatus(m?: Milestone | null): NetworkStatus { + if (dayjs(m?.createdOn.toDate()).add(5, 'minute').isBefore(dayjs())) { + return NetworkStatus.RED; + } else if (dayjs(m?.createdOn.toDate()).add(1, 'minute').isBefore(dayjs())) { + return NetworkStatus.YELLOW; + } else { + return NetworkStatus.GREEN; + } + } +} diff --git a/src/app/@shell/ui/sider/network-status/network-status.module.ts b/src/app/@shell/ui/sider/network-status/network-status.module.ts new file mode 100644 index 0000000..e96409e --- /dev/null +++ b/src/app/@shell/ui/sider/network-status/network-status.module.ts @@ -0,0 +1,12 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NetworkStatusComponent } from './network-status.component'; + +@NgModule({ + declarations: [NetworkStatusComponent], + imports: [CommonModule, IconModule, NzDrawerModule], + exports: [NetworkStatusComponent], +}) +export class NetworkStatusModule {} diff --git a/src/app/@shell/ui/sider/sider.component.html b/src/app/@shell/ui/sider/sider.component.html new file mode 100644 index 0000000..8c0229d --- /dev/null +++ b/src/app/@shell/ui/sider/sider.component.html @@ -0,0 +1,54 @@ +
+
+ + + + + + +
+ +
+ +
    +
  • +
      + +
    +
  • + + + + +
+
+ +
+ +
+ + + + + + + + + +
diff --git a/src/app/@shell/ui/sider/sider.component.less b/src/app/@shell/ui/sider/sider.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/@shell/ui/sider/sider.component.ts b/src/app/@shell/ui/sider/sider.component.ts new file mode 100644 index 0000000..11b5c1b --- /dev/null +++ b/src/app/@shell/ui/sider/sider.component.ts @@ -0,0 +1,18 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy } from '@ngneat/until-destroy'; + +@UntilDestroy() +@Component({ + selector: 'wen-sider', + templateUrl: './sider.component.html', + styleUrls: ['./sider.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SiderComponent { + public homeRoute = ROUTER_UTILS.config.base.home; + + constructor(public auth: AuthService, public deviceService: DeviceService) {} +} diff --git a/src/app/@shell/ui/sider/sider.module.ts b/src/app/@shell/ui/sider/sider.module.ts new file mode 100644 index 0000000..d0107f2 --- /dev/null +++ b/src/app/@shell/ui/sider/sider.module.ts @@ -0,0 +1,34 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { LanguageChangeModule } from '@components/language-change/language-change.module'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzLayoutModule } from 'ng-zorro-antd/layout'; +import { NzMenuModule } from 'ng-zorro-antd/menu'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { IconModule } from './../../../components/icon/icon.module'; +import { MenuModule } from './menu/menu.module'; +import { NavigationModule } from './navigation/navigation.module'; +import { NetworkStatusModule } from './network-status/network-status.module'; +import { SiderComponent } from './sider.component'; +import { ThemeSwitchModule } from './theme-switch/theme-switch.module'; + +@NgModule({ + declarations: [SiderComponent], + imports: [ + CommonModule, + IconModule, + NzLayoutModule, + NzIconModule, + NzMenuModule, + NzToolTipModule, + RouterModule, + ThemeSwitchModule, + MenuModule, + LanguageChangeModule, + NetworkStatusModule, + NavigationModule, + ], + exports: [SiderComponent], +}) +export class SiderModule {} diff --git a/src/app/@shell/ui/sider/theme-switch/theme-switch.component.html b/src/app/@shell/ui/sider/theme-switch/theme-switch.component.html new file mode 100644 index 0000000..458cd20 --- /dev/null +++ b/src/app/@shell/ui/sider/theme-switch/theme-switch.component.html @@ -0,0 +1,42 @@ +
+
+ + +
+
+ + +
+
+ +
+ +
+ +
+ + +
+
diff --git a/src/app/@shell/ui/sider/theme-switch/theme-switch.component.less b/src/app/@shell/ui/sider/theme-switch/theme-switch.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/@shell/ui/sider/theme-switch/theme-switch.component.ts b/src/app/@shell/ui/sider/theme-switch/theme-switch.component.ts new file mode 100644 index 0000000..97e6ef6 --- /dev/null +++ b/src/app/@shell/ui/sider/theme-switch/theme-switch.component.ts @@ -0,0 +1,25 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { ThemeList, ThemeService } from '@core/services/theme'; +import { BehaviorSubject } from 'rxjs'; + +@Component({ + selector: 'wen-theme-switch', + templateUrl: './theme-switch.component.html', + styleUrls: ['./theme-switch.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ThemeSwitchComponent { + theme = ThemeList; + + constructor(public deviceService: DeviceService, private themeService: ThemeService) {} + + public get currentTheme$(): BehaviorSubject { + return this.themeService.theme$; + } + + onClickChangeTheme(theme: ThemeList): void { + // Switching not enabled yet + this.themeService.setTheme(theme); + } +} diff --git a/src/app/@shell/ui/sider/theme-switch/theme-switch.module.ts b/src/app/@shell/ui/sider/theme-switch/theme-switch.module.ts new file mode 100644 index 0000000..38e8201 --- /dev/null +++ b/src/app/@shell/ui/sider/theme-switch/theme-switch.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from './../../../../components/icon/icon.module'; +import { ThemeSwitchComponent } from './theme-switch.component'; + +@NgModule({ + declarations: [ThemeSwitchComponent], + imports: [CommonModule, IconModule], + exports: [ThemeSwitchComponent], +}) +export class ThemeSwitchModule {} diff --git a/src/app/app.component.html b/src/app/app.component.html new file mode 100644 index 0000000..67da3f0 --- /dev/null +++ b/src/app/app.component.html @@ -0,0 +1,3 @@ + + + diff --git a/src/app/app.component.less b/src/app/app.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts new file mode 100644 index 0000000..182f784 --- /dev/null +++ b/src/app/app.component.spec.ts @@ -0,0 +1,21 @@ +import { TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { AuthService } from '@components/auth/services/auth.service'; +import { MockProvider } from 'ng-mocks'; +import { WenComponent } from './app.component'; + +describe('WenComponent', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RouterTestingModule], + providers: [MockProvider(AuthService)], + declarations: [WenComponent], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(WenComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); +}); diff --git a/src/app/app.component.ts b/src/app/app.component.ts new file mode 100644 index 0000000..1a51711 --- /dev/null +++ b/src/app/app.component.ts @@ -0,0 +1,73 @@ +import { + AfterViewInit, + ChangeDetectionStrategy, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { AuthService } from '@components/auth/services/auth.service'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { SeoService } from '@core/services/seo'; +import { ThemeService } from '@core/services/theme'; +import { Observable } from 'rxjs'; +import { NavigationService } from './@core/services/navigation/navigation.service'; + +@Component({ + selector: 'wen-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.less'], + // changeDetection: ChangeDetectionStrategy.OnPush + // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection + changeDetection: ChangeDetectionStrategy.Default, +}) +export class WenComponent implements OnInit, AfterViewInit, OnDestroy { + public isLoggedIn$!: Observable; + private observer?: MutationObserver; + + constructor( + private themeService: ThemeService, + private cacheService: CacheService, + private authService: AuthService, + private navigation: NavigationService, + private deviceService: DeviceService, + private seo: SeoService, + ) {} + + public ngOnInit(): void { + this.isLoggedIn$ = this.authService.isLoggedIn$; + this.runGlobalServices(); + this.navigation.watchPathHistory(); + this.seo.setTags(); + this.cacheService.listenToUsdPrices(); + } + + public ngAfterViewInit(): void { + this.setOverflowForModals(); + } + + private runGlobalServices(): void { + this.themeService.init(); + } + + private setOverflowForModals(): void { + if (this.deviceService.isBrowser) { + this.observer = new MutationObserver(() => { + const htmlElement = document.querySelector('html'); + const modalMask = document.querySelector('.ant-modal-mask'); + htmlElement!.style.overflowY = modalMask ? 'hidden' : 'auto'; + }); + this.observer.observe(document.querySelector('.cdk-overlay-container') as Node, { + attributes: true, + childList: true, + subtree: true, + }); + } + } + + public ngOnDestroy(): void { + if (this.observer) { + this.observer.disconnect(); + } + } +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts new file mode 100644 index 0000000..1a207bf --- /dev/null +++ b/src/app/app.module.ts @@ -0,0 +1,58 @@ +import { HttpClientModule } from '@angular/common/http'; +// import de from '@angular/common/locales/de'; +// import en from '@angular/common/locales/en'; +// import es from '@angular/common/locales/es'; +// import fr from '@angular/common/locales/fr'; +// import it from '@angular/common/locales/it'; +// import ko from '@angular/common/locales/ko'; +// import nl from '@angular/common/locales/nl'; +// import zh from '@angular/common/locales/zh'; +import { LOCALE_ID, NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { IconDefinition } from '@ant-design/icons-angular'; +import { Languages } from '@core/utils/language.util'; +import { WebShellModule } from '@shell/ft/web-shell.module'; +/* eslint-disable */ +import { NZ_I18N } from 'ng-zorro-antd/i18n'; +/* eslint-enable */ +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { CoreModule } from './@core/core.module'; +import { WenComponent } from './app.component'; +// Register languages. +// registerLocaleData(en); +// registerLocaleData(de); +// registerLocaleData(nl); +// registerLocaleData(fr); +// registerLocaleData(ko); +// registerLocaleData(es); +// registerLocaleData(it); +// registerLocaleData(zh); + +const icons: IconDefinition[] = []; +export const imports: any[] = [ + CoreModule, + WebShellModule, + HttpClientModule, + BrowserAnimationsModule, + NzIconModule.forRoot(icons), +]; + +@NgModule({ + declarations: [WenComponent], + imports: [BrowserModule.withServerTransition({ appId: 'serverApp' }), ...imports], + bootstrap: [WenComponent], + providers: [ + { + /* eslint-disable */ + provide: NZ_I18N, + useFactory: (localId: string) => { + /** keep the same with angular.json/i18n/locales configuration **/ + return Languages[localId]?.ngZorro || Languages.en.ngZorro; + /* eslint-enable */ + }, + deps: [LOCALE_ID], + }, + ], +}) +export class AppModule {} diff --git a/src/app/app.server.module.ts b/src/app/app.server.module.ts new file mode 100644 index 0000000..c0747e3 --- /dev/null +++ b/src/app/app.server.module.ts @@ -0,0 +1,10 @@ +import { NgModule } from '@angular/core'; +import { ServerModule } from '@angular/platform-server'; +import { WenComponent } from './app.component'; +import { AppModule } from './app.module'; + +@NgModule({ + imports: [AppModule, ServerModule], + bootstrap: [WenComponent], +}) +export class AppServerModule {} diff --git a/src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.html b/src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.html new file mode 100644 index 0000000..35ffccc --- /dev/null +++ b/src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.html @@ -0,0 +1,124 @@ +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + + + +
+ + +
+ + + {{ (cache.getSpace(item.label) | async)?.name }} + + + {{ (cache.getToken(item.label) | async)?.name }} + + + {{ (cache.getCollection(item.label) | async)?.name }} + + + {{ item.label }} + +
+ ({{ getCount(item) }}) +
+ +
+
diff --git a/src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.less b/src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts b/src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts new file mode 100644 index 0000000..41aa47e --- /dev/null +++ b/src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts @@ -0,0 +1,178 @@ +import { + ChangeDetectorRef, + Component, + EventEmitter, + forwardRef, + Inject, + Input, + OnInit, + Optional, + Output, +} from '@angular/core'; +import { noop, parseNumberInput } from '@components/algolia/util'; +import { CacheService } from '@core/services/cache/cache.service'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { Access } from '@soonaverse/interfaces'; +import { NgAisIndex, NgAisInstantSearch, TypedBaseWidget } from 'angular-instantsearch'; +import { connectRefinementList } from 'instantsearch.js/es/connectors'; +import { + RefinementListConnectorParams, + RefinementListItem, + RefinementListRenderState, + RefinementListWidgetDescription, +} from 'instantsearch.js/es/connectors/refinement-list/connectRefinementList'; +import { Subject } from 'rxjs'; + +export enum AlgoliaCheckboxFilterType { + DEFAULT = 'Default', + SALE = 'Sale', + SPACE = 'Space', + TOKEN = 'Token', + COLLECTION = 'Collection', +} + +@UntilDestroy() +// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection +@Component({ + selector: 'wen-algolia-checkbox', + templateUrl: './algolia-checkbox.component.html', + styleUrls: ['./algolia-checkbox.component.less'], +}) +export class AlgoliaCheckboxComponent + extends TypedBaseWidget + implements OnInit +{ + // rendering options + @Input() public showMoreLabel = $localize`Show more`; + @Input() public showLessLabel = $localize`Show less`; + @Input() public searchable?: boolean; + @Input() public searchPlaceholder = $localize`Search here...`; + @Input() public showSearch = false; + @Input() public reset$ = new Subject(); + + // instance options + @Input() public attribute!: RefinementListConnectorParams['attribute']; + @Input() public operator: RefinementListConnectorParams['operator']; + @Input() public limit: RefinementListConnectorParams['limit']; + @Input() public showMore: RefinementListConnectorParams['showMore']; + @Input() public showMoreLimit: RefinementListConnectorParams['showMoreLimit']; + @Input() public sortBy: RefinementListConnectorParams['sortBy']; + @Input() + public transformItems?: RefinementListConnectorParams['transformItems']; + @Input() public showIcon = true; + @Input() public filterType: AlgoliaCheckboxFilterType = AlgoliaCheckboxFilterType.DEFAULT; + + @Input() + set value(v: string[] | undefined) { + this._value = v; + this.value?.forEach((value) => { + const item = this.initialItemsList + .filter((item) => !item.isRefined) + .find((item) => item.value === value); + if (item) { + this.refine(undefined, item); + } + this.cd.markForCheck(); + }); + } + + get value(): string[] | undefined { + return this._value; + } + + @Output() wenChange = new EventEmitter(); + public initialItemsList: RefinementListItem[] = []; + public initialValue = ''; + + private _value?: string[]; + + public state: RefinementListRenderState = { + canRefine: false, + canToggleShowMore: false, + createURL: () => '', + isShowingMore: false, + items: [], + refine: noop, + toggleShowMore: noop, + searchForItems: noop, + isFromSearch: false, + hasExhaustiveItems: false, + sendEvent: noop, + }; + + get isHidden() { + return this.state.items.length === 0 && this.autoHideContainer; + } + + constructor( + @Inject(forwardRef(() => NgAisIndex)) + // eslint-disable-next-line new-cap + @Optional() + public parentIndex: NgAisIndex, + @Inject(forwardRef(() => NgAisInstantSearch)) + public instantSearchInstance: NgAisInstantSearch, + public previewImageService: PreviewImageService, + public cache: CacheService, + private cd: ChangeDetectorRef, + ) { + super('RefinementList'); + } + + public ngOnInit() { + this.createWidget(connectRefinementList, { + showMore: this.showMore, + limit: parseNumberInput(this.limit), + showMoreLimit: parseNumberInput(this.showMoreLimit), + attribute: this.attribute, + operator: this.operator, + sortBy: this.sortBy, + escapeFacetValues: true, + transformItems: this.transformItems, + }); + + super.ngOnInit(); + + this.reset$.pipe(untilDestroyed(this)).subscribe(() => { + if (this.initialItemsList.length === 0) { + this.initialItemsList = this.state.items; + } + this.initialItemsList.forEach((item) => (item.isRefined = false)); + this.wenChange.emit([]); + this.cd.markForCheck(); + }); + } + + public get algoliaCheckboxFilterTypes(): typeof AlgoliaCheckboxFilterType { + return AlgoliaCheckboxFilterType; + } + + public get collectionAccesses(): typeof Access { + return Access; + } + + public refine(event: MouseEvent | undefined, item: RefinementListItem) { + if (event) { + event.preventDefault(); + event.stopPropagation(); + } + + if (!this.initialItemsList.length) { + this.initialItemsList = this.state.items; + } + if (this.state.canRefine) { + // update UI directly, it will update the checkbox state + item.isRefined = !item.isRefined; + + // refine through Algolia API + this.state.refine(item.value); + this.wenChange.emit( + this.initialItemsList.filter((item) => item.isRefined).map((item) => item.value), + ); + } + } + + public getCount(item: RefinementListItem): number { + return this.state.items.find((r) => r.value === item.value)?.count || 0; + } +} diff --git a/src/app/components/algolia/algolia-clear/algolia-clear.component.html b/src/app/components/algolia/algolia-clear/algolia-clear.component.html new file mode 100644 index 0000000..6c4c4fa --- /dev/null +++ b/src/app/components/algolia/algolia-clear/algolia-clear.component.html @@ -0,0 +1,7 @@ + diff --git a/src/app/components/algolia/algolia-clear/algolia-clear.component.less b/src/app/components/algolia/algolia-clear/algolia-clear.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/algolia/algolia-clear/algolia-clear.component.ts b/src/app/components/algolia/algolia-clear/algolia-clear.component.ts new file mode 100644 index 0000000..9c321f0 --- /dev/null +++ b/src/app/components/algolia/algolia-clear/algolia-clear.component.ts @@ -0,0 +1,51 @@ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + forwardRef, + Inject, + OnInit, + Optional, + Output, +} from '@angular/core'; +import { NgAisIndex, NgAisInstantSearch, TypedBaseWidget } from 'angular-instantsearch'; +import connectClearRefinements, { + ClearRefinementsConnectorParams, + ClearRefinementsWidgetDescription, +} from 'instantsearch.js/es/connectors/clear-refinements/connectClearRefinements'; + +@Component({ + selector: 'wen-algolia-clear', + templateUrl: './algolia-clear.component.html', + styleUrls: ['./algolia-clear.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AlgoliaClearComponent + extends TypedBaseWidget + implements OnInit +{ + @Output() wenOnClear = new EventEmitter(); + + public state?: ClearRefinementsWidgetDescription['renderState']; + + constructor( + @Inject(forwardRef(() => NgAisIndex)) + // eslint-disable-next-line new-cap + @Optional() + public parentIndex: NgAisIndex, + @Inject(forwardRef(() => NgAisInstantSearch)) + public instantSearchInstance: NgAisInstantSearch, + ) { + super('ClearRefinements'); + } + + public ngOnInit(): void { + this.createWidget(connectClearRefinements, {}); + super.ngOnInit(); + } + + public clear(): void { + this.state?.refine(); + this.wenOnClear.emit(); + } +} diff --git a/src/app/components/algolia/algolia-hidden-date/algolia-hidden-date-past.component.html b/src/app/components/algolia/algolia-hidden-date/algolia-hidden-date-past.component.html new file mode 100644 index 0000000..89f85d3 --- /dev/null +++ b/src/app/components/algolia/algolia-hidden-date/algolia-hidden-date-past.component.html @@ -0,0 +1,2 @@ + +> diff --git a/src/app/components/algolia/algolia-hidden-date/algolia-hidden-date-past.component.less b/src/app/components/algolia/algolia-hidden-date/algolia-hidden-date-past.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/components/algolia/algolia-hidden-date/algolia-hidden-date-past.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/components/algolia/algolia-hidden-date/algolia-hidden-date-past.component.ts b/src/app/components/algolia/algolia-hidden-date/algolia-hidden-date-past.component.ts new file mode 100644 index 0000000..d6db86e --- /dev/null +++ b/src/app/components/algolia/algolia-hidden-date/algolia-hidden-date-past.component.ts @@ -0,0 +1,42 @@ +import { Component, forwardRef, Inject, Input, OnInit, Optional } from '@angular/core'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { NgAisIndex, NgAisInstantSearch, TypedBaseWidget } from 'angular-instantsearch'; +import connectRange, { + RangeConnectorParams, + RangeWidgetDescription, +} from 'instantsearch.js/es/connectors/range/connectRange'; + +@UntilDestroy() +// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection +@Component({ + selector: 'wen-algolia-hidden-date-past', + templateUrl: './algolia-hidden-date-past.component.html', + styleUrls: ['./algolia-hidden-date-past.component.less'], +}) +export class AlgoliaHiddenDatePastComponent + extends TypedBaseWidget + implements OnInit +{ + @Input() attribute = 'availableFrom'; + public state?: RangeWidgetDescription['renderState']; // Rendering options + constructor( + @Inject(forwardRef(() => NgAisIndex)) + // eslint-disable-next-line new-cap + @Optional() + public parentIndex: NgAisIndex, + @Inject(forwardRef(() => NgAisInstantSearch)) + public instantSearchInstance: NgAisInstantSearch, + ) { + super('RangeSlider'); + } + + public ngOnInit(): void { + this.createWidget(connectRange, { + // instance options + attribute: this.attribute, + }); + + super.ngOnInit(); + this.state?.refine([0, Date.now()] as [number, number]); + } +} diff --git a/src/app/components/algolia/algolia-radio/algolia-radio.component.html b/src/app/components/algolia/algolia-radio/algolia-radio.component.html new file mode 100644 index 0000000..bb9c6ba --- /dev/null +++ b/src/app/components/algolia/algolia-radio/algolia-radio.component.html @@ -0,0 +1,19 @@ + + +
+
+ {{ item?.label }} +
+
+ ({{ item.count }}) +
+
+
+
diff --git a/src/app/components/algolia/algolia-radio/algolia-radio.component.less b/src/app/components/algolia/algolia-radio/algolia-radio.component.less new file mode 100644 index 0000000..3bd89b7 --- /dev/null +++ b/src/app/components/algolia/algolia-radio/algolia-radio.component.less @@ -0,0 +1,7 @@ +.wen-radio-group { + display: grid; + input { + width: 100px; + margin-left: 10px; + } +} diff --git a/src/app/components/algolia/algolia-radio/algolia-radio.component.ts b/src/app/components/algolia/algolia-radio/algolia-radio.component.ts new file mode 100644 index 0000000..cb0d716 --- /dev/null +++ b/src/app/components/algolia/algolia-radio/algolia-radio.component.ts @@ -0,0 +1,103 @@ +import { Component, forwardRef, Inject, Input, OnInit, Optional } from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { noop, parseNumberInput } from '@components/algolia/util'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { NgAisIndex, NgAisInstantSearch, TypedBaseWidget } from 'angular-instantsearch'; +import { connectRefinementList } from 'instantsearch.js/es/connectors'; +import { + RefinementListConnectorParams, + RefinementListItem, + RefinementListRenderState, + RefinementListWidgetDescription, +} from 'instantsearch.js/es/connectors/refinement-list/connectRefinementList'; +import { Subject } from 'rxjs'; + +@UntilDestroy() +// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection +@Component({ + selector: 'wen-algolia-radio', + templateUrl: './algolia-radio.component.html', + styleUrls: ['./algolia-radio.component.less'], +}) +export class AlgoliaRadioComponent + extends TypedBaseWidget + implements OnInit +{ + // rendering options + @Input() public showMoreLabel = $localize`Show more`; + @Input() public showLessLabel = $localize`Show less`; + @Input() public searchable?: boolean; + @Input() public searchPlaceholder = $localize`Search here...`; + @Input() public reset$ = new Subject(); + + // instance options + @Input() public attribute!: RefinementListConnectorParams['attribute']; + @Input() public operator: RefinementListConnectorParams['operator']; + @Input() public limit: RefinementListConnectorParams['limit']; + @Input() public showMore: RefinementListConnectorParams['showMore']; + @Input() public showMoreLimit: RefinementListConnectorParams['showMoreLimit']; + @Input() public sortBy: RefinementListConnectorParams['sortBy']; + @Input() + public transformItems?: RefinementListConnectorParams['transformItems']; + @Input() public showIcon = true; + public initialItemsList: RefinementListItem[] = []; + + public state: RefinementListRenderState = { + canRefine: false, + canToggleShowMore: false, + createURL: () => '', + isShowingMore: false, + items: [], + refine: noop, + toggleShowMore: noop, + searchForItems: noop, + isFromSearch: false, + hasExhaustiveItems: false, + sendEvent: noop, + }; + + public get isHidden() { + return this.state.items.length === 0 && this.autoHideContainer; + } + + public formControl = new FormControl(); + + constructor( + @Inject(forwardRef(() => NgAisIndex)) + // eslint-disable-next-line new-cap + @Optional() + public parentIndex: NgAisIndex, + @Inject(forwardRef(() => NgAisInstantSearch)) + public instantSearchInstance: NgAisInstantSearch, + ) { + super('RefinementList'); + } + + public ngOnInit() { + this.createWidget(connectRefinementList, { + showMore: this.showMore, + limit: parseNumberInput(this.limit), + showMoreLimit: parseNumberInput(this.showMoreLimit), + attribute: this.attribute, + operator: this.operator, + escapeFacetValues: true, + sortBy: this.sortBy, + transformItems: this.transformItems, + }); + + super.ngOnInit(); + + this.formControl.valueChanges.pipe(untilDestroyed(this)).subscribe((value) => { + if (!this.initialItemsList.length) { + this.initialItemsList = this.state.items; + } + this.state.items + .filter((item) => item.isRefined) + .forEach((item) => { + item.isRefined = false; + this.state.refine(item.value); + }); + this.state.refine(value); + }); + } +} diff --git a/src/app/components/algolia/algolia-range/algolia-range.component.html b/src/app/components/algolia/algolia-range/algolia-range.component.html new file mode 100644 index 0000000..0b80105 --- /dev/null +++ b/src/app/components/algolia/algolia-range/algolia-range.component.html @@ -0,0 +1,13 @@ +
+ + +
+ + diff --git a/src/app/components/algolia/algolia-range/algolia-range.component.less b/src/app/components/algolia/algolia-range/algolia-range.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/components/algolia/algolia-range/algolia-range.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/components/algolia/algolia-range/algolia-range.component.ts b/src/app/components/algolia/algolia-range/algolia-range.component.ts new file mode 100644 index 0000000..cd520d4 --- /dev/null +++ b/src/app/components/algolia/algolia-range/algolia-range.component.ts @@ -0,0 +1,124 @@ +import { + Component, + EventEmitter, + forwardRef, + Inject, + Input, + OnInit, + Optional, + Output, +} from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { NgAisIndex, NgAisInstantSearch, TypedBaseWidget } from 'angular-instantsearch'; +import connectRange, { + RangeConnectorParams, + RangeWidgetDescription, +} from 'instantsearch.js/es/connectors/range/connectRange'; +import { Subject } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; + +@UntilDestroy() +// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection +@Component({ + selector: 'wen-algolia-range', + templateUrl: './algolia-range.component.html', + styleUrls: ['./algolia-range.component.less'], +}) +export class AlgoliaRangeComponent + extends TypedBaseWidget + implements OnInit +{ + @Input() reset$ = new Subject(); + @Input() attribute = 'price'; + + @Input() + set value(v: string | undefined) { + this._value = v; + } + + get value(): string | undefined { + return this._value; + } + + @Output() wenChange = new EventEmitter(); + + public state?: RangeWidgetDescription['renderState']; // Rendering options + public formControl = new FormControl([this.state?.range.min, this.state?.range.max]); + public minControl = new FormControl(this.state?.range?.min); + public maxControl = new FormControl(this.state?.range?.max); + private _value?: string; + + constructor( + @Inject(forwardRef(() => NgAisIndex)) + // eslint-disable-next-line new-cap + @Optional() + public parentIndex: NgAisIndex, + @Inject(forwardRef(() => NgAisInstantSearch)) + public instantSearchInstance: NgAisInstantSearch, + ) { + super('RangeSlider'); + } + + public ngOnInit(): void { + this.createWidget(connectRange, { + // instance options + attribute: this.attribute, + }); + super.ngOnInit(); + + // Disable control. + this.minControl.disable(); + this.maxControl.disable(); + + // TODO: this needs to be refactored and written some other way + const interval = setInterval(() => { + if (this.state?.range?.max) { + this.minControl.setValue((this.state?.range?.min || 0) / 1000 / 1000); + this.maxControl.setValue((this.state?.range?.max || 0) / 1000 / 1000); + clearInterval(interval); + } + }, 100); + + this.formControl.valueChanges + .pipe(untilDestroyed(this)) + .subscribe((val: (number | undefined)[] | null) => { + if (!val || val.length < 2) return; + this.minControl.setValue((val[0] || 0) / 1000 / 1000); + this.maxControl.setValue((val[1] || 0) / 1000 / 1000); + this.state?.refine(val as [number, number]); + this.wenChange.emit(`${val[0]}:${val[1]}`); + }); + + this.minControl.valueChanges + .pipe( + map((val: number | null | undefined) => String(val || 0)), + filter( + (val: string) => + Number(val) * 1000 * 1000 !== this.formControl?.value?.[0] && !isNaN(Number(val)), + ), + untilDestroyed(this), + ) + .subscribe((val: string) => { + this.formControl.setValue([Number(val) * 1000 * 1000, this.formControl?.value?.[1]]); + }); + + this.maxControl.valueChanges + .pipe( + map((val: number | null | undefined) => String(val || 0)), + filter( + (val: string) => + Number(val) * 1000 * 1000 !== this.formControl?.value?.[1] && !isNaN(Number(val)), + ), + untilDestroyed(this), + ) + .subscribe((val: string) => { + this.formControl.setValue([this.formControl?.value?.[0], Number(val) * 1000 * 1000]); + }); + + this.reset$.pipe(untilDestroyed(this)).subscribe(() => { + this.minControl.setValue((this.state?.range?.min || 0) / 1000 / 1000); + this.maxControl.setValue((this.state?.range?.max || 0) / 1000 / 1000); + }); + } +} diff --git a/src/app/components/algolia/algolia-toggle/algolia-toggle.component.html b/src/app/components/algolia/algolia-toggle/algolia-toggle.component.html new file mode 100644 index 0000000..b4cbf4e --- /dev/null +++ b/src/app/components/algolia/algolia-toggle/algolia-toggle.component.html @@ -0,0 +1,15 @@ +
+
+ {{ label }} +
+ +
+ ({{ state?.value?.count }}) +
+
diff --git a/src/app/components/algolia/algolia-toggle/algolia-toggle.component.less b/src/app/components/algolia/algolia-toggle/algolia-toggle.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/algolia/algolia-toggle/algolia-toggle.component.ts b/src/app/components/algolia/algolia-toggle/algolia-toggle.component.ts new file mode 100644 index 0000000..44161aa --- /dev/null +++ b/src/app/components/algolia/algolia-toggle/algolia-toggle.component.ts @@ -0,0 +1,63 @@ +import { Component, forwardRef, Inject, Input, OnInit, Optional } from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { NgAisIndex, NgAisInstantSearch, TypedBaseWidget } from 'angular-instantsearch'; +import connectToggleRefinement, { + ToggleRefinementConnectorParams, + ToggleRefinementWidgetDescription, +} from 'instantsearch.js/es/connectors/toggle-refinement/connectToggleRefinement'; +import { Subject } from 'rxjs'; + +@UntilDestroy() +// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection +@Component({ + selector: 'wen-algolia-toggle', + templateUrl: './algolia-toggle.component.html', + styleUrls: ['./algolia-toggle.component.less'], +}) +export class AlgoliaToggleComponent + extends TypedBaseWidget + implements OnInit +{ + @Input() label = ''; + + @Input() + set on(value: boolean) { + this._on = value || false; + this.formControl.setValue(this.on); + this.state?.refine({ isRefined: !this.on }); + } + + get on(): boolean { + return this._on; + } + + @Input() reset$ = new Subject(); + @Input() public attribute!: ToggleRefinementConnectorParams['attribute']; + + public state?: ToggleRefinementWidgetDescription['renderState']; // Rendering options + public formControl: FormControl = new FormControl(this.on); + private _on = false; + + constructor( + @Inject(forwardRef(() => NgAisIndex)) + // eslint-disable-next-line new-cap + @Optional() + public parentIndex: NgAisIndex, + @Inject(forwardRef(() => NgAisInstantSearch)) + public instantSearchInstance: NgAisInstantSearch, + ) { + super('ToggleRefinement'); + } + + public ngOnInit(): void { + this.createWidget(connectToggleRefinement, { + attribute: this.attribute, + }); + super.ngOnInit(); + + this.formControl.valueChanges.pipe(untilDestroyed(this)).subscribe((val: boolean) => { + this.on = val; + }); + } +} diff --git a/src/app/components/algolia/algolia.module.ts b/src/app/components/algolia/algolia.module.ts new file mode 100644 index 0000000..a867798 --- /dev/null +++ b/src/app/components/algolia/algolia.module.ts @@ -0,0 +1,101 @@ +import { CommonModule } from '@angular/common'; +import { HttpClientModule } from '@angular/common/http'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { RefinementListComponent } from '@components/algolia/refinement/refinement.component'; +import { SearchBoxComponent } from '@components/algolia/search/search.component'; +import { SortByComponent } from '@components/algolia/sort/sort.component'; +import { VisibleDirective } from '@components/algolia/visible.directive'; +import { CollectionCardModule } from '@components/collection/components/collection-card/collection-card.module'; +import { DropdownTabsModule } from '@components/dropdown-tabs/dropdown-tabs.module'; +import { IconModule } from '@components/icon/icon.module'; +import { MobileSearchModule } from '@components/mobile-search/mobile-search.module'; +import { NftCardModule } from '@components/nft/components/nft-card/nft-card.module'; +import { RadioModule } from '@components/radio/radio.module'; +import { SelectSpaceModule } from '@components/space/components/select-space/select-space.module'; +import { TabsModule } from '@components/tabs/tabs.module'; +import { TokenRowModule } from '@components/token/components/token-row/token-row.module'; +import { NgAisModule } from 'angular-instantsearch'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzCollapseModule } from 'ng-zorro-antd/collapse'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzNotificationModule } from 'ng-zorro-antd/notification'; +import { NzRadioModule } from 'ng-zorro-antd/radio'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { NzSliderModule } from 'ng-zorro-antd/slider'; +import { NzSwitchModule } from 'ng-zorro-antd/switch'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; +import { AlgoliaCheckboxComponent } from './algolia-checkbox/algolia-checkbox.component'; +import { AlgoliaClearComponent } from './algolia-clear/algolia-clear.component'; +import { AlgoliaHiddenDatePastComponent } from './algolia-hidden-date/algolia-hidden-date-past.component'; +import { AlgoliaRadioComponent } from './algolia-radio/algolia-radio.component'; +import { AlgoliaRangeComponent } from './algolia-range/algolia-range.component'; +import { AlgoliaToggleComponent } from './algolia-toggle/algolia-toggle.component'; +import { AlgoliaService } from './services/algolia.service'; + +@NgModule({ + imports: [ + HttpClientModule, + NzNotificationModule, + CommonModule, + NzCardModule, + NzInputModule, + DropdownTabsModule, + MobileSearchModule, + TabsModule, + FormsModule, + ReactiveFormsModule, + NzIconModule, + NzTagModule, + NzSelectModule, + IconModule, + SelectSpaceModule, + CollectionCardModule, + InfiniteScrollModule, + NzSkeletonModule, + NftCardModule, + NgAisModule, + NzCollapseModule, + TokenRowModule, + NzRadioModule, + RadioModule, + NzAvatarModule, + NzCheckboxModule, + NzSliderModule, + NzSwitchModule, + NgAisModule.forRoot(), + ], + declarations: [ + SearchBoxComponent, + SortByComponent, + RefinementListComponent, + VisibleDirective, + AlgoliaHiddenDatePastComponent, + AlgoliaRadioComponent, + AlgoliaCheckboxComponent, + AlgoliaRangeComponent, + AlgoliaClearComponent, + AlgoliaToggleComponent, + ], + providers: [AlgoliaService], + exports: [ + SearchBoxComponent, + SortByComponent, + RefinementListComponent, + NgAisModule, + NzCollapseModule, + VisibleDirective, + AlgoliaRadioComponent, + AlgoliaCheckboxComponent, + AlgoliaRangeComponent, + AlgoliaClearComponent, + AlgoliaToggleComponent, + AlgoliaHiddenDatePastComponent, + ], +}) +export class AlgoliaModule {} diff --git a/src/app/components/algolia/algolia.options.ts b/src/app/components/algolia/algolia.options.ts new file mode 100644 index 0000000..810cd18 --- /dev/null +++ b/src/app/components/algolia/algolia.options.ts @@ -0,0 +1,15 @@ +export const defaultPaginationItems = [ + { + label: '3 hits per page', + value: 3, + }, + { + label: '10 hits per page', + value: 10, + default: true, + }, + { + label: '64 hits per page', + value: 64, + }, +]; diff --git a/src/app/components/algolia/refinement/refinement.component.html b/src/app/components/algolia/refinement/refinement.component.html new file mode 100644 index 0000000..4fbce40 --- /dev/null +++ b/src/app/components/algolia/refinement/refinement.component.html @@ -0,0 +1,34 @@ +
+
    +
  • + +
  • +
+ + +
diff --git a/src/app/components/algolia/refinement/refinement.component.less b/src/app/components/algolia/refinement/refinement.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/algolia/refinement/refinement.component.ts b/src/app/components/algolia/refinement/refinement.component.ts new file mode 100644 index 0000000..0e8fefd --- /dev/null +++ b/src/app/components/algolia/refinement/refinement.component.ts @@ -0,0 +1,107 @@ +import { + ChangeDetectionStrategy, + Component, + forwardRef, + Inject, + Input, + OnInit, + Optional, +} from '@angular/core'; +import { noop, parseNumberInput } from '@components/algolia/util'; +import { NgAisIndex, NgAisInstantSearch, TypedBaseWidget } from 'angular-instantsearch'; +import { connectRefinementList } from 'instantsearch.js/es/connectors'; +import { + RefinementListConnectorParams, + RefinementListItem, + RefinementListRenderState, + RefinementListWidgetDescription, +} from 'instantsearch.js/es/connectors/refinement-list/connectRefinementList'; + +export type RefinementMappings = { [v: string]: string }; + +@Component({ + selector: 'wen-refinement-list', + templateUrl: './refinement.component.html', + styleUrls: ['./refinement.component.less'], + // changeDetection: ChangeDetectionStrategy.OnPush + // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection + changeDetection: ChangeDetectionStrategy.Default, +}) +export class RefinementListComponent + extends TypedBaseWidget + implements OnInit +{ + // rendering options + @Input() public showMoreLabel = 'Show more'; + @Input() public showLessLabel = 'Show less'; + @Input() public searchable?: boolean; + @Input() public searchPlaceholder = 'Search here...'; + + // instance options + @Input() public attribute!: RefinementListConnectorParams['attribute']; + @Input() public operator: RefinementListConnectorParams['operator']; + @Input() public limit: RefinementListConnectorParams['limit']; + @Input() public showMore: RefinementListConnectorParams['showMore']; + @Input() public showMoreLimit: RefinementListConnectorParams['showMoreLimit']; + @Input() public sortBy: RefinementListConnectorParams['sortBy']; + @Input() + public transformItems?: RefinementListConnectorParams['transformItems']; + @Input() public showIcon = true; + + public state: RefinementListRenderState = { + canRefine: false, + canToggleShowMore: false, + createURL: () => '', + isShowingMore: false, + items: [], + refine: noop, + toggleShowMore: noop, + searchForItems: noop, + isFromSearch: false, + hasExhaustiveItems: false, + sendEvent: noop, + }; + + get isHidden() { + return this.state.items.length === 0 && this.autoHideContainer; + } + + constructor( + @Inject(forwardRef(() => NgAisIndex)) + // eslint-disable-next-line new-cap + @Optional() + public parentIndex: NgAisIndex, + @Inject(forwardRef(() => NgAisInstantSearch)) + public instantSearchInstance: NgAisInstantSearch, + ) { + super('RefinementList'); + } + + public ngOnInit() { + this.createWidget(connectRefinementList, { + showMore: this.showMore, + limit: parseNumberInput(this.limit), + showMoreLimit: parseNumberInput(this.showMoreLimit), + attribute: this.attribute, + operator: this.operator, + sortBy: this.sortBy, + escapeFacetValues: true, + transformItems: this.transformItems, + }); + + super.ngOnInit(); + } + + public refine(event: MouseEvent, item: RefinementListItem) { + event.preventDefault(); + event.stopPropagation(); + + if (this.state.canRefine) { + // update UI directly, it will update the checkbox state + item.isRefined = !item.isRefined; + + // refine through Algolia API + this.state.refine(item.value); + } + } +} diff --git a/src/app/components/algolia/search/search.component.html b/src/app/components/algolia/search/search.component.html new file mode 100644 index 0000000..2e6ac49 --- /dev/null +++ b/src/app/components/algolia/search/search.component.html @@ -0,0 +1,45 @@ +
+ + + + + + + + + + + + + + +
diff --git a/src/app/components/algolia/search/search.component.less b/src/app/components/algolia/search/search.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/algolia/search/search.component.ts b/src/app/components/algolia/search/search.component.ts new file mode 100644 index 0000000..55fcba0 --- /dev/null +++ b/src/app/components/algolia/search/search.component.ts @@ -0,0 +1,111 @@ +import { + ChangeDetectionStrategy, + Component, + forwardRef, + Inject, + Input, + OnInit, + Optional, +} from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { NavigationEnd, Router } from '@angular/router'; +import { noop } from '@components/algolia/util'; +import { TabSection } from '@components/tabs/tabs.component'; +import { DeviceService } from '@core/services/device'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { FilterService } from '@pages/market/services/filter.service'; +import { GLOBAL_DEBOUNCE_TIME } from '@soonaverse/interfaces'; +import { NgAisIndex, NgAisInstantSearch, TypedBaseWidget } from 'angular-instantsearch'; +import connectSearchBox, { + SearchBoxConnectorParams, + SearchBoxWidgetDescription, +} from 'instantsearch.js/es/connectors/search-box/connectSearchBox'; +import { NzSizeLDSType } from 'ng-zorro-antd/core/types'; +import { debounceTime, Subject } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-search-box', + templateUrl: './search.component.html', + styleUrls: ['./search.component.less'], + // changeDetection: ChangeDetectionStrategy.OnPush + // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection + changeDetection: ChangeDetectionStrategy.Default, +}) +export class SearchBoxComponent + extends TypedBaseWidget + implements OnInit +{ + @Input() sections?: TabSection[] = []; + @Input() reset$? = new Subject(); + @Input() searchSize: NzSizeLDSType = 'large'; + + public state: SearchBoxWidgetDescription['renderState'] = { + clear: noop, + isSearchStalled: false, + query: '', + refine: noop, + }; + public filterControl: FormControl = new FormControl(undefined); + public selectedSection?: TabSection; + public isSearchInputFocused = false; + + constructor( + @Inject(forwardRef(() => NgAisIndex)) + // eslint-disable-next-line new-cap + @Optional() + public parentIndex: NgAisIndex, + @Inject(forwardRef(() => NgAisInstantSearch)) + public instantSearchInstance: NgAisInstantSearch, + public deviceService: DeviceService, + private router: Router, + private filter: FilterService, + ) { + super('SearchBox'); + } + + ngOnInit() { + this.createWidget(connectSearchBox, { + // instance options + }); + + this.filterControl.valueChanges + .pipe(debounceTime(GLOBAL_DEBOUNCE_TIME), untilDestroyed(this)) + .subscribe((val) => { + this.state.refine(val); + this.filter.search$.next(val); + }); + + this.setSelectedSection(); + + this.router.events.pipe(untilDestroyed(this)).subscribe((obj) => { + if (obj instanceof NavigationEnd) { + this.setSelectedSection(); + } + }); + + if (this.reset$) { + this.reset$.pipe(untilDestroyed(this)).subscribe(() => { + this.filterControl.setValue(undefined); + }); + } + + super.ngOnInit(); + + const currentFilterText = this.filter.search$.value; + if (currentFilterText) { + this.filterControl.setValue(currentFilterText); + this.state.refine(currentFilterText); + } + } + + private setSelectedSection() { + if (this.sections?.length) { + this.selectedSection = this.sections.find((r: TabSection) => + (this.router.url || '').includes( + (r.route instanceof Array ? r.route : [r.route]).join('/').toLowerCase().substring(3), + ), + ); + } + } +} diff --git a/src/app/components/algolia/services/algolia.service.ts b/src/app/components/algolia/services/algolia.service.ts new file mode 100644 index 0000000..8f1c0bf --- /dev/null +++ b/src/app/components/algolia/services/algolia.service.ts @@ -0,0 +1,81 @@ +import { createNullCache } from '@algolia/cache-common'; +import { Injectable } from '@angular/core'; +import { RefinementMappings } from '@components/algolia/refinement/refinement.component'; +import { enumToArray } from '@core/utils/manipulations.utils'; +import { environment } from '@env/environment'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { Access, Categories, NftAvailable } from '@soonaverse/interfaces'; +import algoliasearch from 'algoliasearch/lite'; + +const accessMapping: RefinementMappings = {}; + +@UntilDestroy() +@Injectable({ + providedIn: 'root', +}) +export class AlgoliaService { + public readonly searchClient = algoliasearch(environment.algolia.appId, environment.algolia.key, { + responsesCache: createNullCache(), + // requestsCache: createNullCache(), + }); + + constructor() { + Object.values(Access).forEach((value, index) => { + if (typeof value === 'string') { + accessMapping['' + index] = value; + } + }); + } + + public convertToAccessName(algoliaItems: any[]) { + return algoliaItems.map((algolia) => { + let label = $localize`Open`; + if (Number(algolia.value) === Access.GUARDIANS_ONLY) { + label = $localize`Guardians of Space Only`; + } else if (Number(algolia.value) === Access.MEMBERS_ONLY) { + label = $localize`Members of Space Only`; + } else if (Number(algolia.value) === Access.MEMBERS_WITH_BADGE) { + label = $localize`Members With Badge Only`; + } else if (Number(algolia.value) === Access.MEMBERS_WITH_NFT_FROM_COLLECTION) { + label = $localize`Members With NFT only`; + } + + return { + ...algolia, + label: label, + highlighted: label, + }; + }); + } + + public convertNftAvailable(algoliaItems: any[]) { + return algoliaItems.map((algolia) => { + let label = $localize`Unavailable for sale`; + if (Number(algolia.value) === NftAvailable.AUCTION) { + label = $localize`On Auction`; + } else if (Number(algolia.value) === NftAvailable.AUCTION_AND_SALE) { + label = $localize`Available`; + } else if (Number(algolia.value) === NftAvailable.SALE) { + label = $localize`On Sale`; + } + + return { + ...algolia, + label: label, + highlighted: label, + }; + }); + } + + public convertCollectionCategory(algoliaItems: any[]) { + const categories = enumToArray(Categories); + return algoliaItems.map((algolia) => { + const label = categories.find((category) => category.key === algolia.value)?.value; + return { + ...algolia, + label: label, + highlighted: label, + }; + }); + } +} diff --git a/src/app/components/algolia/sort/sort.component.html b/src/app/components/algolia/sort/sort.component.html new file mode 100644 index 0000000..542d07e --- /dev/null +++ b/src/app/components/algolia/sort/sort.component.html @@ -0,0 +1,11 @@ + + +
+
+ {{ item?.label }} +
+
+
+
diff --git a/src/app/components/algolia/sort/sort.component.less b/src/app/components/algolia/sort/sort.component.less new file mode 100644 index 0000000..3bd89b7 --- /dev/null +++ b/src/app/components/algolia/sort/sort.component.less @@ -0,0 +1,7 @@ +.wen-radio-group { + display: grid; + input { + width: 100px; + margin-left: 10px; + } +} diff --git a/src/app/components/algolia/sort/sort.component.ts b/src/app/components/algolia/sort/sort.component.ts new file mode 100644 index 0000000..7e3b50c --- /dev/null +++ b/src/app/components/algolia/sort/sort.component.ts @@ -0,0 +1,83 @@ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + forwardRef, + Inject, + Input, + OnInit, + Optional, + Output, +} from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { noop } from '@components/algolia/util'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { NgAisIndex, NgAisInstantSearch, TypedBaseWidget } from 'angular-instantsearch'; +import connectSortBy, { + SortByConnectorParams, + SortByWidgetDescription, +} from 'instantsearch.js/es/connectors/sort-by/connectSortBy'; + +@UntilDestroy() +@Component({ + selector: 'wen-sort-by', + templateUrl: './sort.component.html', + styleUrls: ['./sort.component.less'], + // changeDetection: ChangeDetectionStrategy.OnPush + // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection + changeDetection: ChangeDetectionStrategy.Default, +}) +export class SortByComponent + extends TypedBaseWidget + implements OnInit +{ + @Input() items: any[] = []; + + @Input() + set value(v: string | undefined) { + this._value = v; + this.sortControl.setValue(this.value); + } + + get value(): string | undefined { + return this._value; + } + + @Output() wenChange = new EventEmitter(); + + public sortControl: FormControl; + // @ts-ignore + public state: SortByWidgetDescription['renderState'] = { + currentRefinement: '', + hasNoResults: false, + initialIndex: '', + options: [], + refine: noop, + }; + private _value?: string; + + constructor( + @Inject(forwardRef(() => NgAisIndex)) + // eslint-disable-next-line new-cap + @Optional() + public parentIndex: NgAisIndex, + @Inject(forwardRef(() => NgAisInstantSearch)) + public instantSearchInstance: NgAisInstantSearch, + ) { + super('SortBy'); + this.sortControl = new FormControl(); + + this.sortControl.valueChanges.pipe(untilDestroyed(this)).subscribe((val: any) => { + this.state.refine(val); + this.wenChange.emit(val); + }); + } + + ngOnInit() { + this.createWidget(connectSortBy, { + // instance options + items: this.items, + }); + super.ngOnInit(); + } +} diff --git a/src/app/components/algolia/util.ts b/src/app/components/algolia/util.ts new file mode 100644 index 0000000..d20316a --- /dev/null +++ b/src/app/components/algolia/util.ts @@ -0,0 +1,7 @@ +export function parseNumberInput(input?: number | string) { + return typeof input === 'string' ? parseInt(input, 10) : input; +} + +export function noop(...args: any[]): void { + /**/ +} diff --git a/src/app/components/algolia/visible.directive.ts b/src/app/components/algolia/visible.directive.ts new file mode 100644 index 0000000..f8b2a51 --- /dev/null +++ b/src/app/components/algolia/visible.directive.ts @@ -0,0 +1,47 @@ +import { + AfterViewInit, + Directive, + ElementRef, + EventEmitter, + OnDestroy, + Output, +} from '@angular/core'; +import { DeviceService } from '@core/services/device'; + +@Directive({ + // eslint-disable-next-line @angular-eslint/directive-selector + selector: '[visible]', +}) +export class VisibleDirective implements AfterViewInit, OnDestroy { + @Output() public visible: EventEmitter = new EventEmitter(); + + private _intersectionObserver?: any; + + constructor(private _element: ElementRef, private deviceService: DeviceService) {} + + public ngAfterViewInit() { + if (this.deviceService.isBrowser) { + this._intersectionObserver = new IntersectionObserver((entries) => { + this.checkForIntersection(entries); + }, {}); + this._intersectionObserver.observe(this._element.nativeElement); + } + } + + public ngOnDestroy() { + if (this._intersectionObserver) { + this._intersectionObserver.disconnect(); + } + } + + private checkForIntersection = (entries: Array) => { + entries.forEach((entry: IntersectionObserverEntry) => { + const isIntersecting = + (entry).isIntersecting && entry.target === this._element.nativeElement; + + if (isIntersecting) { + this.visible.emit(); + } + }); + }; +} diff --git a/src/app/components/auth/auth.module.ts b/src/app/components/auth/auth.module.ts new file mode 100644 index 0000000..7ce2989 --- /dev/null +++ b/src/app/components/auth/auth.module.ts @@ -0,0 +1,30 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { MenuModule } from '@components/menu/menu.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzNotificationModule } from 'ng-zorro-antd/notification'; +import { NzTypographyModule } from 'ng-zorro-antd/typography'; +import { SignInModalComponent } from './components/sign-in-modal/sign-in-modal.component'; +import { SignInComponent } from './components/sign-in/sign-in.component'; +import { SignOutComponent } from './components/sign-out/sign-out.component'; + +@NgModule({ + declarations: [SignInComponent, SignOutComponent, SignInModalComponent], + exports: [SignInComponent, SignOutComponent, SignInModalComponent], + imports: [ + CommonModule, + NzAvatarModule, + NzTypographyModule, + NzButtonModule, + NzIconModule, + IconModule, + NzNotificationModule, + NzModalModule, + MenuModule, + ], +}) +export class AuthModule {} diff --git a/src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html b/src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html new file mode 100644 index 0000000..452a1d1 --- /dev/null +++ b/src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html @@ -0,0 +1,92 @@ + + +
+ + + + +
+
+
+
+
+ +
+

Make sure you select public IOTA EVM Chain in MetaMask.

+

+

Network Name: IOTA EVM

+

RPC URL: https://evm.wasp.sc.iota.org/

+

Chain ID: 1074

+
+
+
+ +
+ +
+
diff --git a/src/app/components/auth/components/sign-in-modal/sign-in-modal.component.less b/src/app/components/auth/components/sign-in-modal/sign-in-modal.component.less new file mode 100644 index 0000000..768a0ca --- /dev/null +++ b/src/app/components/auth/components/sign-in-modal/sign-in-modal.component.less @@ -0,0 +1,53 @@ +nz-avatar { + padding: 0.375rem; +} + +.just-start { + justify-content: start; +} + +.padding-2 { + padding: 0.5rem; +} + +.ellipse { + width: 160px; + height: 160px; + border-radius: 50%; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + position: absolute; + border: 6px solid #e9e6d8; + transform-style: preserve-3d; +} +.ellipse .circle { + width: 20px; + height: 20px; + border-radius: 50%; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + position: absolute; + background: #f39200; + animation: move linear infinite; +} +.ellipse:nth-child(1) { + transform: rotateZ(60deg) rotateY(70deg); +} +.ellipse:nth-child(1) .circle { + animation-duration: 1s; +} + +@keyframes move { + from { + transform: rotateZ(0) translateX(80px) rotateZ(0) rotateY(-70deg); + } + to { + transform: rotateZ(360deg) translateX(80px) rotateZ(-360deg) rotateY(-70deg); + } +} diff --git a/src/app/components/auth/components/sign-in-modal/sign-in-modal.component.ts b/src/app/components/auth/components/sign-in-modal/sign-in-modal.component.ts new file mode 100644 index 0000000..bf60d2a --- /dev/null +++ b/src/app/components/auth/components/sign-in-modal/sign-in-modal.component.ts @@ -0,0 +1,24 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { AuthService, Wallets } from '@components/auth/services/auth.service'; + +@Component({ + selector: 'wen-sign-in-modal', + templateUrl: './sign-in-modal.component.html', + styleUrls: ['./sign-in-modal.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SignInModalComponent { + constructor(public auth: AuthService) {} + + public handleCancel(): void { + this.auth.hideWallet(); + } + + public onClickSignInMetamask(): void { + this.auth.signIn(Wallets.Metamask); + } + + public onClickSignInTanglePay(): void { + this.auth.signIn(Wallets.TanglePay); + } +} diff --git a/src/app/components/auth/components/sign-in/sign-in.component.html b/src/app/components/auth/components/sign-in/sign-in.component.html new file mode 100644 index 0000000..30161f4 --- /dev/null +++ b/src/app/components/auth/components/sign-in/sign-in.component.html @@ -0,0 +1,10 @@ + diff --git a/src/app/components/auth/components/sign-in/sign-in.component.less b/src/app/components/auth/components/sign-in/sign-in.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/auth/components/sign-in/sign-in.component.ts b/src/app/components/auth/components/sign-in/sign-in.component.ts new file mode 100644 index 0000000..8172997 --- /dev/null +++ b/src/app/components/auth/components/sign-in/sign-in.component.ts @@ -0,0 +1,14 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { AuthService } from '../../services/auth.service'; + +@Component({ + templateUrl: './sign-in.component.html', + styleUrls: ['./sign-in.component.less'], + selector: 'wen-sign-in', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SignInComponent { + constructor(public auth: AuthService) { + // none. + } +} diff --git a/src/app/components/auth/components/sign-out/sign-out.component.html b/src/app/components/auth/components/sign-out/sign-out.component.html new file mode 100644 index 0000000..e607ce8 --- /dev/null +++ b/src/app/components/auth/components/sign-out/sign-out.component.html @@ -0,0 +1,3 @@ + + Disconnect + diff --git a/src/app/components/auth/components/sign-out/sign-out.component.less b/src/app/components/auth/components/sign-out/sign-out.component.less new file mode 100644 index 0000000..1f99496 --- /dev/null +++ b/src/app/components/auth/components/sign-out/sign-out.component.less @@ -0,0 +1,4 @@ +nz-avatar { + margin-top: 16px; + margin-right: 16px; +} diff --git a/src/app/components/auth/components/sign-out/sign-out.component.ts b/src/app/components/auth/components/sign-out/sign-out.component.ts new file mode 100644 index 0000000..5e0ba8b --- /dev/null +++ b/src/app/components/auth/components/sign-out/sign-out.component.ts @@ -0,0 +1,30 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { Member } from '@soonaverse/interfaces'; +import { BehaviorSubject } from 'rxjs'; +import { AuthService } from '../../services/auth.service'; + +@Component({ + templateUrl: './sign-out.component.html', + styleUrls: ['./sign-out.component.less'], + selector: 'wen-sign-out', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SignOutComponent { + returnUrl: string; + + constructor(private activatedRoute: ActivatedRoute, private authService: AuthService) { + this.returnUrl = + this.activatedRoute.snapshot.queryParamMap.get('returnUrl') || + `/${ROUTER_UTILS.config.base.home}`; + } + + public get member$(): BehaviorSubject { + return this.authService.member$; + } + + onClickSignOut(): void { + this.authService.signOut(); + } +} diff --git a/src/app/components/auth/services/auth.service.ts b/src/app/components/auth/services/auth.service.ts new file mode 100644 index 0000000..5772644 --- /dev/null +++ b/src/app/components/auth/services/auth.service.ts @@ -0,0 +1,556 @@ +import { Injectable, NgZone } from '@angular/core'; +import { GlobeIconComponent } from '@components/icon/globe/globe.component'; +import { NftIconComponent } from '@components/icon/nft/nft.component'; +import { PoolIconComponent } from '@components/icon/pool/pool.component'; +import { RocketIconComponent } from '@components/icon/rocket/rocket.component'; +import { StakingIconComponent } from '@components/icon/staking/staking.component'; +import { SwapIconComponent } from '@components/icon/swap/swap.component'; +import { TokenIconComponent } from '@components/icon/token/token.component'; +import { UnamusedIconComponent } from '@components/icon/unamused/unamused.component'; +import { getItem, setItem, StorageItem } from '@core/utils'; +import { undefinedToEmpty } from '@core/utils/manipulations.utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import detectEthereumProvider from '@metamask/detect-provider'; +import { + EthAddress, + Member, + Network, + StakeType, + tiers, + TOKEN_EXPIRY_HOURS, + WenRequest, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { NzNotificationService } from 'ng-zorro-antd/notification'; +import { BehaviorSubject, firstValueFrom, skip, Subscription } from 'rxjs'; +import { MemberApi, TokenDistributionWithAirdrops } from './../../../@api/member.api'; +import { removeItem } from './../../../@core/utils/local-storage.utils'; +const tanglePay = (window as any).iota; + +export interface MetamaskSignature { + address: string; + req: WenRequest; +} + +export interface SignCallback { + (sc: any, finish: any): void; +} + +export interface MenuItem { + route: string[]; + icon: any; + title: string; + authSepeator: boolean; + unAuthauthSepeator: boolean; +} + +export enum WalletStatus { + HIDDEN = 0, + OPEN = 1, + ACTIVE = 2, + WRONG_CHAIN = 3, +} + +export enum Wallets { + TanglePay = 'TanglePay', + Metamask = 'MetaMask', + // firefly = 'Firefly', +} + +@Injectable({ + providedIn: 'root', +}) +export class AuthService { + public isLoggedIn$: BehaviorSubject = new BehaviorSubject( + this.isCustomTokenNotExpired(getItem(StorageItem.CustomToken)) ? true : false, + ); + public showWalletPopup$: BehaviorSubject = new BehaviorSubject( + WalletStatus.HIDDEN, + ); + public member$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public memberSoonDistribution$: BehaviorSubject = + new BehaviorSubject(undefined); + public memberLevel$: BehaviorSubject = new BehaviorSubject(0); + public desktopMenuItems$: BehaviorSubject = new BehaviorSubject([]); + public mobileMenuItems$: BehaviorSubject = new BehaviorSubject([]); + private memberSubscription$?: Subscription; + private memberStakingSubscription$?: Subscription; + private discoverMenuItem: MenuItem = { + route: [ROUTER_UTILS.config.discover.root], + icon: RocketIconComponent, + title: $localize`Discover`, + authSepeator: true, + unAuthauthSepeator: false, + }; + private stakingMenuItem: MenuItem = { + route: [ROUTER_UTILS.config.soonStaking.root], + icon: StakingIconComponent, + title: $localize`Staking`, + authSepeator: false, + unAuthauthSepeator: false, + }; + private tokenMenuItem: MenuItem = { + route: [ROUTER_UTILS.config.tokens.root], + icon: TokenIconComponent, + title: $localize`Tokens`, + authSepeator: true, + unAuthauthSepeator: true, + }; + private swapMenuItem: MenuItem = { + route: [ROUTER_UTILS.config.swap.root], + icon: SwapIconComponent, + title: $localize`Swap`, + authSepeator: false, + unAuthauthSepeator: false, + }; + private poolMenuItem: MenuItem = { + route: [ROUTER_UTILS.config.pool.root], + icon: PoolIconComponent, + title: $localize`Pool`, + authSepeator: false, + unAuthauthSepeator: false, + }; + private marketMenuItem: MenuItem = { + route: [ROUTER_UTILS.config.market.root], + icon: NftIconComponent, + title: $localize`Marketplace`, + authSepeator: true, + unAuthauthSepeator: true, + }; + private overviewMenuItem: MenuItem = { + route: [ROUTER_UTILS.config.base.dashboard], + icon: GlobeIconComponent, + title: $localize`My Overview`, + authSepeator: false, + unAuthauthSepeator: false, + }; + + constructor( + private memberApi: MemberApi, + private ngZone: NgZone, + private notification: NzNotificationService, + ) { + // Make sure member exists when we are logged in. + this.member$.pipe(skip(1)).subscribe((m) => { + if (!m && this.isLoggedIn$.value) { + this.signOut(); + } + }); + + this.memberSoonDistribution$.subscribe((v) => { + if (v && (v?.stakes?.[StakeType.DYNAMIC]?.value || 0) > 0) { + let l = -1; + tiers.forEach((a) => { + if ((v?.stakes?.[StakeType.DYNAMIC]?.value || 0) >= a) { + l++; + } + }); + + this.memberLevel$.next(l); + } else { + this.memberLevel$.next(0); + } + }); + + if (this.isLoggedIn$.value) { + const customToken: any = getItem(StorageItem.CustomToken); + if (!this.isCustomTokenNotExpired(customToken)) { + if (customToken) { + removeItem(StorageItem.CustomToken); + } + this.isLoggedIn$.next(false); + } else { + this.listenToAccountChange(); + this.monitorMember(customToken.address); + } + } + + // Add delay on initial load. + setTimeout(() => { + this.member$.subscribe((val) => { + if (val) { + this.setAuthMenu(val.uid); + } else { + this.setUnAuthMenu(); + } + }); + + this.isLoggedIn$.subscribe((val) => { + if (!val) { + this.setUnAuthMenu(); + } + }); + }, 750); + } + + public openWallet(): void { + this.showWalletPopup$.next(WalletStatus.OPEN); + } + + public hideWallet(): void { + this.showWalletPopup$.next(WalletStatus.HIDDEN); + } + + get isLoggedIn(): boolean { + return this.isLoggedIn$.getValue(); + } + + public isCustomTokenNotExpired(customToken?: any): boolean { + return customToken && customToken.expiresOn && dayjs(customToken.expiresOn).isAfter(dayjs()); + } + + public async sign(params: any = {}, cb: SignCallback): Promise { + this.showWalletPopup$.next(WalletStatus.ACTIVE); + // We support either resign with metamask or reuse token. + let sc: WenRequest | undefined | false = undefined; + const customToken: any = getItem(StorageItem.CustomToken); + const wallet = customToken.wallet || Wallets.Metamask; + // check it's not expired. + if (this.isCustomTokenNotExpired(customToken)) { + sc = { + address: customToken.address, + customToken: customToken.value, + body: params, + }; + } else if (customToken) { + // For now we keep going, but they'll have to re-sign. + // removeItem(StorageItem.CustomToken); + } + + if (!sc) { + if (wallet === Wallets.Metamask) { + sc = await this.signWithMetamask(undefinedToEmpty(params)); + } else if (wallet === Wallets.TanglePay) { + sc = await this.signWithTanglePay(undefinedToEmpty(params)); + } + } + + if (!sc) { + this.notification.error( + $localize`Unable to sign transaction. Please try to reload page.`, + '', + ); + this.showWalletPopup$.next(WalletStatus.HIDDEN); + return undefined; + } + + // Callback function. + cb(sc, () => { + this.showWalletPopup$.next(WalletStatus.HIDDEN); + }); + return sc; + } + + public onMetaMaskAccountChange(accounts: string[]): void { + if (accounts[0] !== this.member$.value?.uid) { + this.signOut(); + } + } + + public async stopMetamaskListeners(): Promise { + const provider: any = await detectEthereumProvider(); + if (provider) { + provider.removeListener('accountsChanged', this.onMetaMaskAccountChange.bind(this)); + } + } + + public async listenToAccountChange(): Promise { + const provider: any = await detectEthereumProvider(); + if (provider) { + this.stopMetamaskListeners(); + provider.on('accountsChanged', this.onMetaMaskAccountChange.bind(this)); + } + } + + public async mint(): Promise { + // TODO waiting for stable EVM to plug it into our SC. + return true; + } + + private async signWithMetamask(params: any = {}): Promise { + const provider: any = await detectEthereumProvider(); + if (provider) { + try { + try { + if (!(await provider._metamask.isUnlocked())) { + this.notification.error($localize`You must unlock your MetaMask first!`, ''); + this.showWalletPopup$.next(WalletStatus.HIDDEN); + return undefined; + } + + // Make sure account is always selected. + await provider.request({ + method: 'eth_requestAccounts', + params: [{ eth_accounts: {} }], + }); + } catch (e) { + this.notification.error( + $localize`You must enable access to read your account address.`, + '', + ); + this.showWalletPopup$.next(WalletStatus.HIDDEN); + return undefined; + } + + if (!provider.selectedAddress) { + this.notification.error($localize`Please make sure you select address in MetaMask!`, ''); + this.showWalletPopup$.next(WalletStatus.HIDDEN); + return undefined; + } + + const member: Member | undefined = await firstValueFrom( + this.memberApi.createIfNotExists(provider.selectedAddress), + ); + if (!member) { + this.notification.error($localize`Unable to get nonce to authenticate!`, ''); + this.showWalletPopup$.next(WalletStatus.HIDDEN); + return undefined; + } + + const signature: string = await provider.request({ + method: 'personal_sign', + params: [`0x${this.toHex(member.nonce!)}`, provider.selectedAddress], + }); + + return { + address: provider.selectedAddress, + signature: signature, + body: params, + }; + } catch (e) { + this.showWalletPopup$.next(WalletStatus.HIDDEN); + return undefined; + } + } else { + this.showWalletPopup$.next(WalletStatus.HIDDEN); + return false; + } + } + + private async signWithTanglePay(params: any = {}): Promise { + let currentAddress: string | undefined = undefined; + if (tanglePay.isTanglePay) { + try { + try { + // Make sure account is always selected. + const response: { address: string; node: string } = await tanglePay.request({ + method: 'iota_connect', + }); + currentAddress = response.address.toLowerCase(); + } catch (e) { + this.notification.error($localize`Unable to connect your TanglePay wallet.`, ''); + this.showWalletPopup$.next(WalletStatus.HIDDEN); + return undefined; + } + + if (!currentAddress) { + this.notification.error($localize`Unable to detect address in TanglePay!`, ''); + this.showWalletPopup$.next(WalletStatus.HIDDEN); + return undefined; + } + + // This is not ETH address. + let publicKey = undefined; + let network: Network | undefined = undefined; + if (!currentAddress.startsWith('0x')) { + publicKey = await tanglePay.request({ + method: 'iota_getPublicKey', + params: {}, + }); + + if (currentAddress.startsWith(Network.RMS)) { + network = Network.RMS; + } else if (currentAddress.startsWith(Network.SMR)) { + network = Network.SMR; + } else if (currentAddress.startsWith(Network.IOTA)) { + network = Network.IOTA; + } else if (currentAddress.startsWith(Network.ATOI)) { + network = Network.ATOI; + } + } + + const member: Member | undefined = await firstValueFrom( + this.memberApi.createIfNotExists(currentAddress), + ); + if (!member) { + this.notification.error($localize`Unable to get nonce to authenticate!`, ''); + this.showWalletPopup$.next(WalletStatus.HIDDEN); + return undefined; + } + + const signature: string = await tanglePay.request({ + method: 'personal_sign', + params: { + content: `0x${this.toHex(member.nonce!)}`, + }, + }); + + const returnObj: WenRequest = { + address: currentAddress, + signature: signature, + body: params, + }; + + // Add public key if it's provided for non ETH address. + if (publicKey && network) { + returnObj.publicKey = { + hex: publicKey, + network: network, + }; + } + + return returnObj; + } catch (e) { + this.showWalletPopup$.next(WalletStatus.HIDDEN); + return undefined; + } + } else { + this.showWalletPopup$.next(WalletStatus.HIDDEN); + return false; + } + } + + public monitorMember(address: EthAddress): void { + this.memberSubscription$ = this.memberApi.listen(address).subscribe(this.member$); + this.memberStakingSubscription$ = this.memberApi + .soonDistributionStats(address) + .subscribe(this.memberSoonDistribution$); + } + + public toHex(stringToConvert: string) { + return stringToConvert + .split('') + .map((c) => { + return c.charCodeAt(0).toString(16).padStart(2, '0'); + }) + .join(''); + } + + public async signIn(wallet: Wallets = Wallets.Metamask): Promise { + this.showWalletPopup$.next(WalletStatus.ACTIVE); + let sc: WenRequest | undefined | false; + if (wallet === Wallets.Metamask) { + sc = await this.signWithMetamask({}); + } else if (wallet === Wallets.TanglePay) { + sc = await this.signWithTanglePay({}); + } + + if (!sc) { + // Missing wallet. + if (sc === false) { + this.notification.success($localize`You have to open Soonaverse in wallet app.`, ''); + } else { + this.notification.error($localize`Failed to initialize wallet, try to reload page.`, ''); + } + return false; + } + + // Refresh custom token. + let failed = false; + let authToken; + try { + authToken = await firstValueFrom(this.memberApi.generateAuthToken(sc)); + } catch (e) { + failed = true; + } + + if (authToken && failed === false) { + setItem(StorageItem.CustomToken, { + value: authToken, + wallet: wallet, + address: sc.address, + expiresOn: dayjs().add(TOKEN_EXPIRY_HOURS, 'hour').valueOf(), + }); + + this.showWalletPopup$.next(WalletStatus.HIDDEN); + // Let's autheticate right the way with just UID. + this.member$.next({ + uid: sc.address, + }); + this.isLoggedIn$.next(true); + + // Let's make sure we monitor the member. + this.monitorMember(sc.address); + + // Listen to Metamask changes. + this.listenToAccountChange(); + + return true; + } else { + this.notification.error($localize`Unable to connect your TanglePay wallet.`, ''); + this.showWalletPopup$.next(WalletStatus.HIDDEN); + return false; + } + } + + signOut(): void { + // Sometimes it might be triggered outside i.e. via metamask. + this.ngZone.run(() => { + removeItem(StorageItem.CustomToken); + this.memberSubscription$?.unsubscribe(); + this.memberStakingSubscription$?.unsubscribe(); + this.isLoggedIn$.next(false); + this.member$.next(undefined); + this.memberLevel$.next(0); + this.stopMetamaskListeners(); + }); + } + + setAuthMenu(memberId: string): void { + setTimeout(() => { + this.desktopMenuItems$.next([ + this.overviewMenuItem, + this.discoverMenuItem, + this.stakingMenuItem, + this.tokenMenuItem, + this.swapMenuItem, + this.poolMenuItem, + this.marketMenuItem, + this.getMemberMenuItem(memberId), + ]); + + this.mobileMenuItems$.next([ + this.overviewMenuItem, + this.discoverMenuItem, + this.stakingMenuItem, + this.tokenMenuItem, + this.swapMenuItem, + this.poolMenuItem, + this.marketMenuItem, + this.getMemberMenuItem(memberId), + ]); + }, 1000); + } + + setUnAuthMenu(): void { + this.desktopMenuItems$.next([ + this.discoverMenuItem, + this.stakingMenuItem, + this.tokenMenuItem, + this.swapMenuItem, + this.poolMenuItem, + this.marketMenuItem, + ]); + + this.mobileMenuItems$.next([ + this.discoverMenuItem, + this.stakingMenuItem, + this.tokenMenuItem, + this.swapMenuItem, + this.poolMenuItem, + this.marketMenuItem, + ]); + } + + public getMemberMenuItem(memberId: string): MenuItem { + return { + route: [ROUTER_UTILS.config.member.root, memberId], + icon: UnamusedIconComponent, + title: $localize`My Profile`, + authSepeator: true, + unAuthauthSepeator: false, + }; + } +} diff --git a/src/app/components/award/award.module.ts b/src/app/components/award/award.module.ts new file mode 100644 index 0000000..3dcaa8c --- /dev/null +++ b/src/app/components/award/award.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { AwardCardModule } from './components/award-card/award-card.module'; +import { AwardStatusModule } from './components/award-status/award-status.module'; + +@NgModule({ + exports: [AwardCardModule, AwardStatusModule], + imports: [CommonModule], +}) +export class AwardModule {} diff --git a/src/app/components/award/components/award-awards/award-awards.component.html b/src/app/components/award/components/award-awards/award-awards.component.html new file mode 100644 index 0000000..2a0d838 --- /dev/null +++ b/src/app/components/award/components/award-awards/award-awards.component.html @@ -0,0 +1,44 @@ + + +
+ + {{ + ((data.award$ | async)?.badge?.tokenReward || 0 + | formatToken : (data.token$ | async)?.uid : true : false + | async) + + ' ' + + (data.token$ | async)?.symbol | uppercase + }} +

+

+
+ + +
+
+ + diff --git a/src/app/components/award/components/award-awards/award-awards.component.less b/src/app/components/award/components/award-awards/award-awards.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/award/components/award-awards/award-awards.component.ts b/src/app/components/award/components/award-awards/award-awards.component.ts new file mode 100644 index 0000000..b3b4e11 --- /dev/null +++ b/src/app/components/award/components/award-awards/award-awards.component.ts @@ -0,0 +1,24 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { UnitsService } from '@core/services/units'; +import { DataService } from '@pages/award/services/data.service'; +import { HelperService } from '@pages/award/services/helper.service'; +import { FILE_SIZES } from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-award-awards', + templateUrl: './award-awards.component.html', + styleUrls: ['./award-awards.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AwardAwardsComponent { + public isCsvBadgeModalOpen = false; + constructor( + public data: DataService, + public unitsService: UnitsService, + public helper: HelperService, + ) {} + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } +} diff --git a/src/app/components/award/components/award-awards/award-awards.module.ts b/src/app/components/award/components/award-awards/award-awards.module.ts new file mode 100644 index 0000000..e6a6793 --- /dev/null +++ b/src/app/components/award/components/award-awards/award-awards.module.ts @@ -0,0 +1,30 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { IpfsBadgeModule } from '@core/pipes/ipfs-badge/ipfs-badge.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { AwardGiveBadgesModule } from '../award-give-badges/award-give-badges.module'; +import { AwardAwardsComponent } from './award-awards.component'; + +@NgModule({ + declarations: [AwardAwardsComponent], + imports: [ + CommonModule, + NzCardModule, + NzAvatarModule, + IpfsBadgeModule, + FormatTokenModule, + NzTagModule, + NzToolTipModule, + IconModule, + NzButtonModule, + AwardGiveBadgesModule, + ], + exports: [AwardAwardsComponent], +}) +export class AwardAwardsModule {} diff --git a/src/app/components/award/components/award-card/award-card.component.html b/src/app/components/award/components/award-card/award-card.component.html new file mode 100644 index 0000000..101a70d --- /dev/null +++ b/src/app/components/award/components/award-card/award-card.component.html @@ -0,0 +1,67 @@ + diff --git a/src/app/components/award/components/award-card/award-card.component.less b/src/app/components/award/components/award-card/award-card.component.less new file mode 100644 index 0000000..a1d09d0 --- /dev/null +++ b/src/app/components/award/components/award-card/award-card.component.less @@ -0,0 +1,15 @@ +.ant-card-meta-avatar { + float: none; +} + +.rotate-180 { + transform: rotate(180deg); +} + +.truncate-line-3 { + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/src/app/components/award/components/award-card/award-card.component.ts b/src/app/components/award/components/award-card/award-card.component.ts new file mode 100644 index 0000000..552a7ce --- /dev/null +++ b/src/app/components/award/components/award-card/award-card.component.ts @@ -0,0 +1,61 @@ +import { ChangeDetectionStrategy, Component, Input, OnChanges, OnDestroy } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { Award, AwardBadgeType, FILE_SIZES, Space } from '@soonaverse/interfaces'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { SpaceApi } from './../../../../@api/space.api'; +import { ROUTER_UTILS } from './../../../../@core/utils/router.utils'; + +@UntilDestroy() +@Component({ + selector: 'wen-award-card', + templateUrl: './award-card.component.html', + styleUrls: ['./award-card.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AwardCardComponent implements OnChanges, OnDestroy { + @Input() award?: Award; + @Input() fullWidth?: boolean; + public space$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public path = ROUTER_UTILS.config.award.root; + private subscriptions$: Subscription[] = []; + + constructor( + private spaceApi: SpaceApi, + public deviceService: DeviceService, + public unitsService: UnitsService, + public previewImageService: PreviewImageService, + ) { + // none. + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + public ngOnChanges(): void { + if (this.award?.space) { + this.subscriptions$.push( + this.spaceApi.listen(this.award.space).pipe(untilDestroyed(this)).subscribe(this.space$), + ); + } + } + + public get awardBadgeTypes(): typeof AwardBadgeType { + return AwardBadgeType; + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/components/award/components/award-card/award-card.module.ts b/src/app/components/award/components/award-card/award-card.module.ts new file mode 100644 index 0000000..622b8d3 --- /dev/null +++ b/src/app/components/award/components/award-card/award-card.module.ts @@ -0,0 +1,38 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NzTypographyModule } from 'ng-zorro-antd/typography'; +import { TruncateModule } from '../../../../@core/pipes/truncate/truncate.module'; +import { DateTagModule } from '../../../date-tag/date-tag.module'; +import { ParentTitleModule } from '../../../parent-title/parent-title.module'; +import { AwardStatusModule } from '../award-status/award-status.module'; +import { IpfsBadgeModule } from './../../../../@core/pipes/ipfs-badge/ipfs-badge.module'; +import { IconModule } from './../../../../components/icon/icon.module'; +import { AwardCardComponent } from './award-card.component'; + +@NgModule({ + exports: [AwardCardComponent], + declarations: [AwardCardComponent], + imports: [ + CommonModule, + FormatTokenModule, + RouterModule, + ParentTitleModule, + IpfsBadgeModule, + DateTagModule, + AwardStatusModule, + NzTypographyModule, + NzAvatarModule, + NzIconModule, + NzToolTipModule, + IconModule, + TruncateModule, + NzTagModule, + ], +}) +export class AwardCardModule {} diff --git a/src/app/components/award/components/award-give-badges/award-give-badges.component.html b/src/app/components/award/components/award-give-badges/award-give-badges.component.html new file mode 100644 index 0000000..40a0c92 --- /dev/null +++ b/src/app/components/award/components/award-give-badges/award-give-badges.component.html @@ -0,0 +1,117 @@ + + + + +
+
Give badges
+ +
+ +
+ + +
+
+
+ Upload CSV +
+ Download CSV template +
+ +
+ You can create badge airdrops for any user. You can upload CSV with users addresses and they + will be properly reward. +
+ +
+ If you don’t know how to prepare CSV file, you can download our template made for you. +
+ +
+ + + + + + + + + +
+
+
+ + +
+
Confirm schedule
+ +
+
+ + + + + + Address + Action + + + + + {{ t.address }} + Badge + + + + + + +
+ +
+
+
diff --git a/src/app/components/award/components/award-give-badges/award-give-badges.component.less b/src/app/components/award/components/award-give-badges/award-give-badges.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/award/components/award-give-badges/award-give-badges.component.ts b/src/app/components/award/components/award-give-badges/award-give-badges.component.ts new file mode 100644 index 0000000..64c34b9 --- /dev/null +++ b/src/app/components/award/components/award-give-badges/award-give-badges.component.ts @@ -0,0 +1,128 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { AwardApi } from '@api/award.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { NotificationService } from '@core/services/notification'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { download } from '@core/utils/tools.utils'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { Award, StakeRewardStatus } from '@soonaverse/interfaces'; +import { NzUploadFile } from 'ng-zorro-antd/upload'; +import Papa from 'papaparse'; +import { Observable } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-award-give-badges', + templateUrl: './award-give-badges.component.html', + styleUrls: ['./award-give-badges.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AwardGiveBadgesComponent { + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() award?: Award; + @Output() wenOnClose = new EventEmitter(); + public uploadStage = 0; + public badgesToGive: any = []; + public tableConfig = [{ label: `address`, key: 'address' }]; + private _isOpen = false; + + constructor( + public unitsService: UnitsService, + public transactionService: TransactionService, + private cd: ChangeDetectorRef, + private auth: AuthService, + private notification: NotificationService, + private awardApi: AwardApi, + ) {} + + public beforeCSVUpload(file: NzUploadFile): boolean | Observable { + if (!file) return false; + + Papa.parse(file as unknown as File, { + skipEmptyLines: true, + header: true, + complete: (results: any) => { + if (!results?.data?.length) { + return; + } + + this.badgesToGive = results.data.map((v: any) => { + return { + address: v.address, + }; + }); + this.uploadStage = 1; + this.cd.markForCheck(); + }, + }); + + return false; + } + + public generateTemplate(): void { + const fields = ['', ...this.tableConfig.map((r) => r.label)] as string[]; + + const csv = Papa.unparse({ + fields, + data: [], + }); + + download(`data:text/csv;charset=utf-8${csv}`, 'soonaverse_airdrop_template.csv'); + } + + public async submit(): Promise { + if (!this.badgesToGive?.length || !this.award?.uid) { + this.reset(); + return; + } + + await this.auth.sign( + { + award: this.award!.uid, + members: this.badgesToGive.map((o: any) => { + return o.address; + }), + }, + (sc, finish) => { + this.notification + .processRequest(this.awardApi.approveParticipant(sc), $localize`Submitted.`, finish) + .subscribe(() => { + this.close(); + }); + }, + ); + } + + public get rewardScheduleStatuses(): typeof StakeRewardStatus { + return StakeRewardStatus; + } + + public close(): void { + this.reset(); + this.badgesToGive = []; + this.uploadStage = 0; + this.wenOnClose.next(); + } + + public reset(): void { + this.isOpen = false; + this.badgesToGive = []; + this.uploadStage = 0; + this.cd.markForCheck(); + } +} diff --git a/src/app/components/award/components/award-give-badges/award-give-badges.module.ts b/src/app/components/award/components/award-give-badges/award-give-badges.module.ts new file mode 100644 index 0000000..60c1f23 --- /dev/null +++ b/src/app/components/award/components/award-give-badges/award-give-badges.module.ts @@ -0,0 +1,43 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { RadioModule } from '@components/radio/radio.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzRadioModule } from 'ng-zorro-antd/radio'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzUploadModule } from 'ng-zorro-antd/upload'; +import { AwardGiveBadgesComponent } from './award-give-badges.component'; + +@NgModule({ + declarations: [AwardGiveBadgesComponent], + imports: [ + CommonModule, + ModalDrawerModule, + IconModule, + NzIconModule, + NzFormModule, + NzDatePickerModule, + NzSelectModule, + FormsModule, + NzTableModule, + NzCardModule, + NzTagModule, + NzUploadModule, + ReactiveFormsModule, + DescriptionModule, + NzButtonModule, + RadioModule, + NzRadioModule, + ], + exports: [AwardGiveBadgesComponent], +}) +export class AwardGiveBadgesModule {} diff --git a/src/app/components/award/components/award-mint/award-mint.component.html b/src/app/components/award/components/award-mint/award-mint.component.html new file mode 100644 index 0000000..997f01c --- /dev/null +++ b/src/app/components/award/components/award-mint/award-mint.component.html @@ -0,0 +1,185 @@ + + + + +
+ +
+ +
+
+
Reward Token
+
+
+ + +
+ {{ token?.symbol }} +
+
+
+
+
+ +
+
+
Reward to be funded
+
+
+
+ {{ + (award?.badge?.total || 0) * (award?.badge?.tokenReward || 0) + | formatToken : award?.badge?.tokenUid : true : false + | async + }} +
+
+
+
+
+ +
+ + + + + + + + + + + +
+ + +
+ + + + + +
+ Once you agree with the terms, the generated address will remain active during the whole + process. +
+
+
+ + +
+
+ +
+ Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. +
+
+ + + + + +
+
+ + +
+
+
Transaction history
+ +
+
+
+ {{ t.date | Time }} +
+ {{ t.label }} +
{{ t.label }}
+
+
+
+ + +
+
+ +
+
Transaction complete. Congratulations.
+
+ + +
+
+
+
diff --git a/src/app/components/award/components/award-mint/award-mint.component.less b/src/app/components/award/components/award-mint/award-mint.component.less new file mode 100644 index 0000000..268c5ff --- /dev/null +++ b/src/app/components/award/components/award-mint/award-mint.component.less @@ -0,0 +1,10 @@ +::ng-deep { + input::-webkit-inner-spin-button, + input::-webkit-outer-spin-button { + opacity: 0; + } +} + +.info-item { + @apply flex items-center justify-between flex-1 w-full px-6 py-2 mt-2 rounded-3xl min-h-14; +} diff --git a/src/app/components/award/components/award-mint/award-mint.component.ts b/src/app/components/award/components/award-mint/award-mint.component.ts new file mode 100644 index 0000000..dba07f6 --- /dev/null +++ b/src/app/components/award/components/award-mint/award-mint.component.ts @@ -0,0 +1,345 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnInit, + Output, +} from '@angular/core'; +import { AwardApi } from '@api/award.api'; +import { OrderApi } from '@api/order.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { TransactionStep } from '@components/transaction-steps/transaction-steps.component'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { removeItem, setItem, StorageItem } from '@core/utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { + Award, + Timestamp, + Token, + Transaction, + TransactionType, + TRANSACTION_AUTO_EXPIRY_MS, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, interval, Subscription } from 'rxjs'; + +export enum StepType { + SELECT = 'Select', + TRANSACTION = 'Transaction', + WAIT = 'Wait', + CONFIRMED = 'Confirmed', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-award-mint', + templateUrl: './award-mint.component.html', + styleUrls: ['./award-mint.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AwardMintComponent implements OnInit { + @Input() currentStep = StepType.SELECT; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() award?: Award; + @Input() token?: Token; + @Output() wenOnClose = new EventEmitter(); + + public stepType = StepType; + public isCopied = false; + public agreeTermsConditions = false; + public targetAddress?: string = 'dummy_address'; + public targetAmount?: number = 1200000; + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public invalidPayment = false; + public history: HistoryItem[] = []; + public receivedTransactions = false; + public steps: TransactionStep[] = [ + { label: $localize`Funding info`, sequenceNum: 0 }, + { label: $localize`Make transaction`, sequenceNum: 1 }, + { label: $localize`Wait for confirmation`, sequenceNum: 2 }, + { label: $localize`Confirmed`, sequenceNum: 3 }, + ]; + private transSubscription?: Subscription; + private _isOpen = false; + + constructor( + public previewImageService: PreviewImageService, + public unitsService: UnitsService, + public transactionService: TransactionService, + public helper: HelperService, + private cd: ChangeDetectorRef, + private auth: AuthService, + private notification: NotificationService, + private awardApi: AwardApi, + private orderApi: OrderApi, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + // It's expired. + removeItem(StorageItem.AwardMintTransaction); + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.WAIT; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`Payment received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + dayjs(), + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + dayjs(), + $localize`Transaction confirmed.`, + ); + this.receivedTransactions = true; + this.currentStep = StepType.CONFIRMED; + this.cd.markForCheck(); + }, 2000); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid amount received. Refunding transaction...`, + ); + } + + const markInvalid = () => { + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid transaction.You must gift storage deposit.`, + ); + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Invalid payment refunded.`, + val.payload?.walletReference?.chainReference, + ); + + // Let's go back to wait. With slight delay so they can see this. + markInvalid(); + } + + this.cd.markForCheck(); + }); + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + removeItem(StorageItem.AwardMintTransaction); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public get lockTime(): number { + return TRANSACTION_AUTO_EXPIRY_MS / 1000 / 60; + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.SELECT; + this.cd.markForCheck(); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public isExpired(val?: Transaction | null): boolean { + if (!val?.createdOn) { + return false; + } + + const expiresOn: dayjs.Dayjs = dayjs(val.createdOn.toDate()).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + return expiresOn.isBefore(dayjs()) && val.type === TransactionType.ORDER; + } + + public async proceedWithMint(): Promise { + if (!this.token || !this.award || !this.agreeTermsConditions) { + return; + } + + const params: any = { + uid: this.award.uid, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.awardApi.fundAndMint(sc), 'Order created.', finish) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + setItem(StorageItem.AwardMintTransaction, val.uid); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + }); + }); + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public getCurrentSequenceNum(): number { + switch (this.currentStep) { + case StepType.SELECT: + return 0; + case StepType.TRANSACTION: + return 1; + case StepType.WAIT: + return 2; + case StepType.CONFIRMED: + return 3; + default: + return 0; + } + } +} diff --git a/src/app/components/award/components/award-mint/award-mint.module.ts b/src/app/components/award/components/award-mint/award-mint.module.ts new file mode 100644 index 0000000..d64116b --- /dev/null +++ b/src/app/components/award/components/award-mint/award-mint.module.ts @@ -0,0 +1,37 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { TransactionStepsModule } from '@components/transaction-steps/transaction-steps.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { AwardMintComponent } from './award-mint.component'; + +@NgModule({ + declarations: [AwardMintComponent], + imports: [ + CommonModule, + ModalDrawerModule, + NzButtonModule, + IconModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + NzAlertModule, + NetworkModule, + FormatTokenModule, + CountdownTimeModule, + TimeModule, + NzAvatarModule, + TransactionStepsModule, + ], + providers: [PercentPipe], + exports: [AwardMintComponent], +}) +export class AwardMintModule {} diff --git a/src/app/components/award/components/award-status/award-status.component.html b/src/app/components/award/components/award-status/award-status.component.html new file mode 100644 index 0000000..fddbb3b --- /dev/null +++ b/src/app/components/award/components/award-status/award-status.component.html @@ -0,0 +1,24 @@ +Pending Funding + +Rejected + +Completed +Available diff --git a/src/app/components/award/components/award-status/award-status.component.less b/src/app/components/award/components/award-status/award-status.component.less new file mode 100644 index 0000000..e531d1d --- /dev/null +++ b/src/app/components/award/components/award-status/award-status.component.less @@ -0,0 +1,3 @@ +.ant-card-meta-avatar { + float: none; +} diff --git a/src/app/components/award/components/award-status/award-status.component.ts b/src/app/components/award/components/award-status/award-status.component.ts new file mode 100644 index 0000000..c90a469 --- /dev/null +++ b/src/app/components/award/components/award-status/award-status.component.ts @@ -0,0 +1,15 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { HelperService } from '@pages/award/services/helper.service'; +import { Award } from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-award-status', + templateUrl: './award-status.component.html', + styleUrls: ['./award-status.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AwardStatusComponent { + @Input() award?: Award | null; + + constructor(public helper: HelperService) {} +} diff --git a/src/app/components/award/components/award-status/award-status.module.ts b/src/app/components/award/components/award-status/award-status.module.ts new file mode 100644 index 0000000..8dca92a --- /dev/null +++ b/src/app/components/award/components/award-status/award-status.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { AwardStatusComponent } from './award-status.component'; + +@NgModule({ + exports: [AwardStatusComponent], + declarations: [AwardStatusComponent], + imports: [CommonModule, NzTagModule], +}) +export class AwardStatusModule {} diff --git a/src/app/components/badge/badge-tile/badge-tile.component.html b/src/app/components/badge/badge-tile/badge-tile.component.html new file mode 100644 index 0000000..03bebf0 --- /dev/null +++ b/src/app/components/badge/badge-tile/badge-tile.component.html @@ -0,0 +1,7 @@ + diff --git a/src/app/components/badge/badge-tile/badge-tile.component.less b/src/app/components/badge/badge-tile/badge-tile.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/badge/badge-tile/badge-tile.component.ts b/src/app/components/badge/badge-tile/badge-tile.component.ts new file mode 100644 index 0000000..56a1746 --- /dev/null +++ b/src/app/components/badge/badge-tile/badge-tile.component.ts @@ -0,0 +1,18 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { FILE_SIZES } from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-badge-tile', + templateUrl: './badge-tile.component.html', + styleUrls: ['./badge-tile.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class BadgeTileComponent { + @Input() size?: number; + @Input() name?: string; + @Input() image?: string | null; + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } +} diff --git a/src/app/components/badge/badge.module.ts b/src/app/components/badge/badge.module.ts new file mode 100644 index 0000000..e5f6556 --- /dev/null +++ b/src/app/components/badge/badge.module.ts @@ -0,0 +1,14 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { IpfsBadgeModule } from './../../@core/pipes/ipfs-badge/ipfs-badge.module'; +import { BadgeTileComponent } from './badge-tile/badge-tile.component'; + +@NgModule({ + declarations: [BadgeTileComponent], + exports: [BadgeTileComponent], + imports: [CommonModule, NzAvatarModule, NzToolTipModule, IpfsBadgeModule, NzCardModule], +}) +export class BadgeModule {} diff --git a/src/app/components/collapse/collapse.component.html b/src/app/components/collapse/collapse.component.html new file mode 100644 index 0000000..05a83be --- /dev/null +++ b/src/app/components/collapse/collapse.component.html @@ -0,0 +1,43 @@ + + + {{ title }} + + + +
+ +
+
+ +
+
+
{{ title }}
+ +
+ +
+ +
+ +
+
+ + + + diff --git a/src/app/components/collapse/collapse.component.less b/src/app/components/collapse/collapse.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/components/collapse/collapse.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/components/collapse/collapse.component.ts b/src/app/components/collapse/collapse.component.ts new file mode 100644 index 0000000..b25d4f7 --- /dev/null +++ b/src/app/components/collapse/collapse.component.ts @@ -0,0 +1,38 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; + +export enum CollapseType { + CARD = 'card', + UNDERLINE = 'underline', +} + +@Component({ + selector: 'wen-collapse', + templateUrl: './collapse.component.html', + styleUrls: ['./collapse.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CollapseComponent { + @Input() type: CollapseType = CollapseType.CARD; + @Input() title?: string; + @Input() isCollapsed = true; + @Output() wenOnCollapse = new EventEmitter(); + + constructor(private cd: ChangeDetectorRef) {} + + public change(): void { + this.isCollapsed = !this.isCollapsed; + this.wenOnCollapse.emit(this.isCollapsed); + this.cd.markForCheck(); + } + + public get collapseTypes(): typeof CollapseType { + return CollapseType; + } +} diff --git a/src/app/components/collapse/collapse.module.ts b/src/app/components/collapse/collapse.module.ts new file mode 100644 index 0000000..3176b27 --- /dev/null +++ b/src/app/components/collapse/collapse.module.ts @@ -0,0 +1,12 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { CollapseComponent } from './collapse.component'; + +@NgModule({ + declarations: [CollapseComponent], + imports: [CommonModule, NzCardModule, IconModule], + exports: [CollapseComponent], +}) +export class CollapseModule {} diff --git a/src/app/components/collection/collection.module.ts b/src/app/components/collection/collection.module.ts new file mode 100644 index 0000000..c4172c5 --- /dev/null +++ b/src/app/components/collection/collection.module.ts @@ -0,0 +1,8 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +@NgModule({ + declarations: [], + imports: [CommonModule], +}) +export class CollectionModule {} diff --git a/src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html b/src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html new file mode 100644 index 0000000..1dfcbd7 --- /dev/null +++ b/src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html @@ -0,0 +1,56 @@ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
diff --git a/src/app/components/collection/components/collection-access-badge/collection-access-badge.component.less b/src/app/components/collection/components/collection-access-badge/collection-access-badge.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/collection/components/collection-access-badge/collection-access-badge.component.ts b/src/app/components/collection/components/collection-access-badge/collection-access-badge.component.ts new file mode 100644 index 0000000..145ba67 --- /dev/null +++ b/src/app/components/collection/components/collection-access-badge/collection-access-badge.component.ts @@ -0,0 +1,17 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { Access, Nft } from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-collection-access-badge', + templateUrl: './collection-access-badge.component.html', + styleUrls: ['./collection-access-badge.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AccessBadgeComponent { + @Input() type!: Access; + @Input() nft?: Nft; + + public get accessTypes(): typeof Access { + return Access; + } +} diff --git a/src/app/components/collection/components/collection-access-badge/collection-access-badge.module.ts b/src/app/components/collection/components/collection-access-badge/collection-access-badge.module.ts new file mode 100644 index 0000000..b1fd4ac --- /dev/null +++ b/src/app/components/collection/components/collection-access-badge/collection-access-badge.module.ts @@ -0,0 +1,12 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { AccessBadgeComponent } from './collection-access-badge.component'; + +@NgModule({ + declarations: [AccessBadgeComponent], + imports: [CommonModule, NzToolTipModule, IconModule], + exports: [AccessBadgeComponent], +}) +export class AccessBadgeModule {} diff --git a/src/app/components/collection/components/collection-card/collection-card.component.html b/src/app/components/collection/components/collection-card/collection-card.component.html new file mode 100644 index 0000000..088f29a --- /dev/null +++ b/src/app/components/collection/components/collection-card/collection-card.component.html @@ -0,0 +1,119 @@ +
+ +
+ + +
+
+ + Starts in + {{ helper.getDaysLeft(collection.availableFrom) }} + days + + + Starts today + +
+
+ +
+ {{ getStatusProperties().label }} +
+ +
+
+ +
+ +
+ +
+
Limited Edition
+
+
+ +
+

+ {{ collection.name }} +

+ +
+ {{ collection.description | stripMarkdown }} +
+ +
+ +
+ {{ (space | async)?.name || (space | async)?.uid }} +
+
+ +
+
Floor Price
+
+ {{ + collection?.floorPrice + ? (collection?.floorPrice + | formatToken : collection?.mintingData?.network : false : true : 2 + | async) + : '-' + }} +
+
+
+
+
diff --git a/src/app/components/collection/components/collection-card/collection-card.component.less b/src/app/components/collection/components/collection-card/collection-card.component.less new file mode 100644 index 0000000..a5069d7 --- /dev/null +++ b/src/app/components/collection/components/collection-card/collection-card.component.less @@ -0,0 +1,7 @@ +:host { + @apply w-full lg:w-auto max-w-full; +} + +.card-smaller-height { + height: calc(100% - 20px) !important; +} diff --git a/src/app/components/collection/components/collection-card/collection-card.component.ts b/src/app/components/collection/components/collection-card/collection-card.component.ts new file mode 100644 index 0000000..cd8713e --- /dev/null +++ b/src/app/components/collection/components/collection-card/collection-card.component.ts @@ -0,0 +1,75 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { FileApi } from '@api/file.api'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { HelperService } from '@pages/collection/services/helper.service'; +import { Access, Collection, CollectionStatus, FILE_SIZES, Space } from '@soonaverse/interfaces'; +import { Observable, of } from 'rxjs'; + +@Component({ + selector: 'wen-collection-card', + templateUrl: './collection-card.component.html', + styleUrls: ['./collection-card.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CollectionCardComponent { + @Input() public collection?: Collection; + @Input() fullWidth?: boolean; + public path = ROUTER_UTILS.config.collection.root; + + constructor( + private cache: CacheService, + public deviceService: DeviceService, + public unitsService: UnitsService, + public previewImageService: PreviewImageService, + public helper: HelperService, + ) { + // none. + } + + public get space(): Observable { + if (!this.collection?.space) { + return of(undefined); + } + + return this.cache.getSpace(this.collection!.space); + } + + public spaceAvatarUrl(space?: Space): string | undefined { + if (space) { + return space.avatarUrl ? FileApi.getUrl(space.avatarUrl, FILE_SIZES.small) : undefined; + } + + return undefined; + } + + public get targetAccess(): typeof Access { + return Access; + } + + public getStatusProperties(): { label: string; className: string } { + if (this.collection?.approved !== true && this.collection?.rejected !== true) { + return { + label: $localize`Pending approval`, + className: 'bg-tags-commencing dark:bg-tags-commencing-dark', + }; + } else if (this.collection?.approved) { + return { + label: $localize`Available`, + className: 'bg-tags-available dark:bg-tags-available-dark', + }; + } else { + return { + label: $localize`Rejected`, + className: 'bg-tags-closed dark:bg-tags-closed-dark', + }; + } + } + + public get collectionStatuses(): typeof CollectionStatus { + return CollectionStatus; + } +} diff --git a/src/app/components/collection/components/collection-card/collection-card.module.ts b/src/app/components/collection/components/collection-card/collection-card.module.ts new file mode 100644 index 0000000..7a25d7f --- /dev/null +++ b/src/app/components/collection/components/collection-card/collection-card.module.ts @@ -0,0 +1,28 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { IconModule } from '@components/icon/icon.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { StripMarkDownModule } from '@core/pipes/strip-markdown/strip-markdown.module'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { AccessBadgeModule } from '../collection-access-badge/collection-access-badge.module'; +import { CollectionCardComponent } from './collection-card.component'; + +@NgModule({ + declarations: [CollectionCardComponent], + imports: [ + CommonModule, + RouterModule, + StripMarkDownModule, + TruncateModule, + NzAvatarModule, + FormatTokenModule, + NzToolTipModule, + IconModule, + AccessBadgeModule, + ], + exports: [CollectionCardComponent], +}) +export class CollectionCardModule {} diff --git a/src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html b/src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html new file mode 100644 index 0000000..577faf9 --- /dev/null +++ b/src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html @@ -0,0 +1,55 @@ + +
{{ title }}
+ + + + + +
+ + +
{{ collection?.name }}
+
+ + +
+ + {{ collection?.floorPrice | formatToken : collection?.mintingData?.network | async }} + + - +
+ + +
+ {{ (collection?.total || 0) - (collection?.sold || 0) }} + Remaining +
+
+ {{ collection?.total || 0 }} + NFTs +
+ + + +
+
diff --git a/src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.less b/src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.less new file mode 100644 index 0000000..376e51b --- /dev/null +++ b/src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.less @@ -0,0 +1,27 @@ +:host { + @apply block; + + ::ng-deep { + nz-card { + @apply rounded-2xl; + + .ant-card-body { + @apply px-2 pt-3 pb-1; + } + } + + nz-table { + .ant-table-tbody .ant-table-row .ant-table-cell { + @apply border-0 !important; + } + } + } + + .green-label { + @apply text-[#8ECEAF]; + } + + .orange-label { + @apply text-[#F39200]; + } +} diff --git a/src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.ts b/src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.ts new file mode 100644 index 0000000..ac4a3d3 --- /dev/null +++ b/src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.ts @@ -0,0 +1,79 @@ +import { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core'; +import { NftApi } from '@api/nft.api'; +import { SpaceApi } from '@api/space.api'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { Collection, Space, Timestamp } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, Subscription } from 'rxjs'; + +export enum CollectionHighlightCardType { + HIGHLIGHT = 'Highlight', + RECENTLY = 'Recently', +} + +@UntilDestroy() +@Component({ + selector: 'wen-collection-highlight-card', + templateUrl: './collection-highlight-card.component.html', + styleUrls: ['./collection-highlight-card.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CollectionHighlightCardComponent implements OnDestroy { + @Input() title = ''; + @Input() type = CollectionHighlightCardType.HIGHLIGHT; + + @Input() + set collections(value: Collection[]) { + this._collections = value; + this.fetchData(); + } + + get collections(): Collection[] { + return this._collections; + } + + public spaces$: BehaviorSubject[] = []; + private _collections: Collection[] = []; + private subscriptions$: Subscription[] = []; + + constructor( + public previewImageService: PreviewImageService, + public unitsService: UnitsService, + public deviceService: DeviceService, + private spaceApi: SpaceApi, + private nftApi: NftApi, + ) {} + + public get collectionHighlightCardTypes(): typeof CollectionHighlightCardType { + return CollectionHighlightCardType; + } + + private fetchData(): void { + this.cancelSubscriptions(); + this.spaces$ = []; + this.collections.forEach((collection) => { + const space$ = new BehaviorSubject(undefined); + this.spaces$.push(space$); + this.subscriptions$.push( + this.spaceApi.listen(collection?.space).pipe(untilDestroyed(this)).subscribe(space$), + ); + }); + } + + public lessThan1Day(date?: Timestamp): boolean { + return dayjs(date?.toDate()).diff(dayjs(), 'day') <= 1; + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/components/collection/components/collection-highlight-card/collection-highlight-card.module.ts b/src/app/components/collection/components/collection-highlight-card/collection-highlight-card.module.ts new file mode 100644 index 0000000..d08c981 --- /dev/null +++ b/src/app/components/collection/components/collection-highlight-card/collection-highlight-card.module.ts @@ -0,0 +1,24 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { RelativeTimeModule } from '@core/pipes/relative-time/relative-time.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { CollectionHighlightCardComponent } from './collection-highlight-card.component'; + +@NgModule({ + declarations: [CollectionHighlightCardComponent], + imports: [ + CommonModule, + NzCardModule, + NzAvatarModule, + NzTableModule, + FormatTokenModule, + RouterModule, + RelativeTimeModule, + ], + exports: [CollectionHighlightCardComponent], +}) +export class CollectionHighlightCardModule {} diff --git a/src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html b/src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html new file mode 100644 index 0000000..75a02e8 --- /dev/null +++ b/src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html @@ -0,0 +1,329 @@ + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + +
+ + +
+
+ Once minted all NFT’s from this collection will be available to migrate to the selected + network by their owners. +
+ + + + +
+
+
+ Unsold NFT's +
+ +
+ + + + Keep the same price + + + Take Ownership + + + Set new price + + + Burn all unsold + + + +
+ +
+
+ +
+ +
+ Note that the collection ownership will be granted only to your profile. +
+
+ +
+ +
+ Once minted, a collection cannot be edited and a new NFT cannot be added to that + collection +
+
+ + + + + + + + + +
+ Once you agree with the terms, the generated address will remain active during the whole + process. +
+
+
+ + +
+
+ +
+ Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs + and we will burn all unsold NFT's (if selected). +
+
+ + + +
+ +
+ {{ + expiryTicker$ | async | countdownTime + }} + + remaining to make the transfer. + Expired +
+
+ + + + + + + + +
+
+ + +
+ + +
+
Transaction history
+ +
+
+
+ {{ t.date | Time }} +
+ {{ t.label }} +
{{ t.label }}
+
+
+
+
+
+ + +
+
+
+ +
+
+ NFT's from this collection are now being migrated. +
+
+ + +
+
+
+ + + + +
+
+ NFT's in collection +
+ +
{{ collection?.total || 0 | number : '1.0' }}
+
+ +
+
+
Total Storage Fee
+
(NFTs Storage Fee + Collection Storage Fee)
+
+ +
+
+ {{ targetAmount | formatToken : selectedNetwork : true | async }} +
+
+
+ ` +
diff --git a/src/app/components/collection/components/collection-mint-network/collection-mint-network.component.less b/src/app/components/collection/components/collection-mint-network/collection-mint-network.component.less new file mode 100644 index 0000000..ee55bca --- /dev/null +++ b/src/app/components/collection/components/collection-mint-network/collection-mint-network.component.less @@ -0,0 +1,10 @@ +.wen-radio-group { + wen-radio { + @apply block; + } + + input { + width: 100px; + margin-left: 10px; + } +} diff --git a/src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts b/src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts new file mode 100644 index 0000000..3af9ed5 --- /dev/null +++ b/src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts @@ -0,0 +1,375 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnInit, + Output, +} from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { CollectionApi } from '@api/collection.api'; +import { OrderApi } from '@api/order.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { TransactionStep } from '@components/transaction-steps/transaction-steps.component'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { StorageItem, removeItem, setItem } from '@core/utils'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/collection/services/helper.service'; +import { + Collection, + CollectionType, + NETWORK_DETAIL, + Network, + TRANSACTION_AUTO_EXPIRY_MS, + Timestamp, + Transaction, + TransactionType, + UnsoldMintingOptions, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, Subscription, interval } from 'rxjs'; + +export enum StepType { + SELECT = 'Select', + TRANSACTION = 'Transaction', + WAIT = 'Wait', + CONFIRMED = 'Confirmed', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-collection-mint-network', + templateUrl: './collection-mint-network.component.html', + styleUrls: ['./collection-mint-network.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CollectionMintNetworkComponent implements OnInit { + @Input() currentStep = StepType.SELECT; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() collection?: Collection; + @Output() wenOnClose = new EventEmitter(); + + public stepType = StepType; + public isCopied = false; + public selectedNetwork?: Network; + public unsoldControl = new FormControl(UnsoldMintingOptions.KEEP_PRICE); + public newPrice = new FormControl(''); + public cancelActiveSales = false; + public agreeTermsConditions = false; + public targetAddress?: string = 'dummy_address'; + public targetAmount?: number = 1200000; + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public environment = environment; + public invalidPayment = false; + public history: HistoryItem[] = []; + public receivedTransactions = false; + public steps: TransactionStep[] = [ + { label: $localize`Select network`, sequenceNum: 0 }, + { label: $localize`Make transaction`, sequenceNum: 1 }, + { label: $localize`Wait for confirmation`, sequenceNum: 2 }, + { label: $localize`Confirmed`, sequenceNum: 3 }, + ]; + private transSubscription?: Subscription; + private _isOpen = false; + + constructor( + public previewImageService: PreviewImageService, + public unitsService: UnitsService, + public transactionService: TransactionService, + public helper: HelperService, + private cd: ChangeDetectorRef, + private auth: AuthService, + private notification: NotificationService, + private collectionApi: CollectionApi, + private orderApi: OrderApi, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + // It's expired. + removeItem(StorageItem.CollectionMintTransaction); + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.WAIT; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`Payment received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + dayjs(), + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + dayjs(), + $localize`Transaction confirmed.`, + ); + this.receivedTransactions = true; + this.currentStep = StepType.CONFIRMED; + this.cd.markForCheck(); + }, 2000); + } + + const markInvalid = () => { + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid amount received. Refunding transaction...`, + ); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid transaction.You must gift storage deposit.`, + ); + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Invalid payment refunded.`, + val.payload?.walletReference?.chainReference, + ); + + // Let's go back to wait. With slight delay so they can see this. + markInvalid(); + } + + this.cd.markForCheck(); + }); + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + removeItem(StorageItem.CollectionMintTransaction); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public get lockTime(): number { + return TRANSACTION_AUTO_EXPIRY_MS / 1000 / 60; + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.SELECT; + this.cd.markForCheck(); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public isExpired(val?: Transaction | null): boolean { + if (!val?.createdOn) { + return false; + } + + const expiresOn: dayjs.Dayjs = dayjs(val.createdOn.toDate()).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + return expiresOn.isBefore(dayjs()) && val.type === TransactionType.ORDER; + } + + public async proceedWithMint(): Promise { + if ( + !this.collection || + this.selectedNetwork === undefined || + !this.agreeTermsConditions || + !this.cancelActiveSales + ) { + return; + } + + // TODO: add parameters + const params: any = { + collection: this.collection.uid, + unsoldMintingOptions: this.unsoldControl.value, + network: this.selectedNetwork, + }; + + if (this.unsoldControl.value === UnsoldMintingOptions.SET_NEW_PRICE) { + params.price = Number(this.newPrice.value) * NETWORK_DETAIL[this.selectedNetwork].divideBy; + } + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.collectionApi.mintCollection(sc), 'Order created.', finish) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + setItem(StorageItem.CollectionMintTransaction, val.uid); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + }); + }); + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public getCurrentSequenceNum(): number { + switch (this.currentStep) { + case StepType.SELECT: + return 0; + case StepType.TRANSACTION: + return 1; + case StepType.WAIT: + return 2; + case StepType.CONFIRMED: + return 3; + default: + return 0; + } + } + + public get collectionTypes(): typeof CollectionType { + return CollectionType; + } + + public get unsoldNftOptions(): typeof UnsoldMintingOptions { + return UnsoldMintingOptions; + } +} diff --git a/src/app/components/collection/components/collection-mint-network/collection-mint-network.module.ts b/src/app/components/collection/components/collection-mint-network/collection-mint-network.module.ts new file mode 100644 index 0000000..152a77c --- /dev/null +++ b/src/app/components/collection/components/collection-mint-network/collection-mint-network.module.ts @@ -0,0 +1,48 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { RadioModule } from '@components/radio/radio.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { TransactionStepsModule } from '@components/transaction-steps/transaction-steps.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzInputNumberModule } from 'ng-zorro-antd/input-number'; +import { NzRadioModule } from 'ng-zorro-antd/radio'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { CollectionMintNetworkComponent } from './collection-mint-network.component'; + +@NgModule({ + declarations: [CollectionMintNetworkComponent], + imports: [ + CommonModule, + ModalDrawerModule, + NzButtonModule, + IconModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + NzAlertModule, + CountdownTimeModule, + TimeModule, + NzAvatarModule, + NetworkModule, + TransactionStepsModule, + NzRadioModule, + RadioModule, + FormatTokenModule, + NzToolTipModule, + FormsModule, + ReactiveFormsModule, + NzInputNumberModule, + ], + providers: [PercentPipe], + exports: [CollectionMintNetworkComponent], +}) +export class CollectionMintNetworkModule {} diff --git a/src/app/components/collection/components/collection-status/collection-status.component.html b/src/app/components/collection/components/collection-status/collection-status.component.html new file mode 100644 index 0000000..578a1e6 --- /dev/null +++ b/src/app/components/collection/components/collection-status/collection-status.component.html @@ -0,0 +1,18 @@ +Pending + +Rejected + +Available diff --git a/src/app/components/collection/components/collection-status/collection-status.component.less b/src/app/components/collection/components/collection-status/collection-status.component.less new file mode 100644 index 0000000..e531d1d --- /dev/null +++ b/src/app/components/collection/components/collection-status/collection-status.component.less @@ -0,0 +1,3 @@ +.ant-card-meta-avatar { + float: none; +} diff --git a/src/app/components/collection/components/collection-status/collection-status.component.ts b/src/app/components/collection/components/collection-status/collection-status.component.ts new file mode 100644 index 0000000..8e0e8d2 --- /dev/null +++ b/src/app/components/collection/components/collection-status/collection-status.component.ts @@ -0,0 +1,12 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { Collection } from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-collection-status', + templateUrl: './collection-status.component.html', + styleUrls: ['./collection-status.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CollectionStatusComponent { + @Input() collection?: Collection | null; +} diff --git a/src/app/components/collection/components/collection-status/collection-status.module.ts b/src/app/components/collection/components/collection-status/collection-status.module.ts new file mode 100644 index 0000000..1f4795c --- /dev/null +++ b/src/app/components/collection/components/collection-status/collection-status.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { CollectionStatusComponent } from './collection-status.component'; + +@NgModule({ + exports: [CollectionStatusComponent], + declarations: [CollectionStatusComponent], + imports: [CommonModule, NzTagModule], +}) +export class CollectionStatusModule {} diff --git a/src/app/components/collection/components/select-collection/select-collection.component.html b/src/app/components/collection/components/select-collection/select-collection.component.html new file mode 100644 index 0000000..b84c716 --- /dev/null +++ b/src/app/components/collection/components/select-collection/select-collection.component.html @@ -0,0 +1,151 @@ + + + + + + + + {{ c.label }} + + + +
+
+ + + + + +
+ + {{ c.nzLabel }} +
+
+
+
+ + +
+ +
Select a Collection
+ +
+
+ + + +
+ +
+ +
+ No results for "{{ searchControl.value }}" +
+ +
+
+
+ + + + +
+ {{ opt.label }} + +
+
+
+
+
diff --git a/src/app/components/collection/components/select-collection/select-collection.component.less b/src/app/components/collection/components/select-collection/select-collection.component.less new file mode 100644 index 0000000..87fc81c --- /dev/null +++ b/src/app/components/collection/components/select-collection/select-collection.component.less @@ -0,0 +1,3 @@ +::ng-deep .select-search-margin .ant-select-selection-search { + @apply ml-8; +} diff --git a/src/app/components/collection/components/select-collection/select-collection.component.ts b/src/app/components/collection/components/select-collection/select-collection.component.ts new file mode 100644 index 0000000..c30a54f --- /dev/null +++ b/src/app/components/collection/components/select-collection/select-collection.component.ts @@ -0,0 +1,116 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input, + OnInit, +} from '@angular/core'; +import { FormControl, NG_VALUE_ACCESSOR, Validators } from '@angular/forms'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; + +export interface SelectCollectionOption { + label: string; + value: string; + img?: string; +} + +export const DEFAULT_COLLECTION: SelectCollectionOption = { + label: $localize`All Collections`, + value: 'all', +}; + +@UntilDestroy() +@Component({ + selector: 'wen-select-collection', + templateUrl: './select-collection.component.html', + styleUrls: ['./select-collection.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [ + { + provide: NG_VALUE_ACCESSOR, + multi: true, + useExisting: SelectCollectionComponent, + }, + ], +}) +export class SelectCollectionComponent implements OnInit { + @Input() size: 'small' | 'large' = 'small'; + + @Input() + set collections(value: SelectCollectionOption[]) { + this._collections = [DEFAULT_COLLECTION, ...value]; + this.setShownCollections(); + } + + public get collections(): SelectCollectionOption[] { + return this._collections; + } + + public onChange: (v: string | undefined) => undefined = () => undefined; + public disabled = false; + public collectionControl: FormControl = new FormControl('', Validators.required); + public searchControl: FormControl = new FormControl('', Validators.required); + public isSelectOpen = false; + public isDrawerOpen = false; + public shownCollections: SelectCollectionOption[] = []; + private _collections: SelectCollectionOption[] = []; + + constructor( + private cd: ChangeDetectorRef, + public previewImageService: PreviewImageService, + public deviceService: DeviceService, + ) {} + + public ngOnInit(): void { + this.collectionControl.valueChanges.pipe(untilDestroyed(this)).subscribe((value: string) => { + this.onChange(value); + this.isSelectOpen = false; + this.isDrawerOpen = false; + this.cd.markForCheck(); + }); + + this.searchControl.valueChanges.pipe(untilDestroyed(this)).subscribe(() => { + this.setShownCollections(); + this.cd.markForCheck(); + }); + } + + public registerOnChange(fn: (v: string | undefined) => undefined): void { + this.onChange = fn; + } + + public registerOnTouched(): void { + return undefined; + } + + public setDisabledState(isDisabled: boolean): void { + this.disabled = isDisabled; + } + + public writeValue(value: string): void { + this.collectionControl.setValue(value); + this.cd.markForCheck(); + } + + public trackByValue(index: number, item: any): number { + return item.value; + } + + public onSelectClick(): void { + this.isSelectOpen = this.deviceService.isDesktop$.getValue(); + this.isDrawerOpen = this.deviceService.isMobile$.getValue(); + this.cd.markForCheck(); + } + + public getCollection(uid: string): SelectCollectionOption | undefined { + return this.collections.find((collection) => collection.value === uid); + } + + private setShownCollections(): void { + this.shownCollections = this.collections.filter((collection) => + collection.label.toLowerCase().includes(this.searchControl.value.toLowerCase()), + ); + } +} diff --git a/src/app/components/collection/components/select-collection/select-collection.module.ts b/src/app/components/collection/components/select-collection/select-collection.module.ts new file mode 100644 index 0000000..e34520c --- /dev/null +++ b/src/app/components/collection/components/select-collection/select-collection.module.ts @@ -0,0 +1,29 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { IconModule } from '@components/icon/icon.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { SelectCollectionComponent } from './select-collection.component'; + +@NgModule({ + declarations: [SelectCollectionComponent], + imports: [ + CommonModule, + IconModule, + NzDrawerModule, + NzModalModule, + NzAvatarModule, + NzInputModule, + NzSelectModule, + FormsModule, + ReactiveFormsModule, + NzFormModule, + ], + exports: [SelectCollectionComponent], +}) +export class SelectCollectionModule {} diff --git a/src/app/components/confirm-modal/confirm-modal.component.html b/src/app/components/confirm-modal/confirm-modal.component.html new file mode 100644 index 0000000..f94e74f --- /dev/null +++ b/src/app/components/confirm-modal/confirm-modal.component.html @@ -0,0 +1,58 @@ + + +
+ + + + +
+
{{ title }}
+
+ {{ description }} +
+ +
+ +
+ {{ warning }} +
+
+ +
+ + +
+
+
+
+
diff --git a/src/app/components/confirm-modal/confirm-modal.component.less b/src/app/components/confirm-modal/confirm-modal.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/confirm-modal/confirm-modal.component.ts b/src/app/components/confirm-modal/confirm-modal.component.ts new file mode 100644 index 0000000..362e40f --- /dev/null +++ b/src/app/components/confirm-modal/confirm-modal.component.ts @@ -0,0 +1,54 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; + +export enum ConfirmModalType { + WARNING = 'Warning', +} + +@Component({ + selector: 'wen-confirm-modal', + templateUrl: './confirm-modal.component.html', + styleUrls: ['./confirm-modal.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ConfirmModalComponent { + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() type?: ConfirmModalType; + @Input() title = $localize`Are you sure?`; + @Input() description?: string; + @Input() warning?: string; + @Input() declineLabel = $localize`Close`; + @Input() confirmLabel = $localize`Confirm`; + @Output() wenOnClose = new EventEmitter(); + + private _isOpen = false; + + constructor(private cd: ChangeDetectorRef) {} + + public reset(): void { + this.isOpen = false; + this.cd.markForCheck(); + } + + public close(value: boolean): void { + this.reset(); + this.wenOnClose.next(value); + } + + public get confirmModalTypes(): typeof ConfirmModalType { + return ConfirmModalType; + } +} diff --git a/src/app/components/confirm-modal/confirm-modal.module.ts b/src/app/components/confirm-modal/confirm-modal.module.ts new file mode 100644 index 0000000..787b229 --- /dev/null +++ b/src/app/components/confirm-modal/confirm-modal.module.ts @@ -0,0 +1,13 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { ConfirmModalComponent } from './confirm-modal.component'; + +@NgModule({ + declarations: [ConfirmModalComponent], + imports: [CommonModule, NzModalModule, IconModule, NzButtonModule], + exports: [ConfirmModalComponent], +}) +export class ConfirmModalModule {} diff --git a/src/app/components/connect-wallet/connect-wallet.component.html b/src/app/components/connect-wallet/connect-wallet.component.html new file mode 100644 index 0000000..3e5e9d7 --- /dev/null +++ b/src/app/components/connect-wallet/connect-wallet.component.html @@ -0,0 +1,8 @@ +
+ +
Connect wallet
+
diff --git a/src/app/components/connect-wallet/connect-wallet.component.less b/src/app/components/connect-wallet/connect-wallet.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/components/connect-wallet/connect-wallet.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/components/connect-wallet/connect-wallet.component.ts b/src/app/components/connect-wallet/connect-wallet.component.ts new file mode 100644 index 0000000..8d4ecf5 --- /dev/null +++ b/src/app/components/connect-wallet/connect-wallet.component.ts @@ -0,0 +1,14 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { AuthService } from '@components/auth/services/auth.service'; + +@Component({ + selector: 'wen-connect-wallet', + templateUrl: './connect-wallet.component.html', + styleUrls: ['./connect-wallet.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ConnectWalletComponent { + @Input() wrapperClass = ''; + + constructor(public auth: AuthService) {} +} diff --git a/src/app/components/connect-wallet/connect-wallet.module.ts b/src/app/components/connect-wallet/connect-wallet.module.ts new file mode 100644 index 0000000..4f03229 --- /dev/null +++ b/src/app/components/connect-wallet/connect-wallet.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { ConnectWalletComponent } from './connect-wallet.component'; + +@NgModule({ + declarations: [ConnectWalletComponent], + imports: [CommonModule, IconModule], + exports: [ConnectWalletComponent], +}) +export class ConnectWalletModule {} diff --git a/src/app/components/countdown/countdown.component.html b/src/app/components/countdown/countdown.component.html new file mode 100644 index 0000000..4b067be --- /dev/null +++ b/src/app/components/countdown/countdown.component.html @@ -0,0 +1,98 @@ +
+
+ +
+
{{ title }}
+
+ {{ finalDate | date : 'long' }} +
+
+
+ +
+
+
+ {{ getCountdownDays() }} +
+
d
+
days
+
+
+
+ {{ getCountdownHours() }} +
+
h
+
hours
+
+
+
+ {{ getCountdownMin() }} +
+
m
+
min
+
+
+
+ {{ getCountdownSec() }} +
+
s
+
sec
+
+
+
diff --git a/src/app/components/countdown/countdown.component.less b/src/app/components/countdown/countdown.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/countdown/countdown.component.ts b/src/app/components/countdown/countdown.component.ts new file mode 100644 index 0000000..a8309ac --- /dev/null +++ b/src/app/components/countdown/countdown.component.ts @@ -0,0 +1,88 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input, + OnInit, +} from '@angular/core'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import dayjs from 'dayjs'; +import { interval } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-countdown', + templateUrl: './countdown.component.html', + styleUrls: ['./countdown.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CountdownComponent implements OnInit { + @Input() wrapperClassName = ''; + @Input() tabClassName = ''; + @Input() title = ''; + + @Input() + set finalDate(d: Date | undefined) { + this._finalDate = dayjs(d || new Date()); + } + + get finalDate(): Date { + return (this._finalDate || dayjs(new Date())).toDate(); + } + + @Input() size: 'large' | 'default' | 'small' = 'default'; + @Input() showDate = true; + + private _finalDate?: dayjs.Dayjs; + + constructor(private cd: ChangeDetectorRef) {} + + ngOnInit(): void { + interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.cd.markForCheck(); + }); + } + + public getCountdownDays(): number { + if (!this._finalDate) { + return 0; + } + + return this._finalDate.diff(dayjs(), 'days'); + } + + public getCountdownHours(): number { + if (!this._finalDate) { + return 0; + } + + let hours = this._finalDate.diff(dayjs(), 'hour'); + const days = Math.floor(hours / 24); + hours = hours - days * 24; + return hours; + } + + public getCountdownMin(): number { + if (!this._finalDate) { + return 0; + } + + let minutes = this._finalDate.diff(dayjs(), 'minute'); + const hours = Math.floor(minutes / 60); + minutes = minutes - hours * 60; + return minutes; + } + + public getCountdownSec(): number { + if (!this._finalDate) { + return 0; + } + + let seconds = this._finalDate.diff(dayjs(), 'seconds'); + const minutes = Math.floor(seconds / 60); + seconds = seconds - minutes * 60; + return seconds; + } +} diff --git a/src/app/components/countdown/countdown.module.ts b/src/app/components/countdown/countdown.module.ts new file mode 100644 index 0000000..d55966f --- /dev/null +++ b/src/app/components/countdown/countdown.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { CountdownComponent } from './countdown.component'; + +@NgModule({ + declarations: [CountdownComponent], + imports: [CommonModule, IconModule], + exports: [CountdownComponent], +}) +export class CountdownModule {} diff --git a/src/app/components/date-tag/date-tag.component.html b/src/app/components/date-tag/date-tag.component.html new file mode 100644 index 0000000..b2da93e --- /dev/null +++ b/src/app/components/date-tag/date-tag.component.html @@ -0,0 +1,6 @@ + + + {{ title }} {{ date || null | relativeTime }} + diff --git a/src/app/components/date-tag/date-tag.component.less b/src/app/components/date-tag/date-tag.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/date-tag/date-tag.component.ts b/src/app/components/date-tag/date-tag.component.ts new file mode 100644 index 0000000..c215a04 --- /dev/null +++ b/src/app/components/date-tag/date-tag.component.ts @@ -0,0 +1,13 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { Timestamp } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +@Component({ + selector: 'wen-date-tag', + templateUrl: './date-tag.component.html', + styleUrls: ['./date-tag.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class DateTagComponent { + @Input() public title = $localize`Ends`; + @Input() public date?: dayjs.Dayjs | Timestamp | null; +} diff --git a/src/app/components/date-tag/date-tag.module.ts b/src/app/components/date-tag/date-tag.module.ts new file mode 100644 index 0000000..09ec9f2 --- /dev/null +++ b/src/app/components/date-tag/date-tag.module.ts @@ -0,0 +1,14 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RelativeTimeModule } from '@core/pipes/relative-time/relative-time.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { DateTagComponent } from './date-tag.component'; + +@NgModule({ + declarations: [DateTagComponent], + imports: [CommonModule, NzAvatarModule, NzTagModule, NzIconModule, RelativeTimeModule], + exports: [DateTagComponent], +}) +export class DateTagModule {} diff --git a/src/app/components/description/description.component.html b/src/app/components/description/description.component.html new file mode 100644 index 0000000..00a49c3 --- /dev/null +++ b/src/app/components/description/description.component.html @@ -0,0 +1,102 @@ + +
+ +
+ +
+
{{ item.title }}
+
+ +
+ {{ item.link.label }} +
+
+ +
+ {{ item.value }} +
+ +
+ {{ item.value }} +
+ + + {{ item.value }} + + +
+ + {{ item.link.label }} + + + {{ item.extraValue }} +
+ +
+
+
+
diff --git a/src/app/components/description/description.component.less b/src/app/components/description/description.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/description/description.component.ts b/src/app/components/description/description.component.ts new file mode 100644 index 0000000..9ee55b6 --- /dev/null +++ b/src/app/components/description/description.component.ts @@ -0,0 +1,52 @@ +import { ChangeDetectionStrategy, Component, Input, TemplateRef } from '@angular/core'; +import { DeviceService } from '@core/services/device'; + +export enum DescriptionItemType { + DEFAULT = 'Default', + DEFAULT_NO_TRUNCATE = 'DefaultNoTruncate', + BUTTON = 'Button', + LINK = 'Link', +} + +export interface DescriptionItem { + title: string | number; + type?: DescriptionItemType; + value?: string | number | null; + extraValue?: string | number | null; + link?: { + label: string | number; + href: string; + }; + titleIcon?: TemplateRef; + titleTemplate?: TemplateRef; + valueTemplate?: TemplateRef; + backgroundClass?: string; + action?: () => void; +} + +@Component({ + selector: 'wen-description', + templateUrl: './description.component.html', + styleUrls: ['./description.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class DescriptionComponent { + @Input() title? = ''; + + @Input() + set items(value: Array) { + this._items = value.filter((r) => !!r) as DescriptionItem[]; + } + + get items(): Array { + return this._items; + } + + private _items: Array = []; + + constructor(public deviceService: DeviceService) {} + + public get descriptionItemTypes(): typeof DescriptionItemType { + return DescriptionItemType; + } +} diff --git a/src/app/components/description/description.module.ts b/src/app/components/description/description.module.ts new file mode 100644 index 0000000..15cf407 --- /dev/null +++ b/src/app/components/description/description.module.ts @@ -0,0 +1,14 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { CollapseModule } from '@components/collapse/collapse.module'; +import { IconModule } from '@components/icon/icon.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { DescriptionComponent } from './description.component'; + +@NgModule({ + declarations: [DescriptionComponent], + imports: [CommonModule, NzCardModule, IconModule, CollapseModule, NzButtonModule], + exports: [DescriptionComponent], +}) +export class DescriptionModule {} diff --git a/src/app/components/drawer-toggle/drawer-toggle.component.html b/src/app/components/drawer-toggle/drawer-toggle.component.html new file mode 100644 index 0000000..f6384f9 --- /dev/null +++ b/src/app/components/drawer-toggle/drawer-toggle.component.html @@ -0,0 +1,5 @@ + diff --git a/src/app/components/drawer-toggle/drawer-toggle.component.less b/src/app/components/drawer-toggle/drawer-toggle.component.less new file mode 100644 index 0000000..6131569 --- /dev/null +++ b/src/app/components/drawer-toggle/drawer-toggle.component.less @@ -0,0 +1,3 @@ +.drawer-toggle-shadow { + box-shadow: 0px 0px 16px rgba(0, 0, 0, 0.25); +} diff --git a/src/app/components/drawer-toggle/drawer-toggle.component.ts b/src/app/components/drawer-toggle/drawer-toggle.component.ts new file mode 100644 index 0000000..5d48628 --- /dev/null +++ b/src/app/components/drawer-toggle/drawer-toggle.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-drawer-toggle', + templateUrl: './drawer-toggle.component.html', + styleUrls: ['./drawer-toggle.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class DrawerToggleComponent { + @Input() label = ''; +} diff --git a/src/app/components/drawer-toggle/drawer-toggle.module.ts b/src/app/components/drawer-toggle/drawer-toggle.module.ts new file mode 100644 index 0000000..0f5bec8 --- /dev/null +++ b/src/app/components/drawer-toggle/drawer-toggle.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { DrawerToggleComponent } from './drawer-toggle.component'; + +@NgModule({ + declarations: [DrawerToggleComponent], + imports: [CommonModule], + exports: [DrawerToggleComponent], +}) +export class DrawerToggleModule {} diff --git a/src/app/components/drawer/drawer.component.html b/src/app/components/drawer/drawer.component.html new file mode 100644 index 0000000..171446c --- /dev/null +++ b/src/app/components/drawer/drawer.component.html @@ -0,0 +1,8 @@ +
+
+ +
+
diff --git a/src/app/components/drawer/drawer.component.less b/src/app/components/drawer/drawer.component.less new file mode 100644 index 0000000..e4d2f38 --- /dev/null +++ b/src/app/components/drawer/drawer.component.less @@ -0,0 +1,4 @@ +:host { + @apply block; + z-index: 9999; +} diff --git a/src/app/components/drawer/drawer.component.ts b/src/app/components/drawer/drawer.component.ts new file mode 100644 index 0000000..1f92d0f --- /dev/null +++ b/src/app/components/drawer/drawer.component.ts @@ -0,0 +1,12 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-drawer', + templateUrl: './drawer.component.html', + styleUrls: ['./drawer.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class DrawerComponent { + @Input() isVisible: boolean | null = false; + @Input() bodyClasses = ''; +} diff --git a/src/app/components/drawer/drawer.module.ts b/src/app/components/drawer/drawer.module.ts new file mode 100644 index 0000000..a13a407 --- /dev/null +++ b/src/app/components/drawer/drawer.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { DrawerComponent } from './drawer.component'; + +@NgModule({ + declarations: [DrawerComponent], + imports: [CommonModule], + exports: [DrawerComponent], +}) +export class DrawerModule {} diff --git a/src/app/components/dropdown-tabs/dropdown-tabs.component.html b/src/app/components/dropdown-tabs/dropdown-tabs.component.html new file mode 100644 index 0000000..44e1eac --- /dev/null +++ b/src/app/components/dropdown-tabs/dropdown-tabs.component.html @@ -0,0 +1,30 @@ + + + +
+ +
+
diff --git a/src/app/components/dropdown-tabs/dropdown-tabs.component.less b/src/app/components/dropdown-tabs/dropdown-tabs.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/dropdown-tabs/dropdown-tabs.component.ts b/src/app/components/dropdown-tabs/dropdown-tabs.component.ts new file mode 100644 index 0000000..1af5694 --- /dev/null +++ b/src/app/components/dropdown-tabs/dropdown-tabs.component.ts @@ -0,0 +1,18 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { TabSection } from '@components/tabs/tabs.component'; + +@Component({ + selector: 'wen-dropdown-tabs', + templateUrl: './dropdown-tabs.component.html', + styleUrls: ['./dropdown-tabs.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class DropdownTabsComponent { + @Input() tabs: TabSection[] = []; + @Input() selectedTab?: TabSection; + public isVisible = false; + + public trackByLabel(index: number, tab: TabSection): string { + return tab.label; + } +} diff --git a/src/app/components/dropdown-tabs/dropdown-tabs.module.ts b/src/app/components/dropdown-tabs/dropdown-tabs.module.ts new file mode 100644 index 0000000..9cb81c1 --- /dev/null +++ b/src/app/components/dropdown-tabs/dropdown-tabs.module.ts @@ -0,0 +1,14 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { IconModule } from '@components/icon/icon.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzDropDownModule } from 'ng-zorro-antd/dropdown'; +import { DropdownTabsComponent } from './dropdown-tabs.component'; + +@NgModule({ + declarations: [DropdownTabsComponent], + imports: [CommonModule, RouterModule, NzButtonModule, NzDropDownModule, IconModule], + exports: [DropdownTabsComponent], +}) +export class DropdownTabsModule {} diff --git a/src/app/components/fixed-create-button/fixed-create-button.component.html b/src/app/components/fixed-create-button/fixed-create-button.component.html new file mode 100644 index 0000000..3e900b8 --- /dev/null +++ b/src/app/components/fixed-create-button/fixed-create-button.component.html @@ -0,0 +1,6 @@ +
+ +
diff --git a/src/app/components/fixed-create-button/fixed-create-button.component.less b/src/app/components/fixed-create-button/fixed-create-button.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/fixed-create-button/fixed-create-button.component.ts b/src/app/components/fixed-create-button/fixed-create-button.component.ts new file mode 100644 index 0000000..66b0d90 --- /dev/null +++ b/src/app/components/fixed-create-button/fixed-create-button.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-fixed-create-button', + templateUrl: './fixed-create-button.component.html', + styleUrls: ['./fixed-create-button.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class FixedCreateButtonComponent { + @Input() route: string | string[] = ''; +} diff --git a/src/app/components/fixed-create-button/fixed-create-button.module.ts b/src/app/components/fixed-create-button/fixed-create-button.module.ts new file mode 100644 index 0000000..f4a592a --- /dev/null +++ b/src/app/components/fixed-create-button/fixed-create-button.module.ts @@ -0,0 +1,12 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { IconModule } from '@components/icon/icon.module'; +import { FixedCreateButtonComponent } from './fixed-create-button.component'; + +@NgModule({ + declarations: [FixedCreateButtonComponent], + imports: [CommonModule, IconModule, RouterModule], + exports: [FixedCreateButtonComponent], +}) +export class FixedCreateButtonModule {} diff --git a/src/app/components/icon/air-blow/air-blow.component.html b/src/app/components/icon/air-blow/air-blow.component.html new file mode 100644 index 0000000..44a1021 --- /dev/null +++ b/src/app/components/icon/air-blow/air-blow.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/air-blow/air-blow.component.less b/src/app/components/icon/air-blow/air-blow.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/air-blow/air-blow.component.ts b/src/app/components/icon/air-blow/air-blow.component.ts new file mode 100644 index 0000000..1ada39b --- /dev/null +++ b/src/app/components/icon/air-blow/air-blow.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-air-blow', + templateUrl: './air-blow.component.html', + styleUrls: ['./air-blow.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AirBlowIconComponent {} diff --git a/src/app/components/icon/alert-octagon/alert-octagon.component.html b/src/app/components/icon/alert-octagon/alert-octagon.component.html new file mode 100644 index 0000000..8a9acf4 --- /dev/null +++ b/src/app/components/icon/alert-octagon/alert-octagon.component.html @@ -0,0 +1,31 @@ + + + + + + + diff --git a/src/app/components/icon/alert-octagon/alert-octagon.component.less b/src/app/components/icon/alert-octagon/alert-octagon.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/alert-octagon/alert-octagon.component.ts b/src/app/components/icon/alert-octagon/alert-octagon.component.ts new file mode 100644 index 0000000..88e7f42 --- /dev/null +++ b/src/app/components/icon/alert-octagon/alert-octagon.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-alert-octagon', + templateUrl: './alert-octagon.component.html', + styleUrls: ['./alert-octagon.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AlertOctagonIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/angle-down/angle-down.component.html b/src/app/components/icon/angle-down/angle-down.component.html new file mode 100644 index 0000000..390449e --- /dev/null +++ b/src/app/components/icon/angle-down/angle-down.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/angle-down/angle-down.component.less b/src/app/components/icon/angle-down/angle-down.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/angle-down/angle-down.component.ts b/src/app/components/icon/angle-down/angle-down.component.ts new file mode 100644 index 0000000..828d6bf --- /dev/null +++ b/src/app/components/icon/angle-down/angle-down.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-angle-down', + templateUrl: './angle-down.component.html', + styleUrls: ['./angle-down.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AngleDownIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/angle-left/angle-left.component.html b/src/app/components/icon/angle-left/angle-left.component.html new file mode 100644 index 0000000..153f97f --- /dev/null +++ b/src/app/components/icon/angle-left/angle-left.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/angle-left/angle-left.component.less b/src/app/components/icon/angle-left/angle-left.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/angle-left/angle-left.component.ts b/src/app/components/icon/angle-left/angle-left.component.ts new file mode 100644 index 0000000..ced18af --- /dev/null +++ b/src/app/components/icon/angle-left/angle-left.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-angle-left', + templateUrl: './angle-left.component.html', + styleUrls: ['./angle-left.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AngleLeftIconComponent {} diff --git a/src/app/components/icon/angle-right-small/angle-right-small.component.html b/src/app/components/icon/angle-right-small/angle-right-small.component.html new file mode 100644 index 0000000..1ae3db5 --- /dev/null +++ b/src/app/components/icon/angle-right-small/angle-right-small.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/angle-right-small/angle-right-small.component.less b/src/app/components/icon/angle-right-small/angle-right-small.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/angle-right-small/angle-right-small.component.ts b/src/app/components/icon/angle-right-small/angle-right-small.component.ts new file mode 100644 index 0000000..02afe1e --- /dev/null +++ b/src/app/components/icon/angle-right-small/angle-right-small.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-angle-right-small', + templateUrl: './angle-right-small.component.html', + styleUrls: ['./angle-right-small.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AngleRightSmallIconComponent {} diff --git a/src/app/components/icon/angle-right/angle-right.component.html b/src/app/components/icon/angle-right/angle-right.component.html new file mode 100644 index 0000000..f186916 --- /dev/null +++ b/src/app/components/icon/angle-right/angle-right.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/angle-right/angle-right.component.less b/src/app/components/icon/angle-right/angle-right.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/angle-right/angle-right.component.ts b/src/app/components/icon/angle-right/angle-right.component.ts new file mode 100644 index 0000000..7c7d111 --- /dev/null +++ b/src/app/components/icon/angle-right/angle-right.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-angle-right', + templateUrl: './angle-right.component.html', + styleUrls: ['./angle-right.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AngleRightIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/angle-up/angle-up.component.html b/src/app/components/icon/angle-up/angle-up.component.html new file mode 100644 index 0000000..f83fa91 --- /dev/null +++ b/src/app/components/icon/angle-up/angle-up.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/angle-up/angle-up.component.less b/src/app/components/icon/angle-up/angle-up.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/angle-up/angle-up.component.ts b/src/app/components/icon/angle-up/angle-up.component.ts new file mode 100644 index 0000000..51abcce --- /dev/null +++ b/src/app/components/icon/angle-up/angle-up.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-angle-up', + templateUrl: './angle-up.component.html', + styleUrls: ['./angle-up.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AngleUpIconComponent {} diff --git a/src/app/components/icon/arrow-right/arrow-right.component.html b/src/app/components/icon/arrow-right/arrow-right.component.html new file mode 100644 index 0000000..a8e61f4 --- /dev/null +++ b/src/app/components/icon/arrow-right/arrow-right.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/arrow-right/arrow-right.component.less b/src/app/components/icon/arrow-right/arrow-right.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/arrow-right/arrow-right.component.ts b/src/app/components/icon/arrow-right/arrow-right.component.ts new file mode 100644 index 0000000..9754142 --- /dev/null +++ b/src/app/components/icon/arrow-right/arrow-right.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-arrow-right', + templateUrl: './arrow-right.component.html', + styleUrls: ['./arrow-right.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ArrowRightIconComponent {} diff --git a/src/app/components/icon/assembly/assembly.component.html b/src/app/components/icon/assembly/assembly.component.html new file mode 100644 index 0000000..18ac45f --- /dev/null +++ b/src/app/components/icon/assembly/assembly.component.html @@ -0,0 +1,16 @@ + + + + + diff --git a/src/app/components/icon/assembly/assembly.component.less b/src/app/components/icon/assembly/assembly.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/assembly/assembly.component.ts b/src/app/components/icon/assembly/assembly.component.ts new file mode 100644 index 0000000..d6a5fdc --- /dev/null +++ b/src/app/components/icon/assembly/assembly.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-assembly', + templateUrl: './assembly.component.html', + styleUrls: ['./assembly.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AssemblyIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/award/award.component.html b/src/app/components/icon/award/award.component.html new file mode 100644 index 0000000..0aaa52e --- /dev/null +++ b/src/app/components/icon/award/award.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/award/award.component.less b/src/app/components/icon/award/award.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/award/award.component.ts b/src/app/components/icon/award/award.component.ts new file mode 100644 index 0000000..86ccc36 --- /dev/null +++ b/src/app/components/icon/award/award.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-award', + templateUrl: './award.component.html', + styleUrls: ['./award.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AwardIconComponent {} diff --git a/src/app/components/icon/bell/bell.component.html b/src/app/components/icon/bell/bell.component.html new file mode 100644 index 0000000..ce53232 --- /dev/null +++ b/src/app/components/icon/bell/bell.component.html @@ -0,0 +1,11 @@ + + + + + diff --git a/src/app/components/icon/bell/bell.component.less b/src/app/components/icon/bell/bell.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/bell/bell.component.ts b/src/app/components/icon/bell/bell.component.ts new file mode 100644 index 0000000..20c4131 --- /dev/null +++ b/src/app/components/icon/bell/bell.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-bell', + templateUrl: './bell.component.html', + styleUrls: ['./bell.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class BellIconComponent {} diff --git a/src/app/components/icon/calendar/calendar.component.html b/src/app/components/icon/calendar/calendar.component.html new file mode 100644 index 0000000..e793e9d --- /dev/null +++ b/src/app/components/icon/calendar/calendar.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/calendar/calendar.component.less b/src/app/components/icon/calendar/calendar.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/calendar/calendar.component.ts b/src/app/components/icon/calendar/calendar.component.ts new file mode 100644 index 0000000..cec4d40 --- /dev/null +++ b/src/app/components/icon/calendar/calendar.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-calendar', + templateUrl: './calendar.component.html', + styleUrls: ['./calendar.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CalendarIconComponent {} diff --git a/src/app/components/icon/check-circle/check-circle.component.html b/src/app/components/icon/check-circle/check-circle.component.html new file mode 100644 index 0000000..7c3752a --- /dev/null +++ b/src/app/components/icon/check-circle/check-circle.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/check-circle/check-circle.component.less b/src/app/components/icon/check-circle/check-circle.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/check-circle/check-circle.component.ts b/src/app/components/icon/check-circle/check-circle.component.ts new file mode 100644 index 0000000..f78fa9c --- /dev/null +++ b/src/app/components/icon/check-circle/check-circle.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-check-circle', + templateUrl: './check-circle.component.html', + styleUrls: ['./check-circle.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CheckCircleIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/check/check.component.html b/src/app/components/icon/check/check.component.html new file mode 100644 index 0000000..b6653b6 --- /dev/null +++ b/src/app/components/icon/check/check.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/check/check.component.less b/src/app/components/icon/check/check.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/check/check.component.ts b/src/app/components/icon/check/check.component.ts new file mode 100644 index 0000000..cd4e441 --- /dev/null +++ b/src/app/components/icon/check/check.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-check', + templateUrl: './check.component.html', + styleUrls: ['./check.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CheckIconComponent { + @Input() size = 16; +} diff --git a/src/app/components/icon/close/close.component.html b/src/app/components/icon/close/close.component.html new file mode 100644 index 0000000..6a1f56e --- /dev/null +++ b/src/app/components/icon/close/close.component.html @@ -0,0 +1,24 @@ + + + + + + diff --git a/src/app/components/icon/close/close.component.less b/src/app/components/icon/close/close.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/close/close.component.ts b/src/app/components/icon/close/close.component.ts new file mode 100644 index 0000000..0ea92dd --- /dev/null +++ b/src/app/components/icon/close/close.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-close', + templateUrl: './close.component.html', + styleUrls: ['./close.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CloseIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/coin/coin.component.html b/src/app/components/icon/coin/coin.component.html new file mode 100644 index 0000000..8e65a44 --- /dev/null +++ b/src/app/components/icon/coin/coin.component.html @@ -0,0 +1,18 @@ + + + + + + diff --git a/src/app/components/icon/coin/coin.component.less b/src/app/components/icon/coin/coin.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/coin/coin.component.ts b/src/app/components/icon/coin/coin.component.ts new file mode 100644 index 0000000..c641e4e --- /dev/null +++ b/src/app/components/icon/coin/coin.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-coin', + templateUrl: './coin.component.html', + styleUrls: ['./coin.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CoinIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/collapse-arrow/collapse-arrow.component.html b/src/app/components/icon/collapse-arrow/collapse-arrow.component.html new file mode 100644 index 0000000..f9187d1 --- /dev/null +++ b/src/app/components/icon/collapse-arrow/collapse-arrow.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/collapse-arrow/collapse-arrow.component.less b/src/app/components/icon/collapse-arrow/collapse-arrow.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/collapse-arrow/collapse-arrow.component.ts b/src/app/components/icon/collapse-arrow/collapse-arrow.component.ts new file mode 100644 index 0000000..9959c2e --- /dev/null +++ b/src/app/components/icon/collapse-arrow/collapse-arrow.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-collapse-arrow', + templateUrl: './collapse-arrow.component.html', + styleUrls: ['./collapse-arrow.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CollapseArrowIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/collection/collection.component.html b/src/app/components/icon/collection/collection.component.html new file mode 100644 index 0000000..f0c7bf0 --- /dev/null +++ b/src/app/components/icon/collection/collection.component.html @@ -0,0 +1,26 @@ + + + + + + + + diff --git a/src/app/components/icon/collection/collection.component.less b/src/app/components/icon/collection/collection.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/collection/collection.component.ts b/src/app/components/icon/collection/collection.component.ts new file mode 100644 index 0000000..c06a4c8 --- /dev/null +++ b/src/app/components/icon/collection/collection.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-collection', + templateUrl: './collection.component.html', + styleUrls: ['./collection.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CollectionIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/copy/copy.component.html b/src/app/components/icon/copy/copy.component.html new file mode 100644 index 0000000..545b978 --- /dev/null +++ b/src/app/components/icon/copy/copy.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/copy/copy.component.less b/src/app/components/icon/copy/copy.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/copy/copy.component.ts b/src/app/components/icon/copy/copy.component.ts new file mode 100644 index 0000000..838ee13 --- /dev/null +++ b/src/app/components/icon/copy/copy.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-copy', + templateUrl: './copy.component.html', + styleUrls: ['./copy.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CopyIconComponent {} diff --git a/src/app/components/icon/crown/crown.component.html b/src/app/components/icon/crown/crown.component.html new file mode 100644 index 0000000..496dc21 --- /dev/null +++ b/src/app/components/icon/crown/crown.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/crown/crown.component.less b/src/app/components/icon/crown/crown.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/crown/crown.component.ts b/src/app/components/icon/crown/crown.component.ts new file mode 100644 index 0000000..c0b43e8 --- /dev/null +++ b/src/app/components/icon/crown/crown.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-crown', + templateUrl: './crown.component.html', + styleUrls: ['./crown.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CrownIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/default-space/default-space.component.html b/src/app/components/icon/default-space/default-space.component.html new file mode 100644 index 0000000..c5289ac --- /dev/null +++ b/src/app/components/icon/default-space/default-space.component.html @@ -0,0 +1,15 @@ + + + + + + diff --git a/src/app/components/icon/default-space/default-space.component.less b/src/app/components/icon/default-space/default-space.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/default-space/default-space.component.ts b/src/app/components/icon/default-space/default-space.component.ts new file mode 100644 index 0000000..b968ce3 --- /dev/null +++ b/src/app/components/icon/default-space/default-space.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-default-space', + templateUrl: './default-space.component.html', + styleUrls: ['./default-space.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class DefaultSpaceIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/discord/discord.component.html b/src/app/components/icon/discord/discord.component.html new file mode 100644 index 0000000..581c92d --- /dev/null +++ b/src/app/components/icon/discord/discord.component.html @@ -0,0 +1,21 @@ + + + + + + + diff --git a/src/app/components/icon/discord/discord.component.less b/src/app/components/icon/discord/discord.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/discord/discord.component.ts b/src/app/components/icon/discord/discord.component.ts new file mode 100644 index 0000000..8eaff3b --- /dev/null +++ b/src/app/components/icon/discord/discord.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-discord', + templateUrl: './discord.component.html', + styleUrls: ['./discord.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class DiscordIconComponent {} diff --git a/src/app/components/icon/dollar/dollar.component.html b/src/app/components/icon/dollar/dollar.component.html new file mode 100644 index 0000000..de03faa --- /dev/null +++ b/src/app/components/icon/dollar/dollar.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/dollar/dollar.component.less b/src/app/components/icon/dollar/dollar.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/dollar/dollar.component.ts b/src/app/components/icon/dollar/dollar.component.ts new file mode 100644 index 0000000..0e54833 --- /dev/null +++ b/src/app/components/icon/dollar/dollar.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-dollar', + templateUrl: './dollar.component.html', + styleUrls: ['./dollar.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class DollarIconComponent {} diff --git a/src/app/components/icon/edit-underline/edit-underline.component.html b/src/app/components/icon/edit-underline/edit-underline.component.html new file mode 100644 index 0000000..0fdae3e --- /dev/null +++ b/src/app/components/icon/edit-underline/edit-underline.component.html @@ -0,0 +1,25 @@ + + + + + + + diff --git a/src/app/components/icon/edit-underline/edit-underline.component.less b/src/app/components/icon/edit-underline/edit-underline.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/edit-underline/edit-underline.component.ts b/src/app/components/icon/edit-underline/edit-underline.component.ts new file mode 100644 index 0000000..802da16 --- /dev/null +++ b/src/app/components/icon/edit-underline/edit-underline.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-edit-underline', + templateUrl: './edit-underline.component.html', + styleUrls: ['./edit-underline.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class EditUnderlineIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/edit/edit.component.html b/src/app/components/icon/edit/edit.component.html new file mode 100644 index 0000000..138fdd8 --- /dev/null +++ b/src/app/components/icon/edit/edit.component.html @@ -0,0 +1,18 @@ + + + + + + diff --git a/src/app/components/icon/edit/edit.component.less b/src/app/components/icon/edit/edit.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/edit/edit.component.ts b/src/app/components/icon/edit/edit.component.ts new file mode 100644 index 0000000..6003862 --- /dev/null +++ b/src/app/components/icon/edit/edit.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-edit', + templateUrl: './edit.component.html', + styleUrls: ['./edit.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class EditIconComponent {} diff --git a/src/app/components/icon/erase/erase.component.html b/src/app/components/icon/erase/erase.component.html new file mode 100644 index 0000000..845975c --- /dev/null +++ b/src/app/components/icon/erase/erase.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/erase/erase.component.less b/src/app/components/icon/erase/erase.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/erase/erase.component.ts b/src/app/components/icon/erase/erase.component.ts new file mode 100644 index 0000000..8f75f39 --- /dev/null +++ b/src/app/components/icon/erase/erase.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-erase', + templateUrl: './erase.component.html', + styleUrls: ['./erase.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class EraseIconComponent {} diff --git a/src/app/components/icon/evm-chain/evm-chain.component.html b/src/app/components/icon/evm-chain/evm-chain.component.html new file mode 100644 index 0000000..a49bd0a --- /dev/null +++ b/src/app/components/icon/evm-chain/evm-chain.component.html @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/app/components/icon/evm-chain/evm-chain.component.less b/src/app/components/icon/evm-chain/evm-chain.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/evm-chain/evm-chain.component.ts b/src/app/components/icon/evm-chain/evm-chain.component.ts new file mode 100644 index 0000000..d73f734 --- /dev/null +++ b/src/app/components/icon/evm-chain/evm-chain.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-evm-chain', + templateUrl: './evm-chain.component.html', + styleUrls: ['./evm-chain.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class EvmChainIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/external-link/external-link.component.html b/src/app/components/icon/external-link/external-link.component.html new file mode 100644 index 0000000..3680100 --- /dev/null +++ b/src/app/components/icon/external-link/external-link.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/external-link/external-link.component.less b/src/app/components/icon/external-link/external-link.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/external-link/external-link.component.ts b/src/app/components/icon/external-link/external-link.component.ts new file mode 100644 index 0000000..be77c14 --- /dev/null +++ b/src/app/components/icon/external-link/external-link.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-external-link', + templateUrl: './external-link.component.html', + styleUrls: ['./external-link.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ExternalLinkIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/eye/eye.component.html b/src/app/components/icon/eye/eye.component.html new file mode 100644 index 0000000..0995eab --- /dev/null +++ b/src/app/components/icon/eye/eye.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/eye/eye.component.less b/src/app/components/icon/eye/eye.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/eye/eye.component.ts b/src/app/components/icon/eye/eye.component.ts new file mode 100644 index 0000000..342bc51 --- /dev/null +++ b/src/app/components/icon/eye/eye.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-eye', + templateUrl: './eye.component.html', + styleUrls: ['./eye.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class EyeIconComponent {} diff --git a/src/app/components/icon/facebook/facebook.component.html b/src/app/components/icon/facebook/facebook.component.html new file mode 100644 index 0000000..d2673e5 --- /dev/null +++ b/src/app/components/icon/facebook/facebook.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/facebook/facebook.component.less b/src/app/components/icon/facebook/facebook.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/facebook/facebook.component.ts b/src/app/components/icon/facebook/facebook.component.ts new file mode 100644 index 0000000..7f925dd --- /dev/null +++ b/src/app/components/icon/facebook/facebook.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-facebook', + templateUrl: './facebook.component.html', + styleUrls: ['./facebook.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class FacebookIconComponent {} diff --git a/src/app/components/icon/favourites/favourites.component.html b/src/app/components/icon/favourites/favourites.component.html new file mode 100644 index 0000000..c54440e --- /dev/null +++ b/src/app/components/icon/favourites/favourites.component.html @@ -0,0 +1,28 @@ + + + + + + + + diff --git a/src/app/components/icon/favourites/favourites.component.less b/src/app/components/icon/favourites/favourites.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/favourites/favourites.component.ts b/src/app/components/icon/favourites/favourites.component.ts new file mode 100644 index 0000000..352c9d5 --- /dev/null +++ b/src/app/components/icon/favourites/favourites.component.ts @@ -0,0 +1,12 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-favourites', + templateUrl: './favourites.component.html', + styleUrls: ['./favourites.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class FavouritesIconComponent { + @Input() size = 24; + @Input() selected = false; +} diff --git a/src/app/components/icon/file-check/file-check.component.html b/src/app/components/icon/file-check/file-check.component.html new file mode 100644 index 0000000..d09f098 --- /dev/null +++ b/src/app/components/icon/file-check/file-check.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/file-check/file-check.component.less b/src/app/components/icon/file-check/file-check.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/file-check/file-check.component.ts b/src/app/components/icon/file-check/file-check.component.ts new file mode 100644 index 0000000..10dc113 --- /dev/null +++ b/src/app/components/icon/file-check/file-check.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-file-check', + templateUrl: './file-check.component.html', + styleUrls: ['./file-check.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class FileCheckIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/file-export/file-export.component.html b/src/app/components/icon/file-export/file-export.component.html new file mode 100644 index 0000000..7faa8f7 --- /dev/null +++ b/src/app/components/icon/file-export/file-export.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/file-export/file-export.component.less b/src/app/components/icon/file-export/file-export.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/file-export/file-export.component.ts b/src/app/components/icon/file-export/file-export.component.ts new file mode 100644 index 0000000..e6f224d --- /dev/null +++ b/src/app/components/icon/file-export/file-export.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-file-export', + templateUrl: './file-export.component.html', + styleUrls: ['./file-export.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class FileExportIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/github/github.component.html b/src/app/components/icon/github/github.component.html new file mode 100644 index 0000000..34b7206 --- /dev/null +++ b/src/app/components/icon/github/github.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/github/github.component.less b/src/app/components/icon/github/github.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/github/github.component.ts b/src/app/components/icon/github/github.component.ts new file mode 100644 index 0000000..3d41c89 --- /dev/null +++ b/src/app/components/icon/github/github.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-github', + templateUrl: './github.component.html', + styleUrls: ['./github.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class GithubIconComponent {} diff --git a/src/app/components/icon/globe/globe.component.html b/src/app/components/icon/globe/globe.component.html new file mode 100644 index 0000000..a1a5764 --- /dev/null +++ b/src/app/components/icon/globe/globe.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/globe/globe.component.less b/src/app/components/icon/globe/globe.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/globe/globe.component.ts b/src/app/components/icon/globe/globe.component.ts new file mode 100644 index 0000000..edaf725 --- /dev/null +++ b/src/app/components/icon/globe/globe.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-globe', + templateUrl: './globe.component.html', + styleUrls: ['./globe.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class GlobeIconComponent {} diff --git a/src/app/components/icon/guardians-only/guardians-only.component.html b/src/app/components/icon/guardians-only/guardians-only.component.html new file mode 100644 index 0000000..3fdfe38 --- /dev/null +++ b/src/app/components/icon/guardians-only/guardians-only.component.html @@ -0,0 +1,22 @@ + + + + + + + diff --git a/src/app/components/icon/guardians-only/guardians-only.component.less b/src/app/components/icon/guardians-only/guardians-only.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/guardians-only/guardians-only.component.ts b/src/app/components/icon/guardians-only/guardians-only.component.ts new file mode 100644 index 0000000..c30ad69 --- /dev/null +++ b/src/app/components/icon/guardians-only/guardians-only.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-guardians-only', + templateUrl: './guardians-only.component.html', + styleUrls: ['./guardians-only.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class GuardiansOnlyIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/icon.module.ts b/src/app/components/icon/icon.module.ts new file mode 100644 index 0000000..dc57b80 --- /dev/null +++ b/src/app/components/icon/icon.module.ts @@ -0,0 +1,285 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { AirBlowIconComponent } from './air-blow/air-blow.component'; +import { AlertOctagonIconComponent } from './alert-octagon/alert-octagon.component'; +import { AngleDownIconComponent } from './angle-down/angle-down.component'; +import { AngleLeftIconComponent } from './angle-left/angle-left.component'; +import { AngleRightSmallIconComponent } from './angle-right-small/angle-right-small.component'; +import { AngleRightIconComponent } from './angle-right/angle-right.component'; +import { AngleUpIconComponent } from './angle-up/angle-up.component'; +import { ArrowRightIconComponent } from './arrow-right/arrow-right.component'; +import { AssemblyIconComponent } from './assembly/assembly.component'; +import { AwardIconComponent } from './award/award.component'; +import { BellIconComponent } from './bell/bell.component'; +import { CalendarIconComponent } from './calendar/calendar.component'; +import { CheckCircleIconComponent } from './check-circle/check-circle.component'; +import { CheckIconComponent } from './check/check.component'; +import { CloseIconComponent } from './close/close.component'; +import { CoinIconComponent } from './coin/coin.component'; +import { CollapseArrowIconComponent } from './collapse-arrow/collapse-arrow.component'; +import { CollectionIconComponent } from './collection/collection.component'; +import { CopyIconComponent } from './copy/copy.component'; +import { CrownIconComponent } from './crown/crown.component'; +import { DefaultSpaceIconComponent } from './default-space/default-space.component'; +import { DiscordIconComponent } from './discord/discord.component'; +import { DollarIconComponent } from './dollar/dollar.component'; +import { EditUnderlineIconComponent } from './edit-underline/edit-underline.component'; +import { EditIconComponent } from './edit/edit.component'; +import { ExternalLinkIconComponent } from './external-link/external-link.component'; +import { EraseIconComponent } from './erase/erase.component'; +import { EvmChainIconComponent } from './evm-chain/evm-chain.component'; +import { EyeIconComponent } from './eye/eye.component'; +import { FacebookIconComponent } from './facebook/facebook.component'; +import { FavouritesIconComponent } from './favourites/favourites.component'; +import { FileCheckIconComponent } from './file-check/file-check.component'; +import { FileExportIconComponent } from './file-export/file-export.component'; +import { GithubIconComponent } from './github/github.component'; +import { GlobeIconComponent } from './globe/globe.component'; +import { GuardiansOnlyIconComponent } from './guardians-only/guardians-only.component'; +import { InfoCircleIconComponent } from './info-circle/info-circle.component'; +import { InfoIconComponent } from './info/info.component'; +import { IotaNoBorderIconComponent } from './iota-no-border/iota-no-border.component'; +import { IotaIconComponent } from './iota/iota.component'; +import { LinkBrokenIconComponent } from './link-broken/link-broken.component'; +import { LinkIconComponent } from './link/link.component'; +import { LinkedinIconComponent } from './linkedin/linkedin.component'; +import { LogOutIconComponent } from './log-out/log-out.component'; +import { MarketIconComponent } from './market/market.component'; +import { MembersOnlyIconComponent } from './members-only/members-only.component'; +import { MembersWithBadgeIconComponent } from './members-with-badge/members-with-badge.component'; +import { MembersWithNftFromCollectionIconComponent } from './members-with-nft-from-collection/members-with-nft-from-collection.component'; +import { MembersIconComponent } from './members/members.component'; +import { MenuIconComponent } from './menu/menu.component'; +import { MoonIconComponent } from './moon/moon.component'; +import { MoreIconComponent } from './more/more.component'; +import { NetworkStatusIconComponent } from './network-status/network-status.component'; +import { NftIconComponent } from './nft/nft.component'; +import { NineDotsIconComponent } from './nine-dots/nine-dots.component'; +import { OpenSaleIconComponent } from './open-sale/open-sale.component'; +import { PercentageIconComponent } from './percentage/percentage.component'; +import { PlusIconComponent } from './plus/plus.component'; +import { PremiumIconComponent } from './premium/premium.component'; +import { PoolIconComponent } from './pool/pool.component'; +import { QuestionCircleIconComponent } from './question-circle/question-circle.component'; +import { RedditIconComponent } from './reddit/reddit.component'; +import { RefreshIconComponent } from './refresh/refresh.component'; +import { RevertIconComponent } from './revert/revert.component'; +import { RocketIconComponent } from './rocket/rocket.component'; +import { SadCryIconComponent } from './sad-cry/sad-cry.component'; +import { SadIconComponent } from './sad/sad.component'; +import { SearchPlusIconComponent } from './search-plus/search-plus.component'; +import { SearchIconComponent } from './search/search.component'; +import { ShareIconComponent } from './share/share.component'; +import { ShimmerIconComponent } from './shimmer/shimmer.component'; +import { SoonlabsIconComponent } from './soonlabs/soonlabs.component'; +import { SortIconComponent } from './sort/sort.component'; +import { SpaceIconComponent } from './space/space.component'; +import { SpecificMembersOnlyIconComponent } from './specific-members-only/specific-members-only.component'; +import { StopwatchIconComponent } from './stopwatch/stopwatch.component'; +import { SunIconComponent } from './sun/sun.component'; +import { StakingIconComponent } from './staking/staking.component'; +import { SwapIconComponent } from './swap/swap.component'; +import { SwitchIconComponent } from './switch/switch.component'; +import { TagIconComponent } from './tag/tag.component'; +import { ThumbUpIconComponent } from './thumb-up/thumb-up.component'; +import { ThumbDownIconComponent } from './thumb-down/thumb-down.component'; +import { TerminatedIconComponent } from './terminated/terminated.component'; +import { TimeIconComponent } from './time/time.component'; +import { TokenIconComponent } from './token/token.component'; +import { TrashIconComponent } from './trash/trash.component'; +import { TwitterIconComponent } from './twitter/twitter.component'; +import { UnamusedIconComponent } from './unamused/unamused.component'; +import { UserPlusIconComponent } from './user-plus/user-plus.component'; +import { VerifiedIconComponent } from './verified/verified.component'; +import { WalletIconComponent } from './wallet/wallet.component'; + +@NgModule({ + declarations: [ + GlobeIconComponent, + RocketIconComponent, + MoreIconComponent, + UnamusedIconComponent, + SunIconComponent, + MoonIconComponent, + MembersIconComponent, + MarketIconComponent, + BellIconComponent, + SpaceIconComponent, + AwardIconComponent, + CheckCircleIconComponent, + QuestionCircleIconComponent, + AngleDownIconComponent, + AngleUpIconComponent, + TwitterIconComponent, + FacebookIconComponent, + LinkedinIconComponent, + GithubIconComponent, + LogOutIconComponent, + DiscordIconComponent, + RedditIconComponent, + AngleLeftIconComponent, + MenuIconComponent, + PlusIconComponent, + PremiumIconComponent, + CloseIconComponent, + AngleRightIconComponent, + InfoIconComponent, + SoonlabsIconComponent, + SortIconComponent, + CheckIconComponent, + DefaultSpaceIconComponent, + SearchIconComponent, + EraseIconComponent, + EditIconComponent, + EyeIconComponent, + TerminatedIconComponent, + AirBlowIconComponent, + WalletIconComponent, + VerifiedIconComponent, + ExternalLinkIconComponent, + LinkIconComponent, + RefreshIconComponent, + ArrowRightIconComponent, + StakingIconComponent, + TrashIconComponent, + TagIconComponent, + ThumbUpIconComponent, + ThumbDownIconComponent, + TimeIconComponent, + ShareIconComponent, + PercentageIconComponent, + DollarIconComponent, + CopyIconComponent, + SadIconComponent, + CrownIconComponent, + StopwatchIconComponent, + AlertOctagonIconComponent, + InfoCircleIconComponent, + UserPlusIconComponent, + CollectionIconComponent, + CalendarIconComponent, + AngleRightSmallIconComponent, + MembersOnlyIconComponent, + SwapIconComponent, + PoolIconComponent, + GuardiansOnlyIconComponent, + MembersWithBadgeIconComponent, + MembersWithNftFromCollectionIconComponent, + NineDotsIconComponent, + OpenSaleIconComponent, + RevertIconComponent, + CoinIconComponent, + FileCheckIconComponent, + SwitchIconComponent, + FileExportIconComponent, + TokenIconComponent, + EditUnderlineIconComponent, + CollapseArrowIconComponent, + IotaIconComponent, + ShimmerIconComponent, + AssemblyIconComponent, + EvmChainIconComponent, + NetworkStatusIconComponent, + IotaNoBorderIconComponent, + NftIconComponent, + FavouritesIconComponent, + SearchPlusIconComponent, + SpecificMembersOnlyIconComponent, + SadCryIconComponent, + LinkBrokenIconComponent, + ], + exports: [ + GlobeIconComponent, + RocketIconComponent, + MoreIconComponent, + UnamusedIconComponent, + SunIconComponent, + MoonIconComponent, + MembersIconComponent, + MarketIconComponent, + BellIconComponent, + SpaceIconComponent, + AwardIconComponent, + CheckCircleIconComponent, + QuestionCircleIconComponent, + AngleDownIconComponent, + AngleUpIconComponent, + TwitterIconComponent, + LogOutIconComponent, + FacebookIconComponent, + LinkedinIconComponent, + GithubIconComponent, + DiscordIconComponent, + RedditIconComponent, + AngleLeftIconComponent, + MenuIconComponent, + PlusIconComponent, + PremiumIconComponent, + CloseIconComponent, + AngleRightIconComponent, + InfoIconComponent, + SoonlabsIconComponent, + SortIconComponent, + CheckIconComponent, + DefaultSpaceIconComponent, + SearchIconComponent, + EraseIconComponent, + StakingIconComponent, + EditIconComponent, + EyeIconComponent, + TerminatedIconComponent, + AirBlowIconComponent, + WalletIconComponent, + VerifiedIconComponent, + ExternalLinkIconComponent, + LinkIconComponent, + RefreshIconComponent, + ArrowRightIconComponent, + TrashIconComponent, + TagIconComponent, + ThumbUpIconComponent, + ThumbDownIconComponent, + TimeIconComponent, + ShareIconComponent, + PercentageIconComponent, + DollarIconComponent, + CopyIconComponent, + SadIconComponent, + CrownIconComponent, + StopwatchIconComponent, + AlertOctagonIconComponent, + InfoCircleIconComponent, + UserPlusIconComponent, + CollectionIconComponent, + CalendarIconComponent, + AngleRightSmallIconComponent, + MembersOnlyIconComponent, + GuardiansOnlyIconComponent, + MembersWithBadgeIconComponent, + MembersWithNftFromCollectionIconComponent, + NineDotsIconComponent, + OpenSaleIconComponent, + RevertIconComponent, + CoinIconComponent, + FileCheckIconComponent, + SwitchIconComponent, + FileExportIconComponent, + TokenIconComponent, + EditUnderlineIconComponent, + CollapseArrowIconComponent, + IotaIconComponent, + ShimmerIconComponent, + AssemblyIconComponent, + EvmChainIconComponent, + NetworkStatusIconComponent, + IotaNoBorderIconComponent, + NftIconComponent, + FavouritesIconComponent, + SearchPlusIconComponent, + SpecificMembersOnlyIconComponent, + SadCryIconComponent, + LinkBrokenIconComponent, + ], + imports: [CommonModule], +}) +export class IconModule {} diff --git a/src/app/components/icon/info-circle/info-circle.component.html b/src/app/components/icon/info-circle/info-circle.component.html new file mode 100644 index 0000000..f87b88e --- /dev/null +++ b/src/app/components/icon/info-circle/info-circle.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/info-circle/info-circle.component.less b/src/app/components/icon/info-circle/info-circle.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/info-circle/info-circle.component.ts b/src/app/components/icon/info-circle/info-circle.component.ts new file mode 100644 index 0000000..d736b20 --- /dev/null +++ b/src/app/components/icon/info-circle/info-circle.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-info-circle', + templateUrl: './info-circle.component.html', + styleUrls: ['./info-circle.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class InfoCircleIconComponent {} diff --git a/src/app/components/icon/info/info.component.html b/src/app/components/icon/info/info.component.html new file mode 100644 index 0000000..4d030d3 --- /dev/null +++ b/src/app/components/icon/info/info.component.html @@ -0,0 +1,31 @@ + + + + + + + diff --git a/src/app/components/icon/info/info.component.less b/src/app/components/icon/info/info.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/info/info.component.ts b/src/app/components/icon/info/info.component.ts new file mode 100644 index 0000000..636d227 --- /dev/null +++ b/src/app/components/icon/info/info.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-info', + templateUrl: './info.component.html', + styleUrls: ['./info.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class InfoIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/iota-no-border/iota-no-border.component.html b/src/app/components/icon/iota-no-border/iota-no-border.component.html new file mode 100644 index 0000000..3691708 --- /dev/null +++ b/src/app/components/icon/iota-no-border/iota-no-border.component.html @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/components/icon/iota-no-border/iota-no-border.component.less b/src/app/components/icon/iota-no-border/iota-no-border.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/iota-no-border/iota-no-border.component.ts b/src/app/components/icon/iota-no-border/iota-no-border.component.ts new file mode 100644 index 0000000..7711322 --- /dev/null +++ b/src/app/components/icon/iota-no-border/iota-no-border.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-iota-no-border', + templateUrl: './iota-no-border.component.html', + styleUrls: ['./iota-no-border.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class IotaNoBorderIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/iota/iota.component.html b/src/app/components/icon/iota/iota.component.html new file mode 100644 index 0000000..6737d52 --- /dev/null +++ b/src/app/components/icon/iota/iota.component.html @@ -0,0 +1,23 @@ + + + + + + + + + + + diff --git a/src/app/components/icon/iota/iota.component.less b/src/app/components/icon/iota/iota.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/iota/iota.component.ts b/src/app/components/icon/iota/iota.component.ts new file mode 100644 index 0000000..6be284f --- /dev/null +++ b/src/app/components/icon/iota/iota.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-iota', + templateUrl: './iota.component.html', + styleUrls: ['./iota.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class IotaIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/link-broken/link-broken.component.html b/src/app/components/icon/link-broken/link-broken.component.html new file mode 100644 index 0000000..d74d5e6 --- /dev/null +++ b/src/app/components/icon/link-broken/link-broken.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/link-broken/link-broken.component.less b/src/app/components/icon/link-broken/link-broken.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/link-broken/link-broken.component.ts b/src/app/components/icon/link-broken/link-broken.component.ts new file mode 100644 index 0000000..21bd51e --- /dev/null +++ b/src/app/components/icon/link-broken/link-broken.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-link-broken', + templateUrl: './link-broken.component.html', + styleUrls: ['./link-broken.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class LinkBrokenIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/link/link.component.html b/src/app/components/icon/link/link.component.html new file mode 100644 index 0000000..a015ac1 --- /dev/null +++ b/src/app/components/icon/link/link.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/link/link.component.less b/src/app/components/icon/link/link.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/link/link.component.ts b/src/app/components/icon/link/link.component.ts new file mode 100644 index 0000000..9d36098 --- /dev/null +++ b/src/app/components/icon/link/link.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-link', + templateUrl: './link.component.html', + styleUrls: ['./link.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class LinkIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/linkedin/linkedin.component.html b/src/app/components/icon/linkedin/linkedin.component.html new file mode 100644 index 0000000..b5e628d --- /dev/null +++ b/src/app/components/icon/linkedin/linkedin.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/linkedin/linkedin.component.less b/src/app/components/icon/linkedin/linkedin.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/linkedin/linkedin.component.ts b/src/app/components/icon/linkedin/linkedin.component.ts new file mode 100644 index 0000000..9e06262 --- /dev/null +++ b/src/app/components/icon/linkedin/linkedin.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-linkedin', + templateUrl: './linkedin.component.html', + styleUrls: ['./linkedin.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class LinkedinIconComponent {} diff --git a/src/app/components/icon/log-out/log-out.component.html b/src/app/components/icon/log-out/log-out.component.html new file mode 100644 index 0000000..aeae515 --- /dev/null +++ b/src/app/components/icon/log-out/log-out.component.html @@ -0,0 +1,11 @@ + + + + + diff --git a/src/app/components/icon/log-out/log-out.component.less b/src/app/components/icon/log-out/log-out.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/log-out/log-out.component.ts b/src/app/components/icon/log-out/log-out.component.ts new file mode 100644 index 0000000..f138b32 --- /dev/null +++ b/src/app/components/icon/log-out/log-out.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-log-out', + templateUrl: './log-out.component.html', + styleUrls: ['./log-out.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class LogOutIconComponent {} diff --git a/src/app/components/icon/market/market.component.html b/src/app/components/icon/market/market.component.html new file mode 100644 index 0000000..2c60ca5 --- /dev/null +++ b/src/app/components/icon/market/market.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/market/market.component.less b/src/app/components/icon/market/market.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/market/market.component.ts b/src/app/components/icon/market/market.component.ts new file mode 100644 index 0000000..54bdafe --- /dev/null +++ b/src/app/components/icon/market/market.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-market', + templateUrl: './market.component.html', + styleUrls: ['./market.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MarketIconComponent {} diff --git a/src/app/components/icon/members-only/members-only.component.html b/src/app/components/icon/members-only/members-only.component.html new file mode 100644 index 0000000..725d9d6 --- /dev/null +++ b/src/app/components/icon/members-only/members-only.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/members-only/members-only.component.less b/src/app/components/icon/members-only/members-only.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/members-only/members-only.component.ts b/src/app/components/icon/members-only/members-only.component.ts new file mode 100644 index 0000000..379e4a1 --- /dev/null +++ b/src/app/components/icon/members-only/members-only.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-members-only', + templateUrl: './members-only.component.html', + styleUrls: ['./members-only.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MembersOnlyIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/members-with-badge/members-with-badge.component.html b/src/app/components/icon/members-with-badge/members-with-badge.component.html new file mode 100644 index 0000000..e67c9e3 --- /dev/null +++ b/src/app/components/icon/members-with-badge/members-with-badge.component.html @@ -0,0 +1,18 @@ + + + + + + diff --git a/src/app/components/icon/members-with-badge/members-with-badge.component.less b/src/app/components/icon/members-with-badge/members-with-badge.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/members-with-badge/members-with-badge.component.ts b/src/app/components/icon/members-with-badge/members-with-badge.component.ts new file mode 100644 index 0000000..d94063b --- /dev/null +++ b/src/app/components/icon/members-with-badge/members-with-badge.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-members-with-badge', + templateUrl: './members-with-badge.component.html', + styleUrls: ['./members-with-badge.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MembersWithBadgeIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/members-with-nft-from-collection/members-with-nft-from-collection.component.html b/src/app/components/icon/members-with-nft-from-collection/members-with-nft-from-collection.component.html new file mode 100644 index 0000000..a0dddf1 --- /dev/null +++ b/src/app/components/icon/members-with-nft-from-collection/members-with-nft-from-collection.component.html @@ -0,0 +1,18 @@ + + + + + + diff --git a/src/app/components/icon/members-with-nft-from-collection/members-with-nft-from-collection.component.less b/src/app/components/icon/members-with-nft-from-collection/members-with-nft-from-collection.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/members-with-nft-from-collection/members-with-nft-from-collection.component.ts b/src/app/components/icon/members-with-nft-from-collection/members-with-nft-from-collection.component.ts new file mode 100644 index 0000000..49f41a0 --- /dev/null +++ b/src/app/components/icon/members-with-nft-from-collection/members-with-nft-from-collection.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-members-with-nft-from-collection', + templateUrl: './members-with-nft-from-collection.component.html', + styleUrls: ['./members-with-nft-from-collection.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MembersWithNftFromCollectionIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/members/members.component.html b/src/app/components/icon/members/members.component.html new file mode 100644 index 0000000..13b1dfd --- /dev/null +++ b/src/app/components/icon/members/members.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/members/members.component.less b/src/app/components/icon/members/members.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/members/members.component.ts b/src/app/components/icon/members/members.component.ts new file mode 100644 index 0000000..a216585 --- /dev/null +++ b/src/app/components/icon/members/members.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-members', + templateUrl: './members.component.html', + styleUrls: ['./members.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MembersIconComponent {} diff --git a/src/app/components/icon/menu/menu.component.html b/src/app/components/icon/menu/menu.component.html new file mode 100644 index 0000000..3fa159a --- /dev/null +++ b/src/app/components/icon/menu/menu.component.html @@ -0,0 +1,25 @@ + + + + + + + diff --git a/src/app/components/icon/menu/menu.component.less b/src/app/components/icon/menu/menu.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/menu/menu.component.ts b/src/app/components/icon/menu/menu.component.ts new file mode 100644 index 0000000..a382d0a --- /dev/null +++ b/src/app/components/icon/menu/menu.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-menu', + templateUrl: './menu.component.html', + styleUrls: ['./menu.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MenuIconComponent {} diff --git a/src/app/components/icon/moon/moon.component.html b/src/app/components/icon/moon/moon.component.html new file mode 100644 index 0000000..216b3eb --- /dev/null +++ b/src/app/components/icon/moon/moon.component.html @@ -0,0 +1,10 @@ + + + + + diff --git a/src/app/components/icon/moon/moon.component.less b/src/app/components/icon/moon/moon.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/moon/moon.component.ts b/src/app/components/icon/moon/moon.component.ts new file mode 100644 index 0000000..1005f69 --- /dev/null +++ b/src/app/components/icon/moon/moon.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-moon', + templateUrl: './moon.component.html', + styleUrls: ['./moon.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MoonIconComponent { + @Input() stroke = 'currentColor'; +} diff --git a/src/app/components/icon/more/more.component.html b/src/app/components/icon/more/more.component.html new file mode 100644 index 0000000..ecf5f53 --- /dev/null +++ b/src/app/components/icon/more/more.component.html @@ -0,0 +1,32 @@ + + + + + + + diff --git a/src/app/components/icon/more/more.component.less b/src/app/components/icon/more/more.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/more/more.component.ts b/src/app/components/icon/more/more.component.ts new file mode 100644 index 0000000..cd23f5c --- /dev/null +++ b/src/app/components/icon/more/more.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-more', + templateUrl: './more.component.html', + styleUrls: ['./more.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MoreIconComponent {} diff --git a/src/app/components/icon/network-status/network-status.component.html b/src/app/components/icon/network-status/network-status.component.html new file mode 100644 index 0000000..40b9a3a --- /dev/null +++ b/src/app/components/icon/network-status/network-status.component.html @@ -0,0 +1,13 @@ + + + + + + + diff --git a/src/app/components/icon/network-status/network-status.component.less b/src/app/components/icon/network-status/network-status.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/network-status/network-status.component.ts b/src/app/components/icon/network-status/network-status.component.ts new file mode 100644 index 0000000..97ab649 --- /dev/null +++ b/src/app/components/icon/network-status/network-status.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-network-status', + templateUrl: './network-status.component.html', + styleUrls: ['./network-status.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NetworkStatusIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/nft/nft.component.html b/src/app/components/icon/nft/nft.component.html new file mode 100644 index 0000000..d30ea94 --- /dev/null +++ b/src/app/components/icon/nft/nft.component.html @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/src/app/components/icon/nft/nft.component.less b/src/app/components/icon/nft/nft.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/nft/nft.component.ts b/src/app/components/icon/nft/nft.component.ts new file mode 100644 index 0000000..6fadc70 --- /dev/null +++ b/src/app/components/icon/nft/nft.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-nft', + templateUrl: './nft.component.html', + styleUrls: ['./nft.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NftIconComponent {} diff --git a/src/app/components/icon/nine-dots/nine-dots.component.html b/src/app/components/icon/nine-dots/nine-dots.component.html new file mode 100644 index 0000000..2958bde --- /dev/null +++ b/src/app/components/icon/nine-dots/nine-dots.component.html @@ -0,0 +1,46 @@ + + + + + + + + + + + + + diff --git a/src/app/components/icon/nine-dots/nine-dots.component.less b/src/app/components/icon/nine-dots/nine-dots.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/nine-dots/nine-dots.component.ts b/src/app/components/icon/nine-dots/nine-dots.component.ts new file mode 100644 index 0000000..d5fe50a --- /dev/null +++ b/src/app/components/icon/nine-dots/nine-dots.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-nine-dots', + templateUrl: './nine-dots.component.html', + styleUrls: ['./nine-dots.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NineDotsIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/open-sale/open-sale.component.html b/src/app/components/icon/open-sale/open-sale.component.html new file mode 100644 index 0000000..9b27d11 --- /dev/null +++ b/src/app/components/icon/open-sale/open-sale.component.html @@ -0,0 +1,18 @@ + + + + + + diff --git a/src/app/components/icon/open-sale/open-sale.component.less b/src/app/components/icon/open-sale/open-sale.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/open-sale/open-sale.component.ts b/src/app/components/icon/open-sale/open-sale.component.ts new file mode 100644 index 0000000..0153bdb --- /dev/null +++ b/src/app/components/icon/open-sale/open-sale.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-open-sale', + templateUrl: './open-sale.component.html', + styleUrls: ['./open-sale.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class OpenSaleIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/percentage/percentage.component.html b/src/app/components/icon/percentage/percentage.component.html new file mode 100644 index 0000000..823e060 --- /dev/null +++ b/src/app/components/icon/percentage/percentage.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/percentage/percentage.component.less b/src/app/components/icon/percentage/percentage.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/percentage/percentage.component.ts b/src/app/components/icon/percentage/percentage.component.ts new file mode 100644 index 0000000..e74d09f --- /dev/null +++ b/src/app/components/icon/percentage/percentage.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-percentage', + templateUrl: './percentage.component.html', + styleUrls: ['./percentage.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PercentageIconComponent {} diff --git a/src/app/components/icon/plus/plus.component.html b/src/app/components/icon/plus/plus.component.html new file mode 100644 index 0000000..1574ca6 --- /dev/null +++ b/src/app/components/icon/plus/plus.component.html @@ -0,0 +1,18 @@ + + + + + + diff --git a/src/app/components/icon/plus/plus.component.less b/src/app/components/icon/plus/plus.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/plus/plus.component.ts b/src/app/components/icon/plus/plus.component.ts new file mode 100644 index 0000000..8a88ff2 --- /dev/null +++ b/src/app/components/icon/plus/plus.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-plus', + templateUrl: './plus.component.html', + styleUrls: ['./plus.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PlusIconComponent {} diff --git a/src/app/components/icon/pool/pool.component.html b/src/app/components/icon/pool/pool.component.html new file mode 100644 index 0000000..a94e4be --- /dev/null +++ b/src/app/components/icon/pool/pool.component.html @@ -0,0 +1,16 @@ + + + + + + + diff --git a/src/app/components/icon/pool/pool.component.less b/src/app/components/icon/pool/pool.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/pool/pool.component.ts b/src/app/components/icon/pool/pool.component.ts new file mode 100644 index 0000000..e755973 --- /dev/null +++ b/src/app/components/icon/pool/pool.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-pool', + templateUrl: './pool.component.html', + styleUrls: ['./pool.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PoolIconComponent {} diff --git a/src/app/components/icon/premium/premium.component.html b/src/app/components/icon/premium/premium.component.html new file mode 100644 index 0000000..b508b5f --- /dev/null +++ b/src/app/components/icon/premium/premium.component.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/app/components/icon/premium/premium.component.less b/src/app/components/icon/premium/premium.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/premium/premium.component.ts b/src/app/components/icon/premium/premium.component.ts new file mode 100644 index 0000000..a02c9d2 --- /dev/null +++ b/src/app/components/icon/premium/premium.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-premium', + templateUrl: './premium.component.html', + styleUrls: ['./premium.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PremiumIconComponent {} diff --git a/src/app/components/icon/question-circle/question-circle.component.html b/src/app/components/icon/question-circle/question-circle.component.html new file mode 100644 index 0000000..2e3d65f --- /dev/null +++ b/src/app/components/icon/question-circle/question-circle.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/question-circle/question-circle.component.less b/src/app/components/icon/question-circle/question-circle.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/question-circle/question-circle.component.ts b/src/app/components/icon/question-circle/question-circle.component.ts new file mode 100644 index 0000000..10b5273 --- /dev/null +++ b/src/app/components/icon/question-circle/question-circle.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-question-circle', + templateUrl: './question-circle.component.html', + styleUrls: ['./question-circle.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class QuestionCircleIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/reddit/reddit.component.html b/src/app/components/icon/reddit/reddit.component.html new file mode 100644 index 0000000..6020b6e --- /dev/null +++ b/src/app/components/icon/reddit/reddit.component.html @@ -0,0 +1,12 @@ + + + + + + diff --git a/src/app/components/icon/reddit/reddit.component.less b/src/app/components/icon/reddit/reddit.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/reddit/reddit.component.ts b/src/app/components/icon/reddit/reddit.component.ts new file mode 100644 index 0000000..54d8113 --- /dev/null +++ b/src/app/components/icon/reddit/reddit.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-reddit', + templateUrl: './reddit.component.html', + styleUrls: ['./reddit.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RedditIconComponent {} diff --git a/src/app/components/icon/refresh/refresh.component.html b/src/app/components/icon/refresh/refresh.component.html new file mode 100644 index 0000000..3043eed --- /dev/null +++ b/src/app/components/icon/refresh/refresh.component.html @@ -0,0 +1,15 @@ + + + + + diff --git a/src/app/components/icon/refresh/refresh.component.less b/src/app/components/icon/refresh/refresh.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/refresh/refresh.component.ts b/src/app/components/icon/refresh/refresh.component.ts new file mode 100644 index 0000000..3921978 --- /dev/null +++ b/src/app/components/icon/refresh/refresh.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-refresh', + templateUrl: './refresh.component.html', + styleUrls: ['./refresh.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RefreshIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/revert/revert.component.html b/src/app/components/icon/revert/revert.component.html new file mode 100644 index 0000000..581771a --- /dev/null +++ b/src/app/components/icon/revert/revert.component.html @@ -0,0 +1,15 @@ + + + + + diff --git a/src/app/components/icon/revert/revert.component.less b/src/app/components/icon/revert/revert.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/revert/revert.component.ts b/src/app/components/icon/revert/revert.component.ts new file mode 100644 index 0000000..67f5481 --- /dev/null +++ b/src/app/components/icon/revert/revert.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-revert', + templateUrl: './revert.component.html', + styleUrls: ['./revert.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RevertIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/rocket/rocket.component.html b/src/app/components/icon/rocket/rocket.component.html new file mode 100644 index 0000000..ecc9f63 --- /dev/null +++ b/src/app/components/icon/rocket/rocket.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/rocket/rocket.component.less b/src/app/components/icon/rocket/rocket.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/rocket/rocket.component.ts b/src/app/components/icon/rocket/rocket.component.ts new file mode 100644 index 0000000..6211759 --- /dev/null +++ b/src/app/components/icon/rocket/rocket.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-rocket', + templateUrl: './rocket.component.html', + styleUrls: ['./rocket.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RocketIconComponent {} diff --git a/src/app/components/icon/sad-cry/sad-cry.component.html b/src/app/components/icon/sad-cry/sad-cry.component.html new file mode 100644 index 0000000..a48b750 --- /dev/null +++ b/src/app/components/icon/sad-cry/sad-cry.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/sad-cry/sad-cry.component.less b/src/app/components/icon/sad-cry/sad-cry.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/sad-cry/sad-cry.component.ts b/src/app/components/icon/sad-cry/sad-cry.component.ts new file mode 100644 index 0000000..1881705 --- /dev/null +++ b/src/app/components/icon/sad-cry/sad-cry.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-sad-cry', + templateUrl: './sad-cry.component.html', + styleUrls: ['./sad-cry.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SadCryIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/sad/sad.component.html b/src/app/components/icon/sad/sad.component.html new file mode 100644 index 0000000..1d7bdd6 --- /dev/null +++ b/src/app/components/icon/sad/sad.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/sad/sad.component.less b/src/app/components/icon/sad/sad.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/sad/sad.component.ts b/src/app/components/icon/sad/sad.component.ts new file mode 100644 index 0000000..5fa6398 --- /dev/null +++ b/src/app/components/icon/sad/sad.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-sad', + templateUrl: './sad.component.html', + styleUrls: ['./sad.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SadIconComponent {} diff --git a/src/app/components/icon/search-plus/search-plus.component.html b/src/app/components/icon/search-plus/search-plus.component.html new file mode 100644 index 0000000..4287b6c --- /dev/null +++ b/src/app/components/icon/search-plus/search-plus.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/search-plus/search-plus.component.less b/src/app/components/icon/search-plus/search-plus.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/search-plus/search-plus.component.ts b/src/app/components/icon/search-plus/search-plus.component.ts new file mode 100644 index 0000000..05dc8e1 --- /dev/null +++ b/src/app/components/icon/search-plus/search-plus.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-search-plus', + templateUrl: './search-plus.component.html', + styleUrls: ['./search-plus.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SearchPlusIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/search/search.component.html b/src/app/components/icon/search/search.component.html new file mode 100644 index 0000000..e93512f --- /dev/null +++ b/src/app/components/icon/search/search.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/search/search.component.less b/src/app/components/icon/search/search.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/search/search.component.ts b/src/app/components/icon/search/search.component.ts new file mode 100644 index 0000000..2c93d7a --- /dev/null +++ b/src/app/components/icon/search/search.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-search', + templateUrl: './search.component.html', + styleUrls: ['./search.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SearchIconComponent {} diff --git a/src/app/components/icon/share/share.component.html b/src/app/components/icon/share/share.component.html new file mode 100644 index 0000000..0778dae --- /dev/null +++ b/src/app/components/icon/share/share.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/share/share.component.less b/src/app/components/icon/share/share.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/share/share.component.ts b/src/app/components/icon/share/share.component.ts new file mode 100644 index 0000000..65e2d6d --- /dev/null +++ b/src/app/components/icon/share/share.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-share', + templateUrl: './share.component.html', + styleUrls: ['./share.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ShareIconComponent {} diff --git a/src/app/components/icon/shimmer/shimmer.component.html b/src/app/components/icon/shimmer/shimmer.component.html new file mode 100644 index 0000000..78949fd --- /dev/null +++ b/src/app/components/icon/shimmer/shimmer.component.html @@ -0,0 +1,18 @@ + + + + + + diff --git a/src/app/components/icon/shimmer/shimmer.component.less b/src/app/components/icon/shimmer/shimmer.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/shimmer/shimmer.component.ts b/src/app/components/icon/shimmer/shimmer.component.ts new file mode 100644 index 0000000..9bfc61f --- /dev/null +++ b/src/app/components/icon/shimmer/shimmer.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-shimmer', + templateUrl: './shimmer.component.html', + styleUrls: ['./shimmer.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ShimmerIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/soonlabs/soonlabs.component.html b/src/app/components/icon/soonlabs/soonlabs.component.html new file mode 100644 index 0000000..9ff2a5e --- /dev/null +++ b/src/app/components/icon/soonlabs/soonlabs.component.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + diff --git a/src/app/components/icon/soonlabs/soonlabs.component.less b/src/app/components/icon/soonlabs/soonlabs.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/soonlabs/soonlabs.component.ts b/src/app/components/icon/soonlabs/soonlabs.component.ts new file mode 100644 index 0000000..a106c28 --- /dev/null +++ b/src/app/components/icon/soonlabs/soonlabs.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-soonlabs', + templateUrl: './soonlabs.component.html', + styleUrls: ['./soonlabs.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SoonlabsIconComponent {} diff --git a/src/app/components/icon/sort/sort.component.html b/src/app/components/icon/sort/sort.component.html new file mode 100644 index 0000000..262b716 --- /dev/null +++ b/src/app/components/icon/sort/sort.component.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/app/components/icon/sort/sort.component.less b/src/app/components/icon/sort/sort.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/sort/sort.component.ts b/src/app/components/icon/sort/sort.component.ts new file mode 100644 index 0000000..ca55b93 --- /dev/null +++ b/src/app/components/icon/sort/sort.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-sort', + templateUrl: './sort.component.html', + styleUrls: ['./sort.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SortIconComponent {} diff --git a/src/app/components/icon/space/space.component.html b/src/app/components/icon/space/space.component.html new file mode 100644 index 0000000..781f938 --- /dev/null +++ b/src/app/components/icon/space/space.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/space/space.component.less b/src/app/components/icon/space/space.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/space/space.component.ts b/src/app/components/icon/space/space.component.ts new file mode 100644 index 0000000..1753f03 --- /dev/null +++ b/src/app/components/icon/space/space.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-space', + templateUrl: './space.component.html', + styleUrls: ['./space.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SpaceIconComponent {} diff --git a/src/app/components/icon/specific-members-only/specific-members-only.component.html b/src/app/components/icon/specific-members-only/specific-members-only.component.html new file mode 100644 index 0000000..62dce87 --- /dev/null +++ b/src/app/components/icon/specific-members-only/specific-members-only.component.html @@ -0,0 +1,18 @@ + + + + + + diff --git a/src/app/components/icon/specific-members-only/specific-members-only.component.less b/src/app/components/icon/specific-members-only/specific-members-only.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/specific-members-only/specific-members-only.component.ts b/src/app/components/icon/specific-members-only/specific-members-only.component.ts new file mode 100644 index 0000000..f0170cd --- /dev/null +++ b/src/app/components/icon/specific-members-only/specific-members-only.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-specific-members-only', + templateUrl: './specific-members-only.component.html', + styleUrls: ['./specific-members-only.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SpecificMembersOnlyIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/staking/staking.component.html b/src/app/components/icon/staking/staking.component.html new file mode 100644 index 0000000..135f741 --- /dev/null +++ b/src/app/components/icon/staking/staking.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/staking/staking.component.less b/src/app/components/icon/staking/staking.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/staking/staking.component.ts b/src/app/components/icon/staking/staking.component.ts new file mode 100644 index 0000000..d828a7d --- /dev/null +++ b/src/app/components/icon/staking/staking.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-staking', + templateUrl: './staking.component.html', + styleUrls: ['./staking.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class StakingIconComponent {} diff --git a/src/app/components/icon/stopwatch/stopwatch.component.html b/src/app/components/icon/stopwatch/stopwatch.component.html new file mode 100644 index 0000000..2f3d376 --- /dev/null +++ b/src/app/components/icon/stopwatch/stopwatch.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/stopwatch/stopwatch.component.less b/src/app/components/icon/stopwatch/stopwatch.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/stopwatch/stopwatch.component.ts b/src/app/components/icon/stopwatch/stopwatch.component.ts new file mode 100644 index 0000000..fdf3b92 --- /dev/null +++ b/src/app/components/icon/stopwatch/stopwatch.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-stopwatch', + templateUrl: './stopwatch.component.html', + styleUrls: ['./stopwatch.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class StopwatchIconComponent {} diff --git a/src/app/components/icon/sun/sun.component.html b/src/app/components/icon/sun/sun.component.html new file mode 100644 index 0000000..842d5d5 --- /dev/null +++ b/src/app/components/icon/sun/sun.component.html @@ -0,0 +1,10 @@ + + + + + diff --git a/src/app/components/icon/sun/sun.component.less b/src/app/components/icon/sun/sun.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/sun/sun.component.ts b/src/app/components/icon/sun/sun.component.ts new file mode 100644 index 0000000..e92c00e --- /dev/null +++ b/src/app/components/icon/sun/sun.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-sun', + templateUrl: './sun.component.html', + styleUrls: ['./sun.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SunIconComponent { + @Input() stroke = 'currentColor'; +} diff --git a/src/app/components/icon/swap/swap.component.html b/src/app/components/icon/swap/swap.component.html new file mode 100644 index 0000000..2531892 --- /dev/null +++ b/src/app/components/icon/swap/swap.component.html @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/src/app/components/icon/swap/swap.component.less b/src/app/components/icon/swap/swap.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/swap/swap.component.ts b/src/app/components/icon/swap/swap.component.ts new file mode 100644 index 0000000..d362154 --- /dev/null +++ b/src/app/components/icon/swap/swap.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-swap', + templateUrl: './swap.component.html', + styleUrls: ['./swap.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SwapIconComponent {} diff --git a/src/app/components/icon/switch/switch.component.html b/src/app/components/icon/switch/switch.component.html new file mode 100644 index 0000000..1f9f124 --- /dev/null +++ b/src/app/components/icon/switch/switch.component.html @@ -0,0 +1,18 @@ + + + + + + diff --git a/src/app/components/icon/switch/switch.component.less b/src/app/components/icon/switch/switch.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/switch/switch.component.ts b/src/app/components/icon/switch/switch.component.ts new file mode 100644 index 0000000..e5fca1d --- /dev/null +++ b/src/app/components/icon/switch/switch.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-switch', + templateUrl: './switch.component.html', + styleUrls: ['./switch.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SwitchIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/tag/tag.component.html b/src/app/components/icon/tag/tag.component.html new file mode 100644 index 0000000..f72ed2e --- /dev/null +++ b/src/app/components/icon/tag/tag.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/tag/tag.component.less b/src/app/components/icon/tag/tag.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/tag/tag.component.ts b/src/app/components/icon/tag/tag.component.ts new file mode 100644 index 0000000..a99ee2e --- /dev/null +++ b/src/app/components/icon/tag/tag.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-tag', + templateUrl: './tag.component.html', + styleUrls: ['./tag.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TagIconComponent {} diff --git a/src/app/components/icon/terminated/terminated.component.html b/src/app/components/icon/terminated/terminated.component.html new file mode 100644 index 0000000..e7e9117 --- /dev/null +++ b/src/app/components/icon/terminated/terminated.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/terminated/terminated.component.less b/src/app/components/icon/terminated/terminated.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/terminated/terminated.component.ts b/src/app/components/icon/terminated/terminated.component.ts new file mode 100644 index 0000000..d4b796d --- /dev/null +++ b/src/app/components/icon/terminated/terminated.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-terminated', + templateUrl: './terminated.component.html', + styleUrls: ['./terminated.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TerminatedIconComponent {} diff --git a/src/app/components/icon/thumb-down/thumb-down.component.html b/src/app/components/icon/thumb-down/thumb-down.component.html new file mode 100644 index 0000000..89b94da --- /dev/null +++ b/src/app/components/icon/thumb-down/thumb-down.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/thumb-down/thumb-down.component.less b/src/app/components/icon/thumb-down/thumb-down.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/thumb-down/thumb-down.component.ts b/src/app/components/icon/thumb-down/thumb-down.component.ts new file mode 100644 index 0000000..3b1e9fe --- /dev/null +++ b/src/app/components/icon/thumb-down/thumb-down.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-thumb-down', + templateUrl: './thumb-down.component.html', + styleUrls: ['./thumb-down.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ThumbDownIconComponent {} diff --git a/src/app/components/icon/thumb-up/thumb-up.component.html b/src/app/components/icon/thumb-up/thumb-up.component.html new file mode 100644 index 0000000..f0dad94 --- /dev/null +++ b/src/app/components/icon/thumb-up/thumb-up.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/thumb-up/thumb-up.component.less b/src/app/components/icon/thumb-up/thumb-up.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/thumb-up/thumb-up.component.ts b/src/app/components/icon/thumb-up/thumb-up.component.ts new file mode 100644 index 0000000..bdef680 --- /dev/null +++ b/src/app/components/icon/thumb-up/thumb-up.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-thumb-up', + templateUrl: './thumb-up.component.html', + styleUrls: ['./thumb-up.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ThumbUpIconComponent {} diff --git a/src/app/components/icon/time/time.component.html b/src/app/components/icon/time/time.component.html new file mode 100644 index 0000000..c9d11fb --- /dev/null +++ b/src/app/components/icon/time/time.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/time/time.component.less b/src/app/components/icon/time/time.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/time/time.component.ts b/src/app/components/icon/time/time.component.ts new file mode 100644 index 0000000..c1c24d3 --- /dev/null +++ b/src/app/components/icon/time/time.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-time', + templateUrl: './time.component.html', + styleUrls: ['./time.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TimeIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/token/token.component.html b/src/app/components/icon/token/token.component.html new file mode 100644 index 0000000..fcf7c25 --- /dev/null +++ b/src/app/components/icon/token/token.component.html @@ -0,0 +1,12 @@ + + + + + + diff --git a/src/app/components/icon/token/token.component.less b/src/app/components/icon/token/token.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/token/token.component.ts b/src/app/components/icon/token/token.component.ts new file mode 100644 index 0000000..0e66427 --- /dev/null +++ b/src/app/components/icon/token/token.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-token', + templateUrl: './token.component.html', + styleUrls: ['./token.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenIconComponent {} diff --git a/src/app/components/icon/trash/trash.component.html b/src/app/components/icon/trash/trash.component.html new file mode 100644 index 0000000..3935f75 --- /dev/null +++ b/src/app/components/icon/trash/trash.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/trash/trash.component.less b/src/app/components/icon/trash/trash.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/trash/trash.component.ts b/src/app/components/icon/trash/trash.component.ts new file mode 100644 index 0000000..4d446d3 --- /dev/null +++ b/src/app/components/icon/trash/trash.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-trash', + templateUrl: './trash.component.html', + styleUrls: ['./trash.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TrashIconComponent {} diff --git a/src/app/components/icon/twitter/twitter.component.html b/src/app/components/icon/twitter/twitter.component.html new file mode 100644 index 0000000..1fd5a53 --- /dev/null +++ b/src/app/components/icon/twitter/twitter.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/twitter/twitter.component.less b/src/app/components/icon/twitter/twitter.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/twitter/twitter.component.ts b/src/app/components/icon/twitter/twitter.component.ts new file mode 100644 index 0000000..5a2e51f --- /dev/null +++ b/src/app/components/icon/twitter/twitter.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-twitter', + templateUrl: './twitter.component.html', + styleUrls: ['./twitter.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TwitterIconComponent {} diff --git a/src/app/components/icon/unamused/unamused.component.html b/src/app/components/icon/unamused/unamused.component.html new file mode 100644 index 0000000..e033d0d --- /dev/null +++ b/src/app/components/icon/unamused/unamused.component.html @@ -0,0 +1,8 @@ + + + + + diff --git a/src/app/components/icon/unamused/unamused.component.less b/src/app/components/icon/unamused/unamused.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/unamused/unamused.component.ts b/src/app/components/icon/unamused/unamused.component.ts new file mode 100644 index 0000000..272288a --- /dev/null +++ b/src/app/components/icon/unamused/unamused.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-icon-unamused', + templateUrl: './unamused.component.html', + styleUrls: ['./unamused.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class UnamusedIconComponent {} diff --git a/src/app/components/icon/user-plus/user-plus.component.html b/src/app/components/icon/user-plus/user-plus.component.html new file mode 100644 index 0000000..d2b0568 --- /dev/null +++ b/src/app/components/icon/user-plus/user-plus.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/user-plus/user-plus.component.less b/src/app/components/icon/user-plus/user-plus.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/user-plus/user-plus.component.ts b/src/app/components/icon/user-plus/user-plus.component.ts new file mode 100644 index 0000000..9cdc89f --- /dev/null +++ b/src/app/components/icon/user-plus/user-plus.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-user-plus', + templateUrl: './user-plus.component.html', + styleUrls: ['./user-plus.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class UserPlusIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/verified/verified.component.html b/src/app/components/icon/verified/verified.component.html new file mode 100644 index 0000000..4b1e25c --- /dev/null +++ b/src/app/components/icon/verified/verified.component.html @@ -0,0 +1,18 @@ + + + + + + diff --git a/src/app/components/icon/verified/verified.component.less b/src/app/components/icon/verified/verified.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/verified/verified.component.ts b/src/app/components/icon/verified/verified.component.ts new file mode 100644 index 0000000..aa15bce --- /dev/null +++ b/src/app/components/icon/verified/verified.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-verified', + templateUrl: './verified.component.html', + styleUrls: ['./verified.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class VerifiedIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/icon/wallet/wallet.component.html b/src/app/components/icon/wallet/wallet.component.html new file mode 100644 index 0000000..1292ff1 --- /dev/null +++ b/src/app/components/icon/wallet/wallet.component.html @@ -0,0 +1,14 @@ + + + + + diff --git a/src/app/components/icon/wallet/wallet.component.less b/src/app/components/icon/wallet/wallet.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/icon/wallet/wallet.component.ts b/src/app/components/icon/wallet/wallet.component.ts new file mode 100644 index 0000000..4fd4775 --- /dev/null +++ b/src/app/components/icon/wallet/wallet.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-icon-wallet', + templateUrl: './wallet.component.html', + styleUrls: ['./wallet.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class WalletIconComponent { + @Input() size = 24; +} diff --git a/src/app/components/iota-input/iota-input.component.html b/src/app/components/iota-input/iota-input.component.html new file mode 100644 index 0000000..978938f --- /dev/null +++ b/src/app/components/iota-input/iota-input.component.html @@ -0,0 +1,32 @@ + + + Price{{ ' (' + unitsService.label(collection?.mintingData?.network) + ')' }} + + + + + + + diff --git a/src/app/components/iota-input/iota-input.component.less b/src/app/components/iota-input/iota-input.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/components/iota-input/iota-input.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/components/iota-input/iota-input.component.ts b/src/app/components/iota-input/iota-input.component.ts new file mode 100644 index 0000000..f63e82f --- /dev/null +++ b/src/app/components/iota-input/iota-input.component.ts @@ -0,0 +1,81 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input, + OnInit, +} from '@angular/core'; +import { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, Validators } from '@angular/forms'; +import { UnitsService } from '@core/services/units'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { + Collection, + DEFAULT_NETWORK, + MAX_IOTA_AMOUNT, + MIN_IOTA_AMOUNT, + NETWORK_DETAIL, +} from '@soonaverse/interfaces'; + +export enum IotaInputSize { + LARGE = 'large', +} + +@UntilDestroy() +@Component({ + selector: 'wen-iota-input', + templateUrl: './iota-input.component.html', + styleUrls: ['./iota-input.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [ + { + provide: NG_VALUE_ACCESSOR, + multi: true, + useExisting: IotaInputComponent, + }, + ], +}) +export class IotaInputComponent implements OnInit, ControlValueAccessor { + @Input() size: IotaInputSize = IotaInputSize.LARGE; + @Input() collection?: Collection; + @Input() min = MIN_IOTA_AMOUNT; + @Input() max = MAX_IOTA_AMOUNT; + + public amountControl: FormControl = new FormControl(null, [ + Validators.required, + Validators.min(this.min / NETWORK_DETAIL[DEFAULT_NETWORK].divideBy), + Validators.max(this.max / NETWORK_DETAIL[DEFAULT_NETWORK].divideBy), + ]); + + public onChange: (v: number | undefined) => undefined = () => undefined; + public disabled = false; + + constructor(public unitsService: UnitsService, private cd: ChangeDetectorRef) {} + + public ngOnInit(): void { + this.amountControl.valueChanges.pipe(untilDestroyed(this)).subscribe((value) => { + this.onChange(value * NETWORK_DETAIL[DEFAULT_NETWORK].divideBy); + this.cd.markForCheck(); + }); + } + + public registerOnChange(fn: () => undefined): void { + this.onChange = fn; + } + + public registerOnTouched(): void { + return undefined; + } + + public setDisabledState(isDisabled: boolean): void { + this.disabled = isDisabled; + } + + public writeValue(value: number | null): void { + if (value === null) { + this.amountControl.setValue(null); + } else { + this.amountControl.setValue(value / NETWORK_DETAIL[DEFAULT_NETWORK].divideBy); + } + this.cd.markForCheck(); + } +} diff --git a/src/app/components/iota-input/iota-input.module.ts b/src/app/components/iota-input/iota-input.module.ts new file mode 100644 index 0000000..cf0801e --- /dev/null +++ b/src/app/components/iota-input/iota-input.module.ts @@ -0,0 +1,29 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzInputNumberModule } from 'ng-zorro-antd/input-number'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { IotaInputComponent } from './iota-input.component'; + +@NgModule({ + declarations: [IotaInputComponent], + imports: [ + CommonModule, + NzInputModule, + FormatTokenModule, + NzInputNumberModule, + NzFormModule, + NzToolTipModule, + FormsModule, + ReactiveFormsModule, + NzButtonModule, + NzIconModule, + ], + exports: [IotaInputComponent], +}) +export class IotaInputModule {} diff --git a/src/app/components/language-change/language-change.component.html b/src/app/components/language-change/language-change.component.html new file mode 100644 index 0000000..bc82702 --- /dev/null +++ b/src/app/components/language-change/language-change.component.html @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/src/app/components/language-change/language-change.component.less b/src/app/components/language-change/language-change.component.less new file mode 100644 index 0000000..43951e9 --- /dev/null +++ b/src/app/components/language-change/language-change.component.less @@ -0,0 +1,19 @@ +:host ::ng-deep .select { + .ant-select-selector { + background-color: rgba(0, 0, 0, 0) !important; + } + + .ant-select-selection-item { + @apply ml-1; + width: 28px; + } + + .ant-select-arrow { + margin-top: -8px; + right: 10px; + } + + .ant-select-selection-item { + margin: 0; + } +} diff --git a/src/app/components/language-change/language-change.component.ts b/src/app/components/language-change/language-change.component.ts new file mode 100644 index 0000000..4a16b82 --- /dev/null +++ b/src/app/components/language-change/language-change.component.ts @@ -0,0 +1,39 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { DeviceService } from '@core/services/device'; +import { CookieItem, getCookie, setCookie } from '@core/utils/cookie.utils'; +import { Languages } from '@core/utils/language.util'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; + +@UntilDestroy() +@Component({ + selector: 'wen-language-change', + templateUrl: './language-change.component.html', + styleUrls: ['./language-change.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class LanguageChangeComponent implements OnInit { + public languages = Object.values(Languages); + public languageControl: FormControl = new FormControl(); + + constructor(private deviceService: DeviceService) { + if (this.deviceService.isBrowser) { + this.languageControl.setValue( + getCookie(CookieItem.languageOverride) || this.languages[0].remoteHosting, + ); + } + } + + ngOnInit(): void { + let prevLang = this.languageControl.value; + this.languageControl.valueChanges.pipe(untilDestroyed(this)).subscribe((lang: string) => { + if (prevLang !== lang) { + setCookie(CookieItem.languageOverride, lang); + setTimeout(() => { + window?.location.reload(); + }, 750); + prevLang = lang; + } + }); + } +} diff --git a/src/app/components/language-change/language-change.module.ts b/src/app/components/language-change/language-change.module.ts new file mode 100644 index 0000000..4ea16cc --- /dev/null +++ b/src/app/components/language-change/language-change.module.ts @@ -0,0 +1,13 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { IconModule } from '@components/icon/icon.module'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { LanguageChangeComponent } from './language-change.component'; + +@NgModule({ + declarations: [LanguageChangeComponent], + imports: [CommonModule, NzSelectModule, IconModule, FormsModule, ReactiveFormsModule], + exports: [LanguageChangeComponent], +}) +export class LanguageChangeModule {} diff --git a/src/app/components/member/components/member-about/member-about.component.html b/src/app/components/member/components/member-about/member-about.component.html new file mode 100644 index 0000000..d47093f --- /dev/null +++ b/src/app/components/member/components/member-about/member-about.component.html @@ -0,0 +1,159 @@ +
+ + + + +
+

+ @{{ (data.member$ | async)?.name || ((data.member$ | async)?.uid | truncate : [12]) }} +

+
+ + + +
+
+ +

+ {{ (data.member$ | async)!.about }} +

+ + + +
+

+ Verified addresses + + Manage + + +

+ + +
+ + + +
+

+ Recently joined spaces + + All + + +

+
+ + +
+ No Contribution Yet. +
+
+
+
diff --git a/src/app/components/member/components/member-about/member-about.component.less b/src/app/components/member/components/member-about/member-about.component.less new file mode 100644 index 0000000..759a7a4 --- /dev/null +++ b/src/app/components/member/components/member-about/member-about.component.less @@ -0,0 +1,3 @@ +.rotate-180 { + transform: rotate(180deg); +} diff --git a/src/app/components/member/components/member-about/member-about.component.ts b/src/app/components/member/components/member-about/member-about.component.ts new file mode 100644 index 0000000..2ec0a89 --- /dev/null +++ b/src/app/components/member/components/member-about/member-about.component.ts @@ -0,0 +1,69 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input, + OnInit, +} from '@angular/core'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService, MemberAction } from '@pages/member/services/data.service'; +import { FILE_SIZES, Member } from '@soonaverse/interfaces'; +import { BehaviorSubject, skip } from 'rxjs'; +import { EntityType } from './../../../wallet-address/wallet-address.component'; + +@UntilDestroy() +@Component({ + selector: 'wen-member-about', + templateUrl: './member-about.component.html', + styleUrls: ['./member-about.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MemberAboutComponent implements OnInit { + @Input() avatarSrc?: string; + @Input() loggedInMember?: BehaviorSubject; + + public drawerVisible$ = new BehaviorSubject(false); + public isManageAddressesOpen = false; + + constructor( + public deviceService: DeviceService, + public data: DataService, + public previewImageService: PreviewImageService, + public auth: AuthService, + public cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + this.data.triggerAction$.pipe(skip(1), untilDestroyed(this)).subscribe((s) => { + if (s === MemberAction.EDIT) { + this.openDrawer(); + } else if (s === MemberAction.MANAGE_ADDRESSES) { + this.isManageAddressesOpen = true; + this.cd.markForCheck(); + } + }); + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + public get walletAddressEntities(): typeof EntityType { + return EntityType; + } + + public openDrawer(): void { + this.drawerVisible$.next(true); + } + + public closeDrawer(): void { + this.drawerVisible$.next(false); + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } +} diff --git a/src/app/components/member/components/member-about/member-about.module.ts b/src/app/components/member/components/member-about/member-about.module.ts new file mode 100644 index 0000000..2f227b0 --- /dev/null +++ b/src/app/components/member/components/member-about/member-about.module.ts @@ -0,0 +1,44 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { IconModule } from '@components/icon/icon.module'; +import { WalletAddressModule } from '@components/wallet-address/wallet-address.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzBadgeModule } from 'ng-zorro-antd/badge'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { AuditOneModule } from 'src/app/service-modules/audit-one/audit-one.module'; +import { BadgeModule } from './../../../../components/badge/badge.module'; +import { MemberEditDrawerModule } from './../../../../components/member/components/member-edit-drawer/member-edit-drawer.module'; +import { MemberAboutComponent } from './member-about.component'; + +@NgModule({ + declarations: [MemberAboutComponent], + imports: [ + CommonModule, + NzCardModule, + IconModule, + NzAvatarModule, + RouterModule, + AuditOneModule, + NzTagModule, + TruncateModule, + ResizeAvatarModule, + NzButtonModule, + WalletAddressModule, + NzIconModule, + MemberEditDrawerModule, + NzDrawerModule, + NzToolTipModule, + BadgeModule, + NzBadgeModule, + ], + exports: [MemberAboutComponent], +}) +export class MemberAboutModule {} diff --git a/src/app/components/member/components/member-card/member-card.component.html b/src/app/components/member/components/member-card/member-card.component.html new file mode 100644 index 0000000..3f18fca --- /dev/null +++ b/src/app/components/member/components/member-card/member-card.component.html @@ -0,0 +1,98 @@ + diff --git a/src/app/components/member/components/member-card/member-card.component.less b/src/app/components/member/components/member-card/member-card.component.less new file mode 100644 index 0000000..04a1f8b --- /dev/null +++ b/src/app/components/member/components/member-card/member-card.component.less @@ -0,0 +1,11 @@ +.ant-card-meta-avatar { + float: none; +} + +.truncate-line-3 { + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/src/app/components/member/components/member-card/member-card.component.ts b/src/app/components/member/components/member-card/member-card.component.ts new file mode 100644 index 0000000..8f0de93 --- /dev/null +++ b/src/app/components/member/components/member-card/member-card.component.ts @@ -0,0 +1,64 @@ +/* eslint-disable @typescript-eslint/adjacent-overload-signatures */ +import { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core'; +import { MemberApi } from '@api/member.api'; +import { DeviceService } from '@core/services/device'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { FILE_SIZES, Member, Timestamp, Transaction } from '@soonaverse/interfaces'; +import { BehaviorSubject, first, Observable, of } from 'rxjs'; +import { ROUTER_UTILS } from './../../../../@core/utils/router.utils'; + +@UntilDestroy() +@Component({ + selector: 'wen-member-card', + templateUrl: './member-card.component.html', + styleUrls: ['./member-card.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MemberCardComponent implements OnDestroy { + @Input() member?: Member; + @Input() fullWidth?: boolean; + @Input() allowMobileContent?: boolean; + @Input() about?: string; + @Input() role?: string; + @Input() createdOn?: Timestamp; + @Input() createdOnLabel = 'joined'; + public badges$: BehaviorSubject = new BehaviorSubject< + Transaction[] | undefined + >(undefined); + public totalVisibleBadges = 6; + public path = ROUTER_UTILS.config.member.root; + public isReputationVisible = false; + + constructor(private memberApi: MemberApi, public deviceService: DeviceService) { + // none. + } + + public async refreshBadges(): Promise { + if (this.member?.uid) { + this.memberApi + .topBadges(this.member.uid) + .pipe(first(), untilDestroyed(this)) + .subscribe(this.badges$); + } + } + + public getTotal(): Observable { + const stat = this.member?.spaces || {}; + let total = 0; + for (const p in stat) { + if (Object.prototype.hasOwnProperty.call(stat, p)) { + total += stat[p].awardsCompleted || 0; + } + } + + return of(Math.trunc(total)); + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + public ngOnDestroy(): void { + this.badges$.next(undefined); + } +} diff --git a/src/app/components/member/components/member-card/member-card.module.ts b/src/app/components/member/components/member-card/member-card.module.ts new file mode 100644 index 0000000..8a23730 --- /dev/null +++ b/src/app/components/member/components/member-card/member-card.module.ts @@ -0,0 +1,30 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { IpfsBadgeModule } from '@core/pipes/ipfs-badge/ipfs-badge.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { TruncateModule } from '../../../../@core/pipes/truncate/truncate.module'; +import { IconModule } from './../../../../components/icon/icon.module'; +import { MemberCardComponent } from './member-card.component'; + +@NgModule({ + exports: [MemberCardComponent], + declarations: [MemberCardComponent], + imports: [ + CommonModule, + RouterModule, + NzToolTipModule, + ResizeAvatarModule, + IpfsBadgeModule, + TruncateModule, + NzAvatarModule, + NzIconModule, + IconModule, + NzTagModule, + ], +}) +export class MemberCardModule {} diff --git a/src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html b/src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html new file mode 100644 index 0000000..7048756 --- /dev/null +++ b/src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html @@ -0,0 +1,176 @@ + + +
+ +

Display Name

+ Set a display name. This does not change your username. + + + + @ + + +
+ + +

About

+ A brief description of yourself shown on your profile. + + + + + +
+ + +

Avatar

+ Customise your Soonaverse identity. Set NFT as your profile image. Only minted NFT are + supported. + + + + + + + {{ s.label || s.value }} + + + +
+ + + {{ s.nzLabel }} +
+
+
+
+
+ +
+

Networking

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + Settings + + +
diff --git a/src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.less b/src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.ts b/src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.ts new file mode 100644 index 0000000..02abd82 --- /dev/null +++ b/src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.ts @@ -0,0 +1,180 @@ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + OnInit, + Output, +} from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { NftApi } from '@api/nft.api'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { AuthService } from '@components/auth/services/auth.service'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { + COL, + DISCORD_REGEXP, + FILE_SIZES, + GITHUB_REGEXP, + Member, + Nft, + TWITTER_REGEXP, +} from '@soonaverse/interfaces'; +import { NzSelectOptionInterface } from 'ng-zorro-antd/select'; +import { BehaviorSubject, Subscription, first, from } from 'rxjs'; +import { MemberApi } from '../../../../@api/member.api'; +import { NotificationService } from '../../../../@core/services/notification/notification.service'; + +const maxAboutCharacters = 160; + +@UntilDestroy() +@Component({ + selector: 'wen-member-edit-drawer', + templateUrl: './member-edit-drawer.component.html', + styleUrls: ['./member-edit-drawer.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MemberEditDrawerComponent implements OnInit { + @Input() isDesktop?: boolean; + + @Output() public wenOnClose = new EventEmitter(); + public filteredNfts$: BehaviorSubject = new BehaviorSubject< + NzSelectOptionInterface[] + >([]); + public nameControl: FormControl = new FormControl(''); + public aboutControl: FormControl = new FormControl('', Validators.maxLength(maxAboutCharacters)); + public avatarNftControl: FormControl = new FormControl(undefined); + public discordControl: FormControl = new FormControl('', Validators.pattern(DISCORD_REGEXP)); + public twitterControl: FormControl = new FormControl('', Validators.pattern(TWITTER_REGEXP)); + public githubControl: FormControl = new FormControl('', Validators.pattern(GITHUB_REGEXP)); + public minted = false; + public maxAboutCharacters = maxAboutCharacters; + public memberForm: FormGroup; + public nftCache: { + [propName: string]: { + name: string; + media: string; + }; + } = {}; + + private nftsSubscription?: Subscription; + constructor( + private auth: AuthService, + private memberApi: MemberApi, + private nftApi: NftApi, + public readonly algoliaService: AlgoliaService, + private notification: NotificationService, + ) { + this.memberForm = new FormGroup({ + name: this.nameControl, + about: this.aboutControl, + avatarNft: this.avatarNftControl, + discord: this.discordControl, + twitter: this.twitterControl, + github: this.githubControl, + }); + } + + public ngOnInit(): void { + // Load default values. + if (this.auth.member$.value) { + this.setFormValues(this.auth.member$.value); + } + this.auth.member$?.pipe(untilDestroyed(this)).subscribe((obj) => { + if (obj) { + this.setFormValues(obj); + } + }); + + setTimeout(() => { + this.subscribeNftList(); + }, 2000); + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + private setFormValues(obj: Member): void { + this.nameControl.setValue(obj.name); + this.aboutControl.setValue(obj.about); + this.discordControl.setValue(obj.discord); + this.twitterControl.setValue(obj.twitter); + this.githubControl.setValue(obj.github); + if (obj?.avatarNft) { + this.nftApi + .listen(obj.avatarNft) + .pipe(first()) + .subscribe((nft) => { + if (nft) { + this.avatarNftControl.setValue(obj.avatarNft); + this.filteredNfts$.next([ + { + label: nft.name, + value: nft.uid, + }, + ]); + this.nftCache[nft.uid] = { + name: nft.name, + media: nft.media, + }; + } + }); + } + } + + private subscribeNftList(search?: string): void { + this.nftsSubscription?.unsubscribe(); + this.nftsSubscription = from( + this.algoliaService.searchClient.initIndex(COL.NFT).search(search || '', { + length: 10, + offset: 0, + filters: 'owner:' + this.auth.member$.value!.uid + ' AND ' + 'status:minted', + }), + ).subscribe((r) => { + this.filteredNfts$.next( + r.hits.map((r) => { + const nft = r as unknown as Nft; + this.nftCache[nft.uid] = { + name: nft.name, + media: nft.media, + }; + return { + label: nft.name, + value: nft.uid, + }; + }), + ); + }); + } + + public searchNft(v: string): void { + if (v) { + this.subscribeNftList(v); + } + } + + public async save(): Promise { + this.memberForm.updateValueAndValidity(); + if (!this.memberForm.valid) { + return; + } + + const obj: any = this.memberForm.value; + if (this.minted === false) { + delete obj.currentProfileImage; + } + + await this.auth.sign(this.memberForm.value, (sc, finish) => { + this.notification + .processRequest(this.memberApi.updateMember(sc), 'Updated', finish) + .subscribe(() => { + this.close(); + }); + }); + } + + public close(): void { + this.wenOnClose.next(); + } +} diff --git a/src/app/components/member/components/member-edit-drawer/member-edit-drawer.module.ts b/src/app/components/member/components/member-edit-drawer/member-edit-drawer.module.ts new file mode 100644 index 0000000..3faa938 --- /dev/null +++ b/src/app/components/member/components/member-edit-drawer/member-edit-drawer.module.ts @@ -0,0 +1,43 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; +import { IconModule } from '@components/icon/icon.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzUploadModule } from 'ng-zorro-antd/upload'; +import { TruncateModule } from '../../../../@core/pipes/truncate/truncate.module'; +import { MemberEditDrawerComponent } from './member-edit-drawer.component'; + +@NgModule({ + exports: [MemberEditDrawerComponent], + declarations: [MemberEditDrawerComponent], + imports: [ + CommonModule, + ReactiveFormsModule, + RouterModule, + TruncateModule, + ResizeAvatarModule, + NzAvatarModule, + NzAvatarModule, + NzIconModule, + NzTagModule, + NzInputModule, + NzCardModule, + NzUploadModule, + NzFormModule, + NzButtonModule, + NzDrawerModule, + NzSelectModule, + IconModule, + ], +}) +export class MemberEditDrawerModule {} diff --git a/src/app/components/member/components/member-space-row/member-space-row.component.html b/src/app/components/member/components/member-space-row/member-space-row.component.html new file mode 100644 index 0000000..13d558a --- /dev/null +++ b/src/app/components/member/components/member-space-row/member-space-row.component.html @@ -0,0 +1,30 @@ +
+
+
+ + +
{{ space?.name }}
+
+ + + {{ member?.spaces?.[space!.uid]?.awardsCompleted || 0 }} awards + +
+
+ + {{ member?.spaces?.[space!.uid]?.awardsCompleted || 0 }}  awards + + + +
+
diff --git a/src/app/components/member/components/member-space-row/member-space-row.component.less b/src/app/components/member/components/member-space-row/member-space-row.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/member/components/member-space-row/member-space-row.component.ts b/src/app/components/member/components/member-space-row/member-space-row.component.ts new file mode 100644 index 0000000..5c757ac --- /dev/null +++ b/src/app/components/member/components/member-space-row/member-space-row.component.ts @@ -0,0 +1,27 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { Member, Space } from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-member-space-row', + templateUrl: './member-space-row.component.html', + styleUrls: ['./member-space-row.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MemberSpaceRowComponent { + @Input() space?: Space; + @Input() member?: Member; + + public isReputationVisible = false; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + ) {} + + public getSpaceRoute(): string[] { + return ['/', ROUTER_UTILS.config.space.root, this.space?.uid || '']; + } +} diff --git a/src/app/components/member/components/member-space-row/member-space-row.module.ts b/src/app/components/member/components/member-space-row/member-space-row.module.ts new file mode 100644 index 0000000..e793e8f --- /dev/null +++ b/src/app/components/member/components/member-space-row/member-space-row.module.ts @@ -0,0 +1,15 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { IconModule } from '@components/icon/icon.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { MemberSpaceRowComponent } from './member-space-row.component'; + +@NgModule({ + declarations: [MemberSpaceRowComponent], + imports: [CommonModule, IconModule, NzTagModule, NzAvatarModule, NzIconModule, RouterModule], + exports: [MemberSpaceRowComponent], +}) +export class MemberSpaceRowModule {} diff --git a/src/app/components/member/components/tile/member-tile.component.html b/src/app/components/member/components/tile/member-tile.component.html new file mode 100644 index 0000000..d46ac60 --- /dev/null +++ b/src/app/components/member/components/tile/member-tile.component.html @@ -0,0 +1,10 @@ +
+
+ {{ title }} +
+
+ {{ value }} +
+
diff --git a/src/app/components/member/components/tile/member-tile.component.less b/src/app/components/member/components/tile/member-tile.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/member/components/tile/member-tile.component.ts b/src/app/components/member/components/tile/member-tile.component.ts new file mode 100644 index 0000000..3e84af4 --- /dev/null +++ b/src/app/components/member/components/tile/member-tile.component.ts @@ -0,0 +1,12 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-member-tile', + templateUrl: './member-tile.component.html', + styleUrls: ['./member-tile.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MemberTileComponent { + @Input() public title = ''; + @Input() public value = 0; +} diff --git a/src/app/components/member/components/tile/member-tile.module.ts b/src/app/components/member/components/tile/member-tile.module.ts new file mode 100644 index 0000000..5b8965c --- /dev/null +++ b/src/app/components/member/components/tile/member-tile.module.ts @@ -0,0 +1,14 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzStatisticModule } from 'ng-zorro-antd/statistic'; +import { TruncateModule } from '../../../../@core/pipes/truncate/truncate.module'; +import { MemberTileComponent } from './member-tile.component'; + +@NgModule({ + exports: [MemberTileComponent], + declarations: [MemberTileComponent], + imports: [CommonModule, RouterModule, TruncateModule, NzCardModule, NzStatisticModule], +}) +export class MemberTileModule {} diff --git a/src/app/components/member/member.module.ts b/src/app/components/member/member.module.ts new file mode 100644 index 0000000..9a9b007 --- /dev/null +++ b/src/app/components/member/member.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { MemberCardModule } from './components/member-card/member-card.module'; +import { MemberEditDrawerModule } from './components/member-edit-drawer/member-edit-drawer.module'; + +@NgModule({ + exports: [MemberCardModule, MemberEditDrawerModule], + imports: [CommonModule], +}) +export class MemberModule {} diff --git a/src/app/components/menu/menu-item/menu-item.component.html b/src/app/components/menu/menu-item/menu-item.component.html new file mode 100644 index 0000000..1394139 --- /dev/null +++ b/src/app/components/menu/menu-item/menu-item.component.html @@ -0,0 +1,6 @@ +
  • + + + + +
  • diff --git a/src/app/components/menu/menu-item/menu-item.component.less b/src/app/components/menu/menu-item/menu-item.component.less new file mode 100644 index 0000000..134de5e --- /dev/null +++ b/src/app/components/menu/menu-item/menu-item.component.less @@ -0,0 +1,7 @@ +[nz-menu-item] { + @apply rounded-2xl px-3; + + &:hover { + @apply text-buttons-primary-enabled dark:text-buttons-primary-enabled-dark cursor-pointer; + } +} diff --git a/src/app/components/menu/menu-item/menu-item.component.ts b/src/app/components/menu/menu-item/menu-item.component.ts new file mode 100644 index 0000000..0b2a684 --- /dev/null +++ b/src/app/components/menu/menu-item/menu-item.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-menu-item', + templateUrl: './menu-item.component.html', + styleUrls: ['./menu-item.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MenuItemComponent {} diff --git a/src/app/components/menu/menu.component.html b/src/app/components/menu/menu.component.html new file mode 100644 index 0000000..61f9d8d --- /dev/null +++ b/src/app/components/menu/menu.component.html @@ -0,0 +1,3 @@ +
      + +
    diff --git a/src/app/components/menu/menu.component.less b/src/app/components/menu/menu.component.less new file mode 100644 index 0000000..584133a --- /dev/null +++ b/src/app/components/menu/menu.component.less @@ -0,0 +1,4 @@ +[nz-menu] { + padding-left: 14px; + padding-right: 14px; +} diff --git a/src/app/components/menu/menu.component.ts b/src/app/components/menu/menu.component.ts new file mode 100644 index 0000000..7b4a5a4 --- /dev/null +++ b/src/app/components/menu/menu.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'wen-menu', + templateUrl: './menu.component.html', + styleUrls: ['./menu.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MenuComponent {} diff --git a/src/app/components/menu/menu.module.ts b/src/app/components/menu/menu.module.ts new file mode 100644 index 0000000..9fdcfa9 --- /dev/null +++ b/src/app/components/menu/menu.module.ts @@ -0,0 +1,13 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { NzMenuModule } from 'ng-zorro-antd/menu'; +import { MenuItemComponent } from './menu-item/menu-item.component'; +import { MenuComponent } from './menu.component'; + +@NgModule({ + declarations: [MenuComponent, MenuItemComponent], + imports: [CommonModule, RouterModule, NzMenuModule], + exports: [MenuComponent, MenuItemComponent], +}) +export class MenuModule {} diff --git a/src/app/components/mobile-search/mobile-search.component.html b/src/app/components/mobile-search/mobile-search.component.html new file mode 100644 index 0000000..3e070a1 --- /dev/null +++ b/src/app/components/mobile-search/mobile-search.component.html @@ -0,0 +1,26 @@ + + + + + + + diff --git a/src/app/components/mobile-search/mobile-search.component.less b/src/app/components/mobile-search/mobile-search.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/components/mobile-search/mobile-search.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/components/mobile-search/mobile-search.component.ts b/src/app/components/mobile-search/mobile-search.component.ts new file mode 100644 index 0000000..f7a6c49 --- /dev/null +++ b/src/app/components/mobile-search/mobile-search.component.ts @@ -0,0 +1,44 @@ +import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; +import { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; + +@UntilDestroy() +@Component({ + selector: 'wen-mobile-search', + templateUrl: './mobile-search.component.html', + styleUrls: ['./mobile-search.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [ + { + provide: NG_VALUE_ACCESSOR, + multi: true, + useExisting: MobileSearchComponent, + }, + ], +}) +export class MobileSearchComponent implements OnInit, ControlValueAccessor { + @Input() isSearchInputFocused = false; + @Input() value?: string; + @Input() placeholder = ''; + + public onChange: (v: string | undefined) => undefined = () => undefined; + public searchControl: FormControl = new FormControl(''); + + public ngOnInit(): void { + this.searchControl.valueChanges.pipe(untilDestroyed(this)).subscribe(() => { + this.onChange(this.searchControl.value); + }); + } + + public writeValue(value: string): void { + this.value = value; + } + + public registerOnChange(fn: (v: string | undefined) => undefined): void { + this.onChange = fn; + } + + public registerOnTouched(): void { + return undefined; + } +} diff --git a/src/app/components/mobile-search/mobile-search.module.ts b/src/app/components/mobile-search/mobile-search.module.ts new file mode 100644 index 0000000..066d105 --- /dev/null +++ b/src/app/components/mobile-search/mobile-search.module.ts @@ -0,0 +1,21 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { ClickOutsideModule } from '@core/directives/click-outside/click-outside.module'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { MobileSearchComponent } from './mobile-search.component'; + +@NgModule({ + declarations: [MobileSearchComponent], + imports: [ + CommonModule, + NzInputModule, + FormsModule, + ReactiveFormsModule, + NzIconModule, + ClickOutsideModule, + ], + exports: [MobileSearchComponent], +}) +export class MobileSearchModule {} diff --git a/src/app/components/modal-drawer/modal-drawer.component.html b/src/app/components/modal-drawer/modal-drawer.component.html new file mode 100644 index 0000000..46780e2 --- /dev/null +++ b/src/app/components/modal-drawer/modal-drawer.component.html @@ -0,0 +1,45 @@ + + + +
    +
    {{ title }}
    + +
    + + +
    +
    + + +
    + +
    {{ title }}
    + +
    + + +
    +
    +
    diff --git a/src/app/components/modal-drawer/modal-drawer.component.less b/src/app/components/modal-drawer/modal-drawer.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/modal-drawer/modal-drawer.component.ts b/src/app/components/modal-drawer/modal-drawer.component.ts new file mode 100644 index 0000000..985614f --- /dev/null +++ b/src/app/components/modal-drawer/modal-drawer.component.ts @@ -0,0 +1,44 @@ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + Output, + TemplateRef, +} from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { MODAL_WIDTH } from '@core/utils/modal.util'; + +@Component({ + selector: 'wen-modal-drawer', + templateUrl: './modal-drawer.component.html', + styleUrls: ['./modal-drawer.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ModalDrawerComponent { + @Input() title = ''; + @Input() content?: TemplateRef; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() modalWidth = MODAL_WIDTH; + @Input() primaryColor = true; + @Input() showHeader = true; + @Input() hasPadding = true; + @Output() wenOnClose = new EventEmitter(); + + private _isOpen = false; + + constructor(public deviceService: DeviceService) {} + + public close(): void { + this.isOpen = false; + this.wenOnClose.next(); + } +} diff --git a/src/app/components/modal-drawer/modal-drawer.module.ts b/src/app/components/modal-drawer/modal-drawer.module.ts new file mode 100644 index 0000000..031ca06 --- /dev/null +++ b/src/app/components/modal-drawer/modal-drawer.module.ts @@ -0,0 +1,13 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { ModalDrawerComponent } from './modal-drawer.component'; + +@NgModule({ + declarations: [ModalDrawerComponent], + imports: [CommonModule, NzDrawerModule, NzModalModule, IconModule], + exports: [ModalDrawerComponent], +}) +export class ModalDrawerModule {} diff --git a/src/app/components/network/components/select-network/select-network.component.html b/src/app/components/network/components/select-network/select-network.component.html new file mode 100644 index 0000000..4a0431e --- /dev/null +++ b/src/app/components/network/components/select-network/select-network.component.html @@ -0,0 +1,65 @@ +
    + {{ title ? title : 'What network do you want to use for minting?' }} +
    + +
    +
    +
    Shimmer
    +
    +
    +
    Shimmer
    +
    +
    + Testnet +
    +
    +
    +
    IOTA
    +
    +
    +
    IOTA
    +
    +
    + Devnet +
    +
    +
    diff --git a/src/app/components/network/components/select-network/select-network.component.less b/src/app/components/network/components/select-network/select-network.component.less new file mode 100644 index 0000000..ba7bb74 --- /dev/null +++ b/src/app/components/network/components/select-network/select-network.component.less @@ -0,0 +1,15 @@ +.network { + @apply px-5 space-x-2 mr-2 my-1 border border-inputs-border dark:border-inputs-border-dark rounded-3xl flex items-center justify-between cursor-pointer; + + &__selected { + @apply bg-tabs-selected dark:bg-tabs-selected-dark text-foregrounds-on-primary dark:text-foregrounds-on-primary-dark; + + div { + @apply text-foregrounds-on-primary dark:text-foregrounds-on-primary-dark; + } + } + + &__disabled { + @apply opacity-50 pointer-events-none; + } +} diff --git a/src/app/components/network/components/select-network/select-network.component.ts b/src/app/components/network/components/select-network/select-network.component.ts new file mode 100644 index 0000000..dc1c389 --- /dev/null +++ b/src/app/components/network/components/select-network/select-network.component.ts @@ -0,0 +1,42 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { environment } from '@env/environment'; +import { + Network, + PROD_AVAILABLE_MINTABLE_NETWORKS, + PROD_NETWORKS, + TEST_AVAILABLE_MINTABLE_NETWORKS, + TEST_NETWORKS, +} from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-select-network', + templateUrl: './select-network.component.html', + styleUrls: ['./select-network.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SelectNetworkComponent { + @Input() public selectedNetwork?: Network; + @Input() public title?: string; + + @Output() public selectNetwork: EventEmitter = new EventEmitter(); + public environment = environment; + + public isNetworkEnabled(n?: Network): boolean { + if (!n) { + return false; + } + + if (environment.production) { + return PROD_AVAILABLE_MINTABLE_NETWORKS.includes(n) && PROD_NETWORKS.includes(n); + } else { + return ( + [...PROD_AVAILABLE_MINTABLE_NETWORKS, ...TEST_AVAILABLE_MINTABLE_NETWORKS].includes(n) && + [...PROD_NETWORKS, ...TEST_NETWORKS].includes(n) + ); + } + } + + public get networkTypes(): typeof Network { + return Network; + } +} diff --git a/src/app/components/network/components/selected-network/selected-network.component.html b/src/app/components/network/components/selected-network/selected-network.component.html new file mode 100644 index 0000000..0c7dc36 --- /dev/null +++ b/src/app/components/network/components/selected-network/selected-network.component.html @@ -0,0 +1,26 @@ +
    +
    + Selected Network +
    + +
    + + +
    Shimmer
    +
    + + +
    Shimmer Testnet
    +
    + + +
    IOTA
    +
    + + +
    IOTA Devnet
    +
    +
    +
    diff --git a/src/app/components/network/components/selected-network/selected-network.component.less b/src/app/components/network/components/selected-network/selected-network.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/network/components/selected-network/selected-network.component.ts b/src/app/components/network/components/selected-network/selected-network.component.ts new file mode 100644 index 0000000..39327b2 --- /dev/null +++ b/src/app/components/network/components/selected-network/selected-network.component.ts @@ -0,0 +1,16 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { Network } from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-selected-network', + templateUrl: './selected-network.component.html', + styleUrls: ['./selected-network.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SelectedNetworkComponent { + @Input() public selectedNetwork?: string; + + public get networkTypes(): typeof Network { + return Network; + } +} diff --git a/src/app/components/network/components/send-funds/send-funds.component.html b/src/app/components/network/components/send-funds/send-funds.component.html new file mode 100644 index 0000000..01172dd --- /dev/null +++ b/src/app/components/network/components/send-funds/send-funds.component.html @@ -0,0 +1,36 @@ +
    +
    + + Send {{ formattedAmount }} to following address: + + + {{ targetText }} +
    + +
    +
    + {{ targetAddress }} +
    + + +
    +
    + +
    + Do not send funds from an exchange, always use wallets you fully control. +
    diff --git a/src/app/components/network/components/send-funds/send-funds.component.less b/src/app/components/network/components/send-funds/send-funds.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/network/components/send-funds/send-funds.component.ts b/src/app/components/network/components/send-funds/send-funds.component.ts new file mode 100644 index 0000000..2f64bff --- /dev/null +++ b/src/app/components/network/components/send-funds/send-funds.component.ts @@ -0,0 +1,30 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { copyToClipboard } from '@core/utils/tools.utils'; + +@Component({ + selector: 'wen-send-funds', + templateUrl: './send-funds.component.html', + styleUrls: ['./send-funds.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SendFundsComponent { + @Input() public formattedAmount?: string | null; + @Input() public targetAddress?: string; + @Input() public targetText?: string; + public isCopied = false; + + constructor(private cd: ChangeDetectorRef) { + // none. + } + + public copyAddress() { + if (!this.isCopied && this.targetAddress) { + copyToClipboard(this.targetAddress); + this.isCopied = true; + setTimeout(() => { + this.isCopied = false; + this.cd.markForCheck(); + }, 3000); + } + } +} diff --git a/src/app/components/network/network.module.ts b/src/app/components/network/network.module.ts new file mode 100644 index 0000000..f771771 --- /dev/null +++ b/src/app/components/network/network.module.ts @@ -0,0 +1,14 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { SelectNetworkComponent } from './components/select-network/select-network.component'; +import { SelectedNetworkComponent } from './components/selected-network/selected-network.component'; +import { SendFundsComponent } from './components/send-funds/send-funds.component'; + +@NgModule({ + declarations: [SelectedNetworkComponent, SelectNetworkComponent, SendFundsComponent], + imports: [CommonModule, IconModule, NzButtonModule], + exports: [SelectedNetworkComponent, SelectNetworkComponent, SendFundsComponent], +}) +export class NetworkModule {} diff --git a/src/app/components/nft/components/nft-bid/nft-bid.component.html b/src/app/components/nft/components/nft-bid/nft-bid.component.html new file mode 100644 index 0000000..78d5161 --- /dev/null +++ b/src/app/components/nft/components/nft-bid/nft-bid.component.html @@ -0,0 +1,385 @@ + + + + +
    +
    + NFT image + + +
    +
    +
    +

    {{ nft?.name }}

    +
    {{ collection?.name }}
    + +
    + +
    + Ends {{ expiryTicker$ | async | relativeTime : 'from' }} +
    +
    + +
    + +
    + {{ (collection?.royaltiesFee || 0) * 100 }}% Royalties +
    + +
    + + + + +
    +
    + Royalties goes to +
    +
    {{ royaltySpace.name | truncate : [20] }}
    +
    +
    + + + + +
    +
    + + Current highest bid + Min bid + + Current highest bid + Your bid is the highest +
    +
    +
    + {{ + getRecord()?.auctionHighestBid || getRecord()?.auctionFloorPrice || 0 + | formatToken : getRecord()?.mintingData?.network : true + | async + }} +
    + + + +
    + @{{ (auth.member$ | async)?.name || (auth.member$ | async)?.uid }} +
    +
    +
    +
    +
    + +
    + Current price is refreshing in real time +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    +
    + Adress of your desired NTF will be locked for you for the whole auction. After payment your + bid will be locked, if there is a higher bid, you will be refunded immediately. +
    +
    + If there is a higher bid, you will be refunded immediately. If you want to make another bid, + send higher amount directly to the same address. +
    + + + + + +
    +
    + + +
    + + + +
    + If there is a higher bid, you will be refunded immediately. If you want to make another bid, + send higher amount directly to the same address. +
    + + + +
    +
    + + +
    + + + +
    Your transactions
    + + + + Sent Date + Time + Action + Amount + +
    Detail
    + + + + + + {{ item.createdOn?.toDate() | date : 'shortDate' }} + {{ item.createdOn?.toDate() | date : 'mediumTime' }} + {{ item.type }} + + {{ item.payload.amount | formatToken : item.network | async }} + + + Link + + + +
    + +
    + If there is a higher bid, you will be refunded immediately. If you want to make another bid, + send higher amount directly to the same address. +
    + + + +
    +
    + + +
    +
    +
    + +
    +
    Congratulations you won the NFT.
    +
    + +
    + + + +
    +
    +
    + + +
    +
    +
    + +
    +
    Bidding is expired. Good luck next time :)
    +
    +
    +
    diff --git a/src/app/components/nft/components/nft-bid/nft-bid.component.less b/src/app/components/nft/components/nft-bid/nft-bid.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/nft/components/nft-bid/nft-bid.component.ts b/src/app/components/nft/components/nft-bid/nft-bid.component.ts new file mode 100644 index 0000000..758c503 --- /dev/null +++ b/src/app/components/nft/components/nft-bid/nft-bid.component.ts @@ -0,0 +1,308 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnInit, + Output, +} from '@angular/core'; +import { Router } from '@angular/router'; +import { FileApi } from '@api/file.api'; +import { OrderApi } from '@api/order.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { getBitItemItem, removeBitItemItem, setBitItemItem } from '@core/utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/nft/services/data.service'; +import { HelperService } from '@pages/nft/services/helper.service'; +import { + Collection, + CollectionType, + FILE_SIZES, + Nft, + Space, + Timestamp, + Transaction, + TransactionType, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, interval, Subscription, take } from 'rxjs'; + +export enum StepType { + CONFIRM = 'Confirm', + TRANSACTION = 'Transaction', + WAIT = 'Wait', + COMPLETE = 'Complete', + EXPIRED = 'Expired', +} + +@UntilDestroy() +@Component({ + selector: 'wen-nft-bid', + templateUrl: './nft-bid.component.html', + styleUrls: ['./nft-bid.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NftBidComponent implements OnInit { + @Input() currentStep = StepType.CONFIRM; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() + set nft(value: Nft | null | undefined) { + this._nft = value; + if (this._nft) { + this.fileApi + .getMetadata(this._nft.media) + .pipe(take(1), untilDestroyed(this)) + .subscribe((o) => { + this.mediaType = o; + this.cd.markForCheck(); + }); + } + } + + get nft(): Nft | null | undefined { + return this._nft; + } + + @Input() + set collection(value: Collection | null | undefined) { + this._collection = value; + if (this.collection) { + this.cache + .getSpace(this.collection.royaltiesSpace) + .pipe(untilDestroyed(this)) + .subscribe((space?: Space) => { + this.royaltySpace = space; + this.cd.markForCheck(); + }); + } + } + + get collection(): Collection | null | undefined { + return this._collection; + } + + @Input() endsOnTicker$: BehaviorSubject = new BehaviorSubject< + Timestamp | undefined + >(undefined); + @Output() wenOnClose = new EventEmitter(); + + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public linkedTransactions$: BehaviorSubject = new BehaviorSubject( + [], + ); + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public stepType = StepType; + public isCopied = false; + public agreeTermsConditions = false; + public mediaType: 'video' | 'image' | undefined; + public targetAddress?: string; + public targetAmount?: number; + public path = ROUTER_UTILS.config.nft.root; + public royaltySpace?: Space | null; + + private transSubscription?: Subscription; + private _isOpen = false; + private _nft?: Nft | null; + private _collection?: Collection | null; + + constructor( + public deviceService: DeviceService, + public auth: AuthService, + public data: DataService, + public helper: HelperService, + public previewImageService: PreviewImageService, + public unitsService: UnitsService, + public transactionService: TransactionService, + private cd: ChangeDetectorRef, + private fileApi: FileApi, + private notification: NotificationService, + private router: Router, + private orderApi: OrderApi, + private cache: CacheService, + ) {} + + public ngOnInit(): void { + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = this.nft?.auctionHighestBid || val.payload.amount; + if (val.payload.expiresOn) { + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + // It's expired. + removeBitItemItem(val.payload.nft + this.auth.member$.value?.uid + expiresOn.valueOf()); + } + this.expiryTicker$.next(expiresOn); + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.WAIT; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe((t: Transaction | undefined) => { + if (!t) { + return; + } + + let currentArray = this.linkedTransactions$.value; + const exists = currentArray.findIndex((o) => { + return o.uid === t.uid; + }); + + if (exists > -1) { + currentArray[exists] = t; + } else { + currentArray.unshift(t); + } + + // Re-order + currentArray = currentArray.sort((c, b) => { + return b.createdOn!.toMillis() - c.createdOn!.toMillis(); + }); + + this.linkedTransactions$.next(currentArray); + }); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + if (val && val.payload.void === true) { + this.currentStep = StepType.EXPIRED; + } + + if (val && val.payload.reconciled === true) { + this.currentStep = StepType.COMPLETE; + } + } + + this.cd.markForCheck(); + }); + + if ( + this.nft?.uid && + getBitItemItem(this.nft.uid + this.auth.member$.value?.uid + this.nft.auctionTo?.toMillis()) + ) { + this.transSubscription = this.orderApi + .listen( + ( + getBitItemItem( + this.nft.uid + this.auth.member$.value?.uid + this.nft.auctionTo?.toMillis(), + ) + ), + ) + .subscribe(this.transaction$); + } + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + removeBitItemItem(this.nft!.uid + this.auth.member$.value?.uid + expiresOn.valueOf()); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public goToNft(): void { + this.router.navigate(['/', this.path, this.nft?.uid]); + this.reset(); + this.wenOnClose.next(); + } + + public getRecord(): Nft | null | undefined { + return this.nft; + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.CONFIRM; + this.cd.markForCheck(); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public getTitle(): any { + if (!this.nft) { + return ''; + } + + if (this.nft.type === CollectionType.CLASSIC) { + return this.nft.name; + } else if (this.nft.type === CollectionType.GENERATED) { + return $localize`Generated NFT`; + } else if (this.nft.type === CollectionType.SFT) { + return $localize`SFT`; + } + } + + public async proceedWithBid(): Promise { + if (!this.collection || !this.nft || !this.agreeTermsConditions) { + return; + } + + const params: any = { + nft: this.nft.uid, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.orderApi.openBid(sc), 'Order created.', finish) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + setBitItemItem( + params.nft + this.auth.member$.value?.uid + this.nft?.auctionTo?.toMillis(), + val.uid, + ); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + }); + }); + } + + public trackByUniqueId(index: number, item: any): number { + return item.uniqueId; + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } +} diff --git a/src/app/components/nft/components/nft-bid/nft-bid.module.ts b/src/app/components/nft/components/nft-bid/nft-bid.module.ts new file mode 100644 index 0000000..02c0d95 --- /dev/null +++ b/src/app/components/nft/components/nft-bid/nft-bid.module.ts @@ -0,0 +1,56 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { CountdownModule } from '@components/countdown/countdown.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { RelativeTimeModule } from '@core/pipes/relative-time/relative-time.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzNotificationModule } from 'ng-zorro-antd/notification'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NftBidComponent } from './nft-bid.component'; + +@NgModule({ + declarations: [NftBidComponent], + imports: [ + RouterModule, + FormatTokenModule, + CommonModule, + NzDrawerModule, + NzModalModule, + IconModule, + TimeModule, + NzToolTipModule, + NetworkModule, + NzCheckboxModule, + NzButtonModule, + CountdownTimeModule, + NzAlertModule, + TruncateModule, + RelativeTimeModule, + NzNotificationModule, + NzTableModule, + NzAvatarModule, + ResizeAvatarModule, + CountdownModule, + ModalDrawerModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + ], + exports: [NftBidComponent], +}) +export class NftBidModule {} diff --git a/src/app/components/nft/components/nft-card/nft-card.component.html b/src/app/components/nft/components/nft-card/nft-card.component.html new file mode 100644 index 0000000..49f610d --- /dev/null +++ b/src/app/components/nft/components/nft-card/nft-card.component.html @@ -0,0 +1,245 @@ +
    + +
    + NFT image + + + +
    + {{ getBadgeProperties().label }} +
    + +
    +
    + +
    + +
    + +
    +
    + + Starts in + + {{ + helper.getDaysLeft(nft?.availableFrom) > 0 + ? helper.getDaysLeft(nft?.availableFrom) + : helper.getDaysLeft(nft?.auctionFrom) + }} + + days + day + + + Starts today + +
    +
    +
    + +
    + +
    diff --git a/src/app/components/nft/components/nft-card/nft-card.component.less b/src/app/components/nft/components/nft-card/nft-card.component.less new file mode 100644 index 0000000..474bb67 --- /dev/null +++ b/src/app/components/nft/components/nft-card/nft-card.component.less @@ -0,0 +1,3 @@ +.card-smaller-height { + height: calc(100% - 20px) !important; +} diff --git a/src/app/components/nft/components/nft-card/nft-card.component.ts b/src/app/components/nft/components/nft-card/nft-card.component.ts new file mode 100644 index 0000000..2698c87 --- /dev/null +++ b/src/app/components/nft/components/nft-card/nft-card.component.ts @@ -0,0 +1,185 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { Router } from '@angular/router'; +import { FileApi } from '@api/file.api'; +import { MemberApi } from '@api/member.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/nft/services/helper.service'; +import { + Access, + Collection, + CollectionStatus, + CollectionType, + FILE_SIZES, + Member, + MIN_AMOUNT_TO_TRANSFER, + Nft, + NftAccess, +} from '@soonaverse/interfaces'; +import { BehaviorSubject, Subscription, take } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-nft-card', + templateUrl: './nft-card.component.html', + styleUrls: ['./nft-card.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NftCardComponent { + @Input() fullWidth?: boolean; + @Input() enableWithdraw?: boolean; + + @Input() + set nft(value: Nft | null | undefined) { + if (this.memberApiSubscription) { + this.memberApiSubscription.unsubscribe(); + } + this._nft = value; + const owner = this.nft?.owner || this.nft?.createdBy; + if (owner) { + this.memberApiSubscription = this.memberApi + .listen(owner) + .pipe(untilDestroyed(this)) + .subscribe(this.owner$); + } else { + this.owner$.next(undefined); + } + + if (this.nft) { + this.fileApi + .getMetadata(this.nft.media) + .pipe(take(1), untilDestroyed(this)) + .subscribe((o) => { + this.mediaType = o; + // this.cd.markForCheck(); // this seems to causing a serious issue within nfts.page !!!!! + this.cd.detectChanges(); + }); + } + } + + get nft(): Nft | null | undefined { + return this._nft; + } + + @Input() collection?: Collection | null; + + public mediaType: 'video' | 'image' | undefined; + public isCheckoutOpen = false; + public isBidOpen = false; + public path = ROUTER_UTILS.config.nft.root; + public owner$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + private memberApiSubscription?: Subscription; + private _nft?: Nft | null; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public helper: HelperService, + public unitsService: UnitsService, + public auth: AuthService, + private cd: ChangeDetectorRef, + private router: Router, + private memberApi: MemberApi, + private fileApi: FileApi, + private cache: CacheService, + ) {} + + public onBuy(event: MouseEvent): void { + event.stopPropagation(); + event.preventDefault(); + this.cache.openCheckout = true; + this.router.navigate(['/', ROUTER_UTILS.config.nft.root, this.nft?.uid]); + } + + public onImgErrorWeShowPlaceHolderVideo(event: any): any { + // Try full image instead. + event.target.src = '/assets/mocks/video_placeholder.jpg'; + } + + /** + * As we are now using Algolia it does not have to be only timestamp. + * @param date + * @returns + */ + public getDate(date: any): any { + if (typeof date === 'object' && date?.toDate) { + return date.toDate(); + } else { + return date || undefined; + } + } + + private discount(): number { + if (!this.collection?.space || !this.auth.member$.value || this._nft?.owner) { + return 1; + } + + const spaceRewards = (this.auth.member$.value.spaces || {})[this.collection.space]; + const descDiscounts = [...(this.collection.discounts || [])].sort( + (a, b) => b.amount - a.amount, + ); + for (const discount of descDiscounts) { + const awardStat = (spaceRewards?.awardStat || {})[discount.tokenUid]; + const memberTotalReward = awardStat?.totalReward || 0; + if (memberTotalReward >= discount.tokenReward) { + return 1 - discount.amount; + } + } + return 1; + } + + public applyDiscount(amount?: number | null): number { + let finalPrice = Math.ceil((amount || 0) * this.discount()); + if (finalPrice < MIN_AMOUNT_TO_TRANSFER) { + finalPrice = MIN_AMOUNT_TO_TRANSFER; + } + + return finalPrice; + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + public get targetAccess(): typeof Access { + return Access; + } + + public get targetNftAccess(): typeof NftAccess { + return NftAccess; + } + + public getBadgeProperties(): { label: string; className: string } { + if (this.nft?.owner) { + return { + label: $localize`Available`, + className: 'bg-tags-available dark:bg-tags-available-dark', + }; + } else if (this.nft?.type === CollectionType.CLASSIC) { + return { + label: $localize`New NFT`, + className: 'bg-tags-available dark:bg-tags-available-dark', + }; + } else { + const remaining = this.collection?.availableNfts || 0; + return { + label: remaining > 100 ? `100+ remaining` : `${remaining} remaining`, + className: + remaining >= 100 + ? 'bg-tags-commencing dark:bg-tags-commencing-dark' + : 'bg-tags-closed dark:bg-tags-closed-dark', + }; + } + } + + public get collectionStatuses(): typeof CollectionStatus { + return CollectionStatus; + } +} diff --git a/src/app/components/nft/components/nft-card/nft-card.module.ts b/src/app/components/nft/components/nft-card/nft-card.module.ts new file mode 100644 index 0000000..413b97b --- /dev/null +++ b/src/app/components/nft/components/nft-card/nft-card.module.ts @@ -0,0 +1,34 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { AccessBadgeModule } from '@components/collection/components/collection-access-badge/collection-access-badge.module'; +import { IconModule } from '@components/icon/icon.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { StripMarkDownModule } from '@core/pipes/strip-markdown/strip-markdown.module'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzNotificationModule } from 'ng-zorro-antd/notification'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NftCardComponent } from './nft-card.component'; + +@NgModule({ + declarations: [NftCardComponent], + imports: [ + CommonModule, + RouterModule, + FormatTokenModule, + StripMarkDownModule, + TruncateModule, + IconModule, + NzButtonModule, + NzNotificationModule, + NzAvatarModule, + NzToolTipModule, + ResizeAvatarModule, + AccessBadgeModule, + ], + exports: [NftCardComponent], +}) +export class NftCardModule {} diff --git a/src/app/components/nft/components/nft-checkout/nft-checkout.component.html b/src/app/components/nft/components/nft-checkout/nft-checkout.component.html new file mode 100644 index 0000000..5130502 --- /dev/null +++ b/src/app/components/nft/components/nft-checkout/nft-checkout.component.html @@ -0,0 +1,296 @@ + + + + +
    +
    + NFT image + + +
    +
    +
    +

    {{ getTitle() }}

    +
    {{ collection?.name }}
    +
    + +
    + {{ (collection?.royaltiesFee || 0) * 100 }}% Royalties +
    + +
    + + + + +
    +
    + Royalties goes to +
    +
    {{ royaltySpace.name | truncate : [20] }}
    +
    +
    + +
    +
    + Total price +
    +
    +
    + {{ targetPrice | formatToken : collection?.mintingData?.network : true | async }} +
    +
    + {{ + calc(targetPrice, discount()) + | formatToken : collection?.mintingData?.network : true + | async + }} +
    +
    +
    +
    + {{ + currentStep !== stepType.CONFIRM + ? (targetAmount | formatToken : collection?.mintingData?.network : true | async) + : (targetPrice | formatToken : collection?.mintingData?.network : true | async) + }} +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + +
    +
    + + +
    + + + + + +
    + Your NFT will be locked for purchase for {{ lockTime }} + minutes. +
    +
    +
    + + +
    +
    + +
    + {{ + expiryTicker$ | async | countdownTime + }} + + remaining to make the transfer. + Expired +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    + +
    +
    + +
    +
    Transaction complete. Congratulations.
    +
    + +
    + + + +
    +
    +
    diff --git a/src/app/components/nft/components/nft-checkout/nft-checkout.component.less b/src/app/components/nft/components/nft-checkout/nft-checkout.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/nft/components/nft-checkout/nft-checkout.component.ts b/src/app/components/nft/components/nft-checkout/nft-checkout.component.ts new file mode 100644 index 0000000..8f7e110 --- /dev/null +++ b/src/app/components/nft/components/nft-checkout/nft-checkout.component.ts @@ -0,0 +1,472 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import { Router } from '@angular/router'; +import { FileApi } from '@api/file.api'; +import { NftApi } from '@api/nft.api'; +import { OrderApi } from '@api/order.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { CacheService } from '@core/services/cache/cache.service'; +import { CheckoutService } from '@core/services/checkout'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { getItem, removeItem, setItem, StorageItem } from '@core/utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/nft/services/helper.service'; +import { + Collection, + CollectionType, + MIN_AMOUNT_TO_TRANSFER, + Nft, + Space, + Timestamp, + Transaction, + TransactionType, + TRANSACTION_AUTO_EXPIRY_MS, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, firstValueFrom, interval, Subscription, take } from 'rxjs'; + +export enum StepType { + CONFIRM = 'Confirm', + TRANSACTION = 'Transaction', + WAIT = 'Wait', + COMPLETE = 'Complete', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction?: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-nft-checkout', + templateUrl: './nft-checkout.component.html', + styleUrls: ['./nft-checkout.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NftCheckoutComponent implements OnInit, OnDestroy { + @Input() currentStep = StepType.CONFIRM; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + this.checkoutService.modalOpen$.next(value); + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() + set nft(value: Nft | null | undefined) { + this._nft = value; + if (this._nft) { + this.fileApi + .getMetadata(this._nft.media) + .pipe(take(1), untilDestroyed(this)) + .subscribe((o) => { + this.mediaType = o; + this.cd.markForCheck(); + }); + + if (this.currentStep === StepType.CONFIRM) { + this.targetPrice = this._nft.availablePrice || this._nft.price || 0; + } + } + } + + get nft(): Nft | null | undefined { + return this._nft; + } + + @Input() + set collection(value: Collection | null | undefined) { + this._collection = value; + if (this.collection) { + this.cache + .getSpace(this.collection.royaltiesSpace) + .pipe(untilDestroyed(this)) + .subscribe((space?: Space) => { + this.royaltySpace = space; + this.cd.markForCheck(); + }); + } + } + + get collection(): Collection | null | undefined { + return this._collection; + } + + @Output() wenOnClose = new EventEmitter(); + + public purchasedNft?: Nft | null; + public stepType = StepType; + public isCopied = false; + public agreeTermsConditions = false; + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public receivedTransactions = false; + public mediaType: 'video' | 'image' | undefined; + public history: HistoryItem[] = []; + public invalidPayment = false; + public targetAddress?: string; + public targetAmount?: number; + public targetPrice = 0; + public royaltySpace?: Space | null; + private _isOpen = false; + private _nft?: Nft | null; + private _collection?: Collection | null; + + private transSubscription?: Subscription; + public path = ROUTER_UTILS.config.nft.root; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public helper: HelperService, + public unitsService: UnitsService, + public transactionService: TransactionService, + private checkoutService: CheckoutService, + private auth: AuthService, + private router: Router, + private notification: NotificationService, + private cd: ChangeDetectorRef, + private orderApi: OrderApi, + private nftApi: NftApi, + private fileApi: FileApi, + private cache: CacheService, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + // It's expired. + removeItem(StorageItem.CheckoutTransaction); + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.WAIT; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`Payment received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + dayjs(), + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + dayjs(), + $localize`Transaction confirmed.`, + ); + this.receivedTransactions = true; + this.currentStep = StepType.COMPLETE; + this.cd.markForCheck(); + }, 2000); + + // Load purchased NFT. + if (val.payload.nft) { + firstValueFrom(this.nftApi.listen(val.payload.nft)).then((obj) => { + if (obj) { + this.purchasedNft = obj; + this.fileApi + .getMetadata(this.purchasedNft.media) + .pipe(take(1), untilDestroyed(this)) + .subscribe((o) => { + this.mediaType = o; + this.cd.markForCheck(); + }); + this.cd.markForCheck(); + } + }); + } + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid amount received. Refunding transaction...`, + ); + } + + const markInvalid = () => { + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid transaction.You must gift storage deposit.`, + ); + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Invalid payment refunded.`, + val.payload?.walletReference?.chainReference, + ); + + // Let's go back to wait. With slight delay so they can see this. + markInvalid(); + } + + this.cd.markForCheck(); + }); + + if (getItem(StorageItem.CheckoutTransaction)) { + this.transSubscription = this.orderApi + .listen(getItem(StorageItem.CheckoutTransaction)) + .subscribe(this.transaction$); + } + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + removeItem(StorageItem.CheckoutTransaction); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public get lockTime(): number { + return TRANSACTION_AUTO_EXPIRY_MS / 1000 / 60; + } + + public discount(): number { + if (!this.collection?.space || !this.auth.member$.value || this.nft?.owner) { + return 1; + } + + const spaceRewards = (this.auth.member$.value.spaces || {})[this.collection.space]; + const descDiscounts = [...(this.collection.discounts || [])].sort( + (a, b) => b.amount - a.amount, + ); + for (const discount of descDiscounts) { + const awardStat = (spaceRewards?.awardStat || {})[discount.tokenUid]; + const memberTotalReward = awardStat?.totalReward || 0; + if (memberTotalReward >= discount.tokenReward) { + return 1 - discount.amount; + } + } + return 1; + } + + public calc(amount: number, discount: number): number { + let finalPrice = Math.ceil(amount * discount); + if (finalPrice < MIN_AMOUNT_TO_TRANSFER) { + finalPrice = MIN_AMOUNT_TO_TRANSFER; + } + + finalPrice = Math.floor(finalPrice / 1000 / 10) * 1000 * 10; // Max two decimals on Mi. + return finalPrice; + } + + public reset(): void { + this.receivedTransactions = false; + this.isOpen = false; + this.currentStep = StepType.CONFIRM; + this.purchasedNft = undefined; + this.cd.markForCheck(); + } + + public goToNft(): void { + this.router.navigate(['/', this.path, this.purchasedNft?.uid]); + this.reset(); + this.wenOnClose.next(); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public getRecord(): Nft | null | undefined { + return this.purchasedNft || this.nft; + } + + public async proceedWithOrder(): Promise { + if (!this.collection || !this.nft || !this.agreeTermsConditions) { + return; + } + + const params: any = { + collection: this.collection.uid, + }; + + if (this.collection.type === CollectionType.CLASSIC) { + params.nft = this.nft.uid; + } + + // If owner is set CollectionType is not relevant. + if (this.nft.owner) { + params.nft = this.nft.uid; + } + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.orderApi.orderNft(sc), $localize`Order created.`, finish) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + setItem(StorageItem.CheckoutTransaction, val.uid); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + }); + }); + } + + public getTitle(): any { + if (!this.nft) { + return ''; + } + + if (!this.purchasedNft) { + if (this.nft.owner) { + return this.nft.name; + } else { + if (this.nft.type === CollectionType.CLASSIC) { + return this.nft.name; + } else if (this.nft.type === CollectionType.GENERATED) { + return $localize`Generated NFT`; + } else if (this.nft.type === CollectionType.SFT) { + return $localize`SFT`; + } + } + } else { + return this.purchasedNft.name; + } + } + + public ngOnDestroy(): void { + this.transSubscription?.unsubscribe(); + } +} diff --git a/src/app/components/nft/components/nft-checkout/nft-checkout.module.ts b/src/app/components/nft/components/nft-checkout/nft-checkout.module.ts new file mode 100644 index 0000000..bad391e --- /dev/null +++ b/src/app/components/nft/components/nft-checkout/nft-checkout.module.ts @@ -0,0 +1,48 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzNotificationModule } from 'ng-zorro-antd/notification'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NftCheckoutComponent } from './nft-checkout.component'; + +@NgModule({ + declarations: [NftCheckoutComponent], + imports: [ + RouterModule, + CommonModule, + NzDrawerModule, + FormatTokenModule, + NzModalModule, + IconModule, + TimeModule, + NzToolTipModule, + NetworkModule, + NzCheckboxModule, + NzButtonModule, + CountdownTimeModule, + NzAlertModule, + TruncateModule, + NzNotificationModule, + NzAvatarModule, + ModalDrawerModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + ], + exports: [NftCheckoutComponent], +}) +export class NftCheckoutModule {} diff --git a/src/app/components/nft/components/nft-deposit/nft-deposit.component.html b/src/app/components/nft/components/nft-deposit/nft-deposit.component.html new file mode 100644 index 0000000..230ca7f --- /dev/null +++ b/src/app/components/nft/components/nft-deposit/nft-deposit.component.html @@ -0,0 +1,173 @@ + + + + +
    + +
    + +
    + + + + + + + + + + + + + + + +
    + + +
    +
    + +
    + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be + locked in Soonaverse. You can withdraw anytime. +
    +
    + + + + + + + + +
    +
    + + +
    +
    + +
    + {{ + expiryTicker$ | async | countdownTime + }} + + remaining to make the transfer. + Expired +
    +
    + + + +
    + +
    + If NFT is not recognised within Soonaverse. We will create new Collection and it’s + associated Space. Don’t forget to claim this space if you are the original author. +
    +
    + + + +
    +
    + + +
    +
    +
    Transaction history
    + +
    +
    +
    + {{ t.date | Time }} +
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    +
    +
    + + +
    +
    +
    + +
    +
    NFT has been deposited.
    +
    + + +
    +
    +
    diff --git a/src/app/components/nft/components/nft-deposit/nft-deposit.component.less b/src/app/components/nft/components/nft-deposit/nft-deposit.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/nft/components/nft-deposit/nft-deposit.component.ts b/src/app/components/nft/components/nft-deposit/nft-deposit.component.ts new file mode 100644 index 0000000..6da9b04 --- /dev/null +++ b/src/app/components/nft/components/nft-deposit/nft-deposit.component.ts @@ -0,0 +1,335 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnInit, + Output, +} from '@angular/core'; +import { Router } from '@angular/router'; +import { NftApi } from '@api/nft.api'; +import { OrderApi } from '@api/order.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { TransactionStep } from '@components/transaction-steps/transaction-steps.component'; +import { NotificationService } from '@core/services/notification'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { removeItem, setItem, StorageItem } from '@core/utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/nft/services/helper.service'; +import { + Network, + Timestamp, + Transaction, + TransactionType, + TRANSACTION_AUTO_EXPIRY_MS, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, interval, Subscription } from 'rxjs'; + +export enum StepType { + SELECT = 'Select', + TRANSACTION = 'Transaction', + WAIT = 'Wait', + CONFIRMED = 'Confirmed', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-nft-deposit', + templateUrl: './nft-deposit.component.html', + styleUrls: ['./nft-deposit.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NftDepositComponent implements OnInit { + @Input() currentStep = StepType.SELECT; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Output() wenOnClose = new EventEmitter(); + + public stepType = StepType; + public isCopied = false; + public agreeTermsConditions = false; + public selectedNetwork?: Network; + public environment = environment; + public targetAddress?: string = 'dummy_address'; + public targetAmount?: number = 1200000; + public targetNft?: string; + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public invalidPayment = false; + public history: HistoryItem[] = []; + public receivedTransactions = false; + public steps: TransactionStep[] = [ + { label: $localize`Terms & Conditions`, sequenceNum: 0 }, + { label: $localize`Send NFT`, sequenceNum: 1 }, + { label: $localize`Wait for confirmation`, sequenceNum: 2 }, + { label: $localize`Confirmed`, sequenceNum: 3 }, + ]; + private transSubscription?: Subscription; + private _isOpen = false; + + constructor( + public unitsService: UnitsService, + public transactionService: TransactionService, + public helper: HelperService, + private router: Router, + private cd: ChangeDetectorRef, + private auth: AuthService, + private notification: NotificationService, + private nftApi: NftApi, + private orderApi: OrderApi, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + if (val.payload.nft) { + this.targetNft = val.payload.nft; + } + + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + // It's expired. + removeItem(StorageItem.DepositNftTransaction); + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.WAIT; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`NFT received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + dayjs(), + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + dayjs(), + $localize`Transaction confirmed.`, + ); + this.receivedTransactions = true; + this.currentStep = StepType.CONFIRMED; + this.cd.markForCheck(); + }, 2000); + } + + if ( + val && + val.type === TransactionType.CREDIT_NFT && + val.payload.reconciled === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid NFT received. ` + val.payload?.response?.key || '', + ); + } + + if ( + val && + val.type === TransactionType.CREDIT_NFT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Invalid NFT refunded.`, + val.payload?.walletReference?.chainReference, + ); + + // Let's go back to wait. With slight delay so they can see this. + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + } + + this.cd.markForCheck(); + }); + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + removeItem(StorageItem.DepositNftTransaction); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public get lockTime(): number { + return TRANSACTION_AUTO_EXPIRY_MS / 1000 / 60; + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.SELECT; + this.cd.markForCheck(); + } + + public goToNft(): void { + this.router.navigate(['/', ROUTER_UTILS.config.nft.root, this.targetNft]); + this.close(); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public isExpired(val?: Transaction | null): boolean { + if (!val?.createdOn) { + return false; + } + + const expiresOn: dayjs.Dayjs = dayjs(val.createdOn.toDate()).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + return expiresOn.isBefore(dayjs()) && val.type === TransactionType.ORDER; + } + + public async proceedWithDeposit(): Promise { + if (this.selectedNetwork === undefined || !this.agreeTermsConditions) { + return; + } + + const params: any = { + network: this.selectedNetwork, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.nftApi.depositNft(sc), 'Order created.', finish) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + setItem(StorageItem.DepositNftTransaction, val.uid); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + }); + }); + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public getCurrentSequenceNum(): number { + switch (this.currentStep) { + case StepType.SELECT: + return 0; + case StepType.TRANSACTION: + return 1; + case StepType.WAIT: + return 2; + case StepType.CONFIRMED: + return 3; + default: + return 0; + } + } +} diff --git a/src/app/components/nft/components/nft-deposit/nft-deposit.module.ts b/src/app/components/nft/components/nft-deposit/nft-deposit.module.ts new file mode 100644 index 0000000..6cba631 --- /dev/null +++ b/src/app/components/nft/components/nft-deposit/nft-deposit.module.ts @@ -0,0 +1,32 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { TransactionStepsModule } from '@components/transaction-steps/transaction-steps.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NftDepositComponent } from './nft-deposit.component'; + +@NgModule({ + declarations: [NftDepositComponent], + imports: [ + CommonModule, + ModalDrawerModule, + NzButtonModule, + NetworkModule, + IconModule, + TermsAndConditionsModule, + NzAlertModule, + CountdownTimeModule, + TimeModule, + NzAvatarModule, + TransactionStepsModule, + ], + exports: [NftDepositComponent], +}) +export class NftDepositModule {} diff --git a/src/app/components/nft/components/nft-preview/nft-preview.component.html b/src/app/components/nft/components/nft-preview/nft-preview.component.html new file mode 100644 index 0000000..f26cb62 --- /dev/null +++ b/src/app/components/nft/components/nft-preview/nft-preview.component.html @@ -0,0 +1,160 @@ + + +
    +
    +
    Preview
    + +
    + + +
    +
    +
    + + +
    +
    Preview
    + + + +
    +
    + + +
    +
    +

    {{ nft.name }}

    + +
    +
    + +
    Sale Starts
    +
    +
    + {{ nft?.availableFrom | date : 'short' }} +
    +
    + +
    +
    +
    Current price
    +
    +
    + {{ nft.price | formatToken : nft.mintingData?.network | async }} +
    +
    +
    + + + + +
    + +
    + + + + + + + + + + + + + + + +
    + +
    +
    + NFT Image + + +
    +
    +
    +
    diff --git a/src/app/components/nft/components/nft-preview/nft-preview.component.less b/src/app/components/nft/components/nft-preview/nft-preview.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/nft/components/nft-preview/nft-preview.component.ts b/src/app/components/nft/components/nft-preview/nft-preview.component.ts new file mode 100644 index 0000000..45dccdf --- /dev/null +++ b/src/app/components/nft/components/nft-preview/nft-preview.component.ts @@ -0,0 +1,96 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { FileApi } from '@api/file.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DescriptionItemType } from '@components/description/description.component'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/nft/services/data.service'; +import { HelperService } from '@pages/nft/services/helper.service'; +import { FILE_SIZES, Nft, Space } from '@soonaverse/interfaces'; +import { switchMap, take } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-nft-preview', + templateUrl: './nft-preview.component.html', + styleUrls: ['./nft-preview.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NftPreviewComponent { + @Input() + set nft(value: Nft | null) { + this._nft = value; + this.cache + .getCollection(this.nft?.collection) + .pipe( + switchMap((collection) => this.cache.getSpace(collection?.space)), + untilDestroyed(this), + ) + .subscribe((space?: Space) => { + this.space = space; + this.cd.markForCheck(); + }); + if (this.nft) { + this.fileApi + .getMetadata(this.nft.media) + .pipe(take(1), untilDestroyed(this)) + .subscribe((o) => { + this.mediaType = o; + this.cd.markForCheck(); + }); + } + } + + get nft(): any | null { + return this._nft; + } + + @Output() wenOnClose = new EventEmitter(); + + public space?: Space; + public mediaType: 'video' | 'image' | undefined; + public systemInfoLabels: string[] = [$localize`IPFS Metadata`, $localize`IPFS Image`]; + public systemInfoValues: { [key: string]: string } = { + preparing: $localize`Available once minted...`, + }; + private _nft: any | null; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public helper: HelperService, + public unitsService: UnitsService, + public data: DataService, + public auth: AuthService, + public cache: CacheService, + private cd: ChangeDetectorRef, + private fileApi: FileApi, + ) {} + + public close(): void { + this.nft = null; + this.wenOnClose.next(); + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + public getValues(obj: Nft) { + return Object.values(obj).map(({ label, value }) => ({ + title: label, + value, + type: DescriptionItemType.DEFAULT_NO_TRUNCATE, + })); + } +} diff --git a/src/app/components/nft/components/nft-preview/nft-preview.module.ts b/src/app/components/nft/components/nft-preview/nft-preview.module.ts new file mode 100644 index 0000000..5473c06 --- /dev/null +++ b/src/app/components/nft/components/nft-preview/nft-preview.module.ts @@ -0,0 +1,38 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { CollapseModule } from '@components/collapse/collapse.module'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { MarkDownModule } from '@core/pipes/markdown/markdown.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NftPreviewComponent } from './nft-preview.component'; + +@NgModule({ + declarations: [NftPreviewComponent], + imports: [ + CommonModule, + NzDrawerModule, + NzModalModule, + IconModule, + NzCardModule, + NzAvatarModule, + RouterModule, + NzIconModule, + ResizeAvatarModule, + MarkDownModule, + CollapseModule, + FormatTokenModule, + NzToolTipModule, + DescriptionModule, + ], + exports: [NftPreviewComponent], +}) +export class NftPreviewModule {} diff --git a/src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html b/src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html new file mode 100644 index 0000000..2a4466b --- /dev/null +++ b/src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html @@ -0,0 +1,142 @@ +
    +
    + Set your floor price +
    + + + + + + + + + + +
    +
    + Available time +
    +
    +
    + NOW +
    +
    + Select Date/Time +
    +
    +
    + + + + + + + + +
    + Auction length +
    + + + + + + + + + +
    + + Set duration of auction +
    +
    +
    +
    + +
    + +
    Auction can't be canceled after start date
    +
    + +
    +
    Once your listing is complete, you will get a confirmation message.
    + +
    +
    diff --git a/src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.less b/src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.less new file mode 100644 index 0000000..f95a6eb --- /dev/null +++ b/src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.less @@ -0,0 +1,14 @@ +.wen-radio-group { + display: grid; + input { + width: 100px; + margin-left: 10px; + } +} + +.available-time-auction-option { + @apply text-xs font-medium text-foregrounds-secondary dark:text-foregrounds-secondary-dark cursor-pointer; + &__selected { + @apply text-accent-primary dark:text-accent-primary-dark; + } +} diff --git a/src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.ts b/src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.ts new file mode 100644 index 0000000..c98738f --- /dev/null +++ b/src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.ts @@ -0,0 +1,179 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnInit, + Output, +} from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { UnitsService } from '@core/services/units'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/nft/services/helper.service'; +import { + DEFAULT_NETWORK, + MAX_IOTA_AMOUNT, + MIN_IOTA_AMOUNT, + NETWORK_DETAIL, + Nft, + NftAccess, + TRANSACTION_DEFAULT_AUCTION, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject } from 'rxjs'; +import { SaleType, UpdateEvent } from '../nft-sale.component'; + +export enum availableTimeAuctionOptionType { + NOW = 'NOW', + CUSTOM = 'CUSTOM', +} + +@UntilDestroy() +@Component({ + selector: 'wen-nft-sale-auction', + templateUrl: './nft-sale-auction.component.html', + styleUrls: ['./nft-sale-auction.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NftSaleAuctionComponent implements OnInit { + @Input() + set nft(value: Nft | null | undefined) { + this._nft = value; + if (this._nft) { + this.availableFromControl.setValue(this._nft.auctionFrom?.toDate() || ''); + this.selectedAccessControl.setValue(this._nft.saleAccess || NftAccess.OPEN); + this.buyerControl.setValue(this._nft.saleAccessMembers || []); + + if (this._nft.auctionFloorPrice) { + this.floorPriceControl.setValue( + this._nft.auctionFloorPrice / + NETWORK_DETAIL[this.nft?.mintingData?.network || DEFAULT_NETWORK].divideBy, + ); + } + + if (this.nft?.auctionFrom && dayjs(this.nft.auctionFrom.toDate()).isAfter(dayjs())) { + this.floorPriceControl.disable(); + this.availableFromControl.disable(); + this.selectedAccessControl.disable(); + this.buyerControl.disable(); + } + } + + // Temp disabled: + this.buyerControl.disable(); + } + + get nft(): Nft | null | undefined { + return this._nft; + } + + @Output() public wenOnUpdate = new EventEmitter(); + public form: FormGroup; + public floorPriceControl: FormControl = new FormControl('', [ + Validators.required, + Validators.min( + MIN_IOTA_AMOUNT / NETWORK_DETAIL[this.nft?.mintingData?.network || DEFAULT_NETWORK].divideBy, + ), + Validators.max( + MAX_IOTA_AMOUNT / NETWORK_DETAIL[this.nft?.mintingData?.network || DEFAULT_NETWORK].divideBy, + ), + ]); + public availableFromControl: FormControl = new FormControl('', Validators.required); + public lengthFromControl: FormControl = new FormControl(3); + public selectedAccessControl: FormControl = new FormControl(NftAccess.OPEN, Validators.required); + public buyerControl: FormControl = new FormControl(''); + public minimumPrice = MIN_IOTA_AMOUNT; + public maximumPrice = MAX_IOTA_AMOUNT; + public isSubmitted = false; + private _nft?: Nft | null; + public availableTimeAuctionOption$ = new BehaviorSubject( + availableTimeAuctionOptionType.NOW, + ); + + constructor( + public helper: HelperService, + public unitsService: UnitsService, + private cd: ChangeDetectorRef, + ) { + this.form = new FormGroup({ + floorPrice: this.floorPriceControl, + availableFrom: this.availableFromControl, + length: this.lengthFromControl, + selectedAccess: this.selectedAccessControl, + buyer: this.buyerControl, + }); + } + + ngOnInit(): void { + this.selectedAccessControl.valueChanges.pipe(untilDestroyed(this)).subscribe(() => { + switch (this.selectedAccessControl.value) { + case NftAccess.OPEN: + this.buyerControl.removeValidators(Validators.required); + this.buyerControl.setErrors(null); + break; + case NftAccess.MEMBERS: + this.buyerControl.addValidators(Validators.required); + break; + } + }); + + this.availableTimeAuctionOption$ + .pipe(untilDestroyed(this)) + .subscribe((availableTimeAuctionOption) => { + if (availableTimeAuctionOption === availableTimeAuctionOptionType.NOW) { + const nowDate = new Date(); + this.availableFromControl.setValue(nowDate.toISOString()); + } else { + this.availableFromControl.setValue(''); + } + }); + } + + public disabledStartDate(startValue: Date): boolean { + if (dayjs(startValue).isBefore(dayjs(), 'days')) { + return true; + } + + return false; + } + + public get targetAccess(): typeof NftAccess { + return NftAccess; + } + + public isProd(): boolean { + return environment.production; + } + + public submit(): void { + let length = TRANSACTION_DEFAULT_AUCTION; + if (this.lengthFromControl.value === 1) { + length = 24 * 60 * 60 * 1000; + } else if (this.lengthFromControl.value === 2) { + length = 2 * 24 * 60 * 60 * 1000; + } + + const up: UpdateEvent = { + type: SaleType.FIXED_PRICE, + auctionFrom: this.availableFromControl.value, + auctionLength: length, + auctionFloorPrice: + this.floorPriceControl.value * + NETWORK_DETAIL[this.nft?.mintingData?.network || DEFAULT_NETWORK].divideBy, + access: this.selectedAccessControl.value, + }; + + if (this.selectedAccessControl.value !== NftAccess.OPEN) { + up.accessMembers = this.buyerControl.value; + } + + this.wenOnUpdate.next(up); + this.cd.markForCheck(); + } + + public get availableTimeAuctionOptionTypes(): typeof availableTimeAuctionOptionType { + return availableTimeAuctionOptionType; + } +} diff --git a/src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html b/src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html new file mode 100644 index 0000000..3829764 --- /dev/null +++ b/src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html @@ -0,0 +1,157 @@ +
    +
    + Set your price +
    + + + + + + + + + + +
    +
    + Available time +
    +
    +
    + NOW +
    +
    + Select Date/Time +
    +
    +
    + + + + + + + + +
    +
    + Sale type +
    +
    +
    + Open Sale +
    +
    + Specific member(s) +
    +
    +
    + + + + + + + + +
    +
    Once your listing is complete, you will get a confirmation message.
    + +
    +
    diff --git a/src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.less b/src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.less new file mode 100644 index 0000000..3dd5286 --- /dev/null +++ b/src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.less @@ -0,0 +1,21 @@ +.wen-radio-group { + display: grid; + input { + width: 100px; + margin-left: 10px; + } +} + +.available-time-option { + @apply text-xs font-medium text-foregrounds-secondary dark:text-foregrounds-secondary-dark cursor-pointer; + &__selected { + @apply text-accent-primary dark:text-accent-primary-dark; + } +} + +.target-access-option { + @apply text-xs font-medium text-foregrounds-secondary dark:text-foregrounds-secondary-dark cursor-pointer; + &__selected { + @apply text-accent-primary dark:text-accent-primary-dark; + } +} diff --git a/src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.ts b/src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.ts new file mode 100644 index 0000000..590e8f2 --- /dev/null +++ b/src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.ts @@ -0,0 +1,193 @@ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { UnitsService } from '@core/services/units'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/nft/services/helper.service'; +import { + COL, + DEFAULT_NETWORK, + MAX_IOTA_AMOUNT, + MIN_IOTA_AMOUNT, + Member, + NETWORK_DETAIL, + Nft, + NftAccess, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { NzSelectOptionInterface } from 'ng-zorro-antd/select'; +import { BehaviorSubject, Subscription, from } from 'rxjs'; +import { SaleType, UpdateEvent } from '../nft-sale.component'; + +export enum TimeSaleOptionType { + NOW = 'NOW', + CUSTOM = 'CUSTOM', +} + +@UntilDestroy() +@Component({ + selector: 'wen-nft-sale-fixed-price', + templateUrl: './nft-sale-fixed-price.component.html', + styleUrls: ['./nft-sale-fixed-price.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NftSaleFixedPriceComponent implements OnInit, OnDestroy { + @Input() + set nft(value: Nft | null | undefined) { + this._nft = value; + if (this._nft) { + this.availableFromControl.setValue(this._nft.availableFrom?.toDate() || ''); + this.selectedAccessControl.setValue(this._nft.saleAccess || NftAccess.OPEN); + this.buyerControl.setValue(this._nft.saleAccessMembers || []); + this.targetAccessOption$.next(this._nft.saleAccess || NftAccess.OPEN); + if (this._nft.availablePrice) { + this.priceControl.setValue( + this._nft.availablePrice / + NETWORK_DETAIL[this.nft?.mintingData?.network || DEFAULT_NETWORK].divideBy, + ); + } + } + } + + get nft(): Nft | null | undefined { + return this._nft; + } + + @Output() public wenOnUpdate = new EventEmitter(); + public form: FormGroup; + public priceControl: FormControl = new FormControl('', [ + Validators.required, + Validators.min( + MIN_IOTA_AMOUNT / NETWORK_DETAIL[this.nft?.mintingData?.network || DEFAULT_NETWORK].divideBy, + ), + Validators.max( + MAX_IOTA_AMOUNT / NETWORK_DETAIL[this.nft?.mintingData?.network || DEFAULT_NETWORK].divideBy, + ), + ]); + public availableFromControl: FormControl = new FormControl('', Validators.required); + public selectedAccessControl: FormControl = new FormControl(NftAccess.OPEN, Validators.required); + public buyerControl: FormControl = new FormControl(''); + public minimumPrice = MIN_IOTA_AMOUNT; + public maximumPrice = MAX_IOTA_AMOUNT; + public filteredMembers$: BehaviorSubject = new BehaviorSubject< + NzSelectOptionInterface[] + >([]); + private _nft?: Nft | null; + private memberSubscription?: Subscription; + + public availableTimeOption$ = new BehaviorSubject(TimeSaleOptionType.NOW); + public targetAccessOption$ = new BehaviorSubject(NftAccess.OPEN); + + constructor( + public helper: HelperService, + public unitsService: UnitsService, + public readonly algoliaService: AlgoliaService, + ) { + this.form = new FormGroup({ + price: this.priceControl, + availableFrom: this.availableFromControl, + selectedAccess: this.selectedAccessControl, + buyer: this.buyerControl, + }); + } + + ngOnInit(): void { + this.selectedAccessControl.valueChanges.pipe(untilDestroyed(this)).subscribe(() => { + switch (this.selectedAccessControl.value) { + case NftAccess.OPEN: + this.buyerControl.removeValidators(Validators.required); + this.buyerControl.setErrors(null); + break; + case NftAccess.MEMBERS: + this.buyerControl.addValidators(Validators.required); + break; + } + }); + + // Load initial members. + this.subscribeMemberList('a'); + + this.availableTimeOption$.pipe(untilDestroyed(this)).subscribe((availableTimeOption) => { + if (availableTimeOption === TimeSaleOptionType.NOW) { + const nowDate = new Date(); + this.availableFromControl.setValue(nowDate.toISOString()); + } else { + this.availableFromControl.setValue(''); + } + }); + + this.targetAccessOption$.pipe(untilDestroyed(this)).subscribe((targetAccessOption) => { + this.selectedAccessControl.setValue(targetAccessOption); + }); + } + + private subscribeMemberList(search?: string): void { + this.memberSubscription?.unsubscribe(); + this.memberSubscription = from( + this.algoliaService.searchClient + .initIndex(COL.MEMBER) + .search(search || '', { length: 5, offset: 0 }), + ).subscribe((r) => { + this.filteredMembers$.next( + r.hits.map((r) => { + const member = r as unknown as Member; + return { + label: '@' + member.name || member.uid, + value: member.uid, + }; + }), + ); + }); + } + + public disabledStartDate(startValue: Date): boolean { + if (dayjs(startValue).isBefore(dayjs(), 'days')) { + return true; + } + + return false; + } + + public get targetAccess(): typeof NftAccess { + return NftAccess; + } + + public searchMember(v: string): void { + if (v) { + this.subscribeMemberList(v); + } + } + + public submit(): void { + const obj: any = { + type: SaleType.FIXED_PRICE, + availableFrom: this.availableFromControl.value, + price: + this.priceControl.value * + NETWORK_DETAIL[this.nft?.mintingData?.network || DEFAULT_NETWORK].divideBy, + access: this.selectedAccessControl.value, + }; + + if (this.selectedAccessControl.value !== NftAccess.OPEN) { + obj.accessMembers = this.buyerControl.value; + } + + this.wenOnUpdate.next(obj); + } + + public ngOnDestroy(): void { + this.memberSubscription?.unsubscribe(); + } + + public get availableTimeOptionTypes(): typeof TimeSaleOptionType { + return TimeSaleOptionType; + } +} diff --git a/src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html b/src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html new file mode 100644 index 0000000..db45eb1 --- /dev/null +++ b/src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html @@ -0,0 +1,19 @@ +
    +
    Trade history
    + +
    + Item is yours and yours only +
    + +
    +
    This will make your item unavailable for sale.
    + +
    +
    diff --git a/src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.less b/src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.ts b/src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.ts new file mode 100644 index 0000000..4902aca --- /dev/null +++ b/src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.ts @@ -0,0 +1,33 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { Nft } from '@soonaverse/interfaces'; +import { SaleType, UpdateEvent } from '../nft-sale.component'; + +@Component({ + selector: 'wen-nft-sale-not-for-sale', + templateUrl: './nft-sale-not-for-sale.component.html', + styleUrls: ['./nft-sale-not-for-sale.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NftSaleNotForSaleComponent { + @Input() + set nft(value: Nft | null | undefined) { + this._nft = value; + if (this._nft?.availableFrom || this._nft?.auctionFrom) { + this.clear = true; + } + } + + get nft(): Nft | null | undefined { + return this._nft; + } + + @Output() public wenOnUpdate = new EventEmitter(); + public clear = false; + private _nft?: Nft | null; + + public submit(): void { + this.wenOnUpdate.next({ + type: SaleType.NOT_FOR_SALE, + }); + } +} diff --git a/src/app/components/nft/components/nft-sale/nft-sale.component.html b/src/app/components/nft/components/nft-sale/nft-sale.component.html new file mode 100644 index 0000000..6d05d3e --- /dev/null +++ b/src/app/components/nft/components/nft-sale/nft-sale.component.html @@ -0,0 +1,124 @@ + + + + +
    +
    List Item for sale
    + +
    +
    +
    + NFT image + + +
    +
    +
    +

    {{ nft?.name }}

    +
    {{ collection?.name }}
    + +
    + +
    + {{ (collection?.royaltiesFee || 0) * 100 }}% Royalties +
    + +
    + +
    +
    Current price
    +
    +
    + {{ + nft?.availablePrice || nft?.price || 0 + | formatToken : nft?.mintingData?.network : true + | async + }} +
    +
    +
    +
    +
    +
    + +
    + + Not for sale + + + Fixed price + + + Auction + +
    + +
    + + + +
    +
    diff --git a/src/app/components/nft/components/nft-sale/nft-sale.component.less b/src/app/components/nft/components/nft-sale/nft-sale.component.less new file mode 100644 index 0000000..3bd89b7 --- /dev/null +++ b/src/app/components/nft/components/nft-sale/nft-sale.component.less @@ -0,0 +1,7 @@ +.wen-radio-group { + display: grid; + input { + width: 100px; + margin-left: 10px; + } +} diff --git a/src/app/components/nft/components/nft-sale/nft-sale.component.ts b/src/app/components/nft/components/nft-sale/nft-sale.component.ts new file mode 100644 index 0000000..14a7795 --- /dev/null +++ b/src/app/components/nft/components/nft-sale/nft-sale.component.ts @@ -0,0 +1,168 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { FileApi } from '@api/file.api'; +import { NftApi } from '@api/nft.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/nft/services/helper.service'; +import { Collection, Nft, NftAccess, PRICE_UNITS, Timestamp, Units } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { take } from 'rxjs'; + +export enum SaleType { + NOT_FOR_SALE = 'NOT_FOR_SALE', + FIXED_PRICE = 'FIXED_PRICE', + AUCTION = 'AUCTION', +} + +export interface UpdateEvent { + nft?: string; + type?: SaleType; + access?: NftAccess | null; + accessMembers?: string[] | null; + availableFrom?: Timestamp | null; + auctionFrom?: Timestamp | null; + price?: number | null; + auctionFloorPrice?: number | null; + auctionLength?: number | null; +} + +@UntilDestroy() +@Component({ + selector: 'wen-nft-sale', + templateUrl: './nft-sale.component.html', + styleUrls: ['./nft-sale.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NftSaleComponent { + @Input() isOpen = false; + @Input() collection?: Collection | null; + + @Input() + set nft(value: Nft | null | undefined) { + this._nft = value; + if (this._nft) { + this.fileApi + .getMetadata(this._nft.media) + .pipe(take(1), untilDestroyed(this)) + .subscribe((o) => { + this.mediaType = o; + this.cd.markForCheck(); + }); + + // Set default sale type. + if (this._nft.auctionFrom) { + this.currentSaleType = SaleType.AUCTION; + } else if (this._nft.availableFrom) { + this.currentSaleType = SaleType.FIXED_PRICE; + } else { + this.currentSaleType = SaleType.NOT_FOR_SALE; + } + + this.cd.markForCheck(); + } + } + + get nft(): Nft | null | undefined { + return this._nft; + } + + @Output() wenOnClose = new EventEmitter(); + public saleType = SaleType; + public currentSaleType = SaleType.NOT_FOR_SALE; + public mediaType: 'video' | 'image' | undefined; + private _nft?: Nft | null; + + constructor( + public deviceService: DeviceService, + public helper: HelperService, + public unitsService: UnitsService, + public previewImageService: PreviewImageService, + private notification: NotificationService, + private nftApi: NftApi, + private cd: ChangeDetectorRef, + private fileApi: FileApi, + private auth: AuthService, + ) {} + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public reset(): void { + this.isOpen = false; + this.cd.markForCheck(); + } + + public get priceUnits(): Units[] { + return PRICE_UNITS; + } + + public disabledStartDate(startValue: Date): boolean { + if (startValue.getTime() < dayjs().toDate().getTime()) { + return true; + } + + return false; + } + + public async update(e: UpdateEvent): Promise { + // If fixed we have to unset auction. Auction must not started yet. + if ( + e.type === SaleType.FIXED_PRICE && + this.nft?.auctionFrom && + dayjs(this.nft.auctionFrom.toDate()).isBefore(dayjs()) + ) { + e.auctionFloorPrice = null; + e.auctionFrom = null; + e.auctionLength = null; + } else if ( + e.type === SaleType.FIXED_PRICE && + this.nft?.auctionFrom && + dayjs(this.nft.auctionFrom.toDate()).isAfter(dayjs()) + ) { + // We can't change auction params anymore + delete e.auctionFloorPrice; + delete e.auctionFrom; + delete e.auctionLength; + } + + // If AUCTION remove/add dates. + if (e.type === SaleType.AUCTION && this.nft?.availableFrom && !e.availableFrom) { + e.availableFrom = null; + e.price = null; + } + + // TODO Or if it's coplete reset. + if ( + e.type === SaleType.NOT_FOR_SALE && + this.nft?.auctionFrom && + dayjs(this.nft.auctionFrom.toDate()).isBefore(dayjs()) + ) { + e = { + type: SaleType.NOT_FOR_SALE, + }; + } + + e.nft = this.nft?.uid; + delete e.type; + await this.auth.sign(e, (sc, finish) => { + this.notification + .processRequest(this.nftApi.setForSaleNft(sc), 'Submitted.', finish) + .subscribe(() => { + this.close(); + }); + }); + } +} diff --git a/src/app/components/nft/components/nft-sale/nft-sale.module.ts b/src/app/components/nft/components/nft-sale/nft-sale.module.ts new file mode 100644 index 0000000..0a734e6 --- /dev/null +++ b/src/app/components/nft/components/nft-sale/nft-sale.module.ts @@ -0,0 +1,56 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { RadioModule } from '@components/radio/radio.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputNumberModule } from 'ng-zorro-antd/input-number'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzRadioModule } from 'ng-zorro-antd/radio'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NftSaleAuctionComponent } from './nft-sale-auction/nft-sale-auction.component'; +import { NftSaleFixedPriceComponent } from './nft-sale-fixed-price/nft-sale-fixed-price.component'; +import { NftSaleNotForSaleComponent } from './nft-sale-not-for-sale/nft-sale-not-for-sale.component'; +import { NftSaleComponent } from './nft-sale.component'; + +@NgModule({ + declarations: [ + NftSaleComponent, + NftSaleNotForSaleComponent, + NftSaleFixedPriceComponent, + NftSaleAuctionComponent, + ], + imports: [ + CommonModule, + NzDrawerModule, + FormatTokenModule, + NzModalModule, + IconModule, + NzToolTipModule, + NzCheckboxModule, + NzButtonModule, + NzTagModule, + NzInputNumberModule, + NzFormModule, + FormsModule, + ReactiveFormsModule, + NzDatePickerModule, + RadioModule, + NzRadioModule, + NzSelectModule, + NzIconModule, + NzCheckboxModule, + ModalDrawerModule, + ], + exports: [NftSaleComponent], +}) +export class NftSaleModule {} diff --git a/src/app/components/nft/components/nft-stake/nft-stake.component.html b/src/app/components/nft/components/nft-stake/nft-stake.component.html new file mode 100644 index 0000000..a0ae302 --- /dev/null +++ b/src/app/components/nft/components/nft-stake/nft-stake.component.html @@ -0,0 +1,222 @@ + + + + +
    + +
    + +
    + + + + + + + + + + + + + + + +
    + + +
    +
    + +
    + Your NFT will be sent back to your with time lock. Please note you have to provide enough + storage deposit for timelock. Just set tag to "soonaverse" in your wallet. +
    +
    + +
    +
    + For how long you want to stake? +
    + + + +
    + +
    +
    + Stake type? +
    + + + +
    + + + + + + + + +
    +
    + + +
    +
    + +
    + {{ + expiryTicker$ | async | countdownTime + }} + + remaining to make the transfer. + Expired +
    +
    + +
    + +
    + Your NFT will be sent back to your with time lock. Please note you have to provide enough + storage deposit for timelock. Just set tag to "soonaverse" in your wallet. +
    +
    + + + + + +
    +
    + + +
    +
    +
    Transaction history
    + +
    +
    +
    + {{ t.date | Time }} +
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    +
    +
    + + +
    +
    +
    + +
    +
    NFT has been staked.
    +
    + + +
    +
    +
    diff --git a/src/app/components/nft/components/nft-stake/nft-stake.component.less b/src/app/components/nft/components/nft-stake/nft-stake.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/nft/components/nft-stake/nft-stake.component.ts b/src/app/components/nft/components/nft-stake/nft-stake.component.ts new file mode 100644 index 0000000..a3295f4 --- /dev/null +++ b/src/app/components/nft/components/nft-stake/nft-stake.component.ts @@ -0,0 +1,362 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnInit, + Output, +} from '@angular/core'; +import { FormControl, Validators } from '@angular/forms'; +import { Router } from '@angular/router'; +import { NftApi } from '@api/nft.api'; +import { OrderApi } from '@api/order.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { TransactionStep } from '@components/transaction-steps/transaction-steps.component'; +import { NotificationService } from '@core/services/notification'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { removeItem, setItem, StorageItem } from '@core/utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/nft/services/helper.service'; +import { + MAX_WEEKS_TO_STAKE, + MIN_WEEKS_TO_STAKE, + Network, + StakeType, + Timestamp, + Transaction, + TransactionType, + TRANSACTION_AUTO_EXPIRY_MS, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, interval, Subscription } from 'rxjs'; + +export enum StepType { + SELECT = 'Select', + TRANSACTION = 'Transaction', + WAIT = 'Wait', + CONFIRMED = 'Confirmed', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-nft-stake', + templateUrl: './nft-stake.component.html', + styleUrls: ['./nft-stake.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NftStakeComponent implements OnInit { + @Input() currentStep = StepType.SELECT; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Output() wenOnClose = new EventEmitter(); + + public stepType = StepType; + public weeksOptions = Array.from({ length: 52 }, (_, i) => i + 1); + public stakeTypes = [ + { + label: $localize`Dynamic`, + value: StakeType.DYNAMIC, + }, + { + label: $localize`Static`, + value: StakeType.STATIC, + }, + ]; + public isCopied = false; + public agreeTermsConditions = false; + public selectedNetwork?: Network; + public environment = environment; + public targetAddress?: string = 'dummy_address'; + public targetAmount?: number = 1200000; + public targetNft?: string; + public targetCollection?: string; + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public invalidPayment = false; + public history: HistoryItem[] = []; + public receivedTransactions = false; + public stakeTypeControl: FormControl = new FormControl(StakeType.DYNAMIC); + public weekControl: FormControl = new FormControl(1, [ + Validators.required, + Validators.min(MIN_WEEKS_TO_STAKE), + Validators.max(MAX_WEEKS_TO_STAKE), + ]); + public steps: TransactionStep[] = [ + { label: $localize`Terms & Conditions`, sequenceNum: 0 }, + { label: $localize`Send NFT`, sequenceNum: 1 }, + { label: $localize`Wait for confirmation`, sequenceNum: 2 }, + { label: $localize`Confirmed`, sequenceNum: 3 }, + ]; + private transSubscription?: Subscription; + private _isOpen = false; + + constructor( + public unitsService: UnitsService, + public transactionService: TransactionService, + public helper: HelperService, + private router: Router, + private cd: ChangeDetectorRef, + private auth: AuthService, + private notification: NotificationService, + private nftApi: NftApi, + private orderApi: OrderApi, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + if (val.payload.nft) { + this.targetNft = val.payload.nft; + } + if (val.payload.collection) { + this.targetCollection = val.payload.collection; + } + + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + // It's expired. + removeItem(StorageItem.StakeNftTransaction); + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.WAIT; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`NFT received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + dayjs(), + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + dayjs(), + $localize`Transaction confirmed.`, + ); + this.receivedTransactions = true; + this.currentStep = StepType.CONFIRMED; + this.cd.markForCheck(); + }, 2000); + } + + if ( + val && + val.type === TransactionType.CREDIT_NFT && + val.payload.reconciled === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid NFT received. ` + val.payload?.response?.key || '', + ); + } + + if ( + val && + val.type === TransactionType.CREDIT_NFT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Invalid NFT refunded.`, + val.payload?.walletReference?.chainReference, + ); + + // Let's go back to wait. With slight delay so they can see this. + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + } + + this.cd.markForCheck(); + }); + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + removeItem(StorageItem.StakeNftTransaction); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public get lockTime(): number { + return TRANSACTION_AUTO_EXPIRY_MS / 1000 / 60; + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.SELECT; + this.cd.markForCheck(); + } + + public goToCollection(): void { + this.router.navigate(['/', ROUTER_UTILS.config.collection.root, this.targetCollection]); + this.close(); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public isExpired(val?: Transaction | null): boolean { + if (!val?.createdOn) { + return false; + } + + const expiresOn: dayjs.Dayjs = dayjs(val.createdOn.toDate()).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + return expiresOn.isBefore(dayjs()) && val.type === TransactionType.ORDER; + } + + public async proceedWithStake(): Promise { + if (this.selectedNetwork === undefined || !this.agreeTermsConditions) { + return; + } + + const params: any = { + network: this.selectedNetwork, + type: this.stakeTypeControl.value, + weeks: this.weekControl.value, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.nftApi.stakeNft(sc), 'Order created.', finish) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + setItem(StorageItem.StakeNftTransaction, val.uid); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + }); + }); + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public getCurrentSequenceNum(): number { + switch (this.currentStep) { + case StepType.SELECT: + return 0; + case StepType.TRANSACTION: + return 1; + case StepType.WAIT: + return 2; + case StepType.CONFIRMED: + return 3; + default: + return 0; + } + } +} diff --git a/src/app/components/nft/components/nft-stake/nft-stake.module.ts b/src/app/components/nft/components/nft-stake/nft-stake.module.ts new file mode 100644 index 0000000..dcd00d7 --- /dev/null +++ b/src/app/components/nft/components/nft-stake/nft-stake.module.ts @@ -0,0 +1,36 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { TransactionStepsModule } from '@components/transaction-steps/transaction-steps.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NftStakeComponent } from './nft-stake.component'; + +@NgModule({ + declarations: [NftStakeComponent], + imports: [ + CommonModule, + ModalDrawerModule, + NzButtonModule, + NetworkModule, + IconModule, + TermsAndConditionsModule, + NzAlertModule, + ReactiveFormsModule, + NzSelectModule, + CountdownTimeModule, + TimeModule, + NzAvatarModule, + TransactionStepsModule, + ], + exports: [NftStakeComponent], +}) +export class NftStakeModule {} diff --git a/src/app/components/nft/nft.module.ts b/src/app/components/nft/nft.module.ts new file mode 100644 index 0000000..fcbaefa --- /dev/null +++ b/src/app/components/nft/nft.module.ts @@ -0,0 +1,8 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +@NgModule({ + declarations: [], + imports: [CommonModule], +}) +export class NftModule {} diff --git a/src/app/components/parent-title/parent-title.component.html b/src/app/components/parent-title/parent-title.component.html new file mode 100644 index 0000000..04faf27 --- /dev/null +++ b/src/app/components/parent-title/parent-title.component.html @@ -0,0 +1,4 @@ +
    + +

    {{ text }}

    +
    diff --git a/src/app/components/parent-title/parent-title.component.less b/src/app/components/parent-title/parent-title.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/parent-title/parent-title.component.ts b/src/app/components/parent-title/parent-title.component.ts new file mode 100644 index 0000000..260ba36 --- /dev/null +++ b/src/app/components/parent-title/parent-title.component.ts @@ -0,0 +1,12 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-parent-title', + templateUrl: './parent-title.component.html', + styleUrls: ['./parent-title.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ParentTitleComponent { + @Input() public image?: string; + @Input() public text?: string; +} diff --git a/src/app/components/parent-title/parent-title.module.ts b/src/app/components/parent-title/parent-title.module.ts new file mode 100644 index 0000000..6fe4238 --- /dev/null +++ b/src/app/components/parent-title/parent-title.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { ParentTitleComponent } from './parent-title.component'; + +@NgModule({ + declarations: [ParentTitleComponent], + imports: [CommonModule, NzAvatarModule], + exports: [ParentTitleComponent], +}) +export class ParentTitleModule {} diff --git a/src/app/components/proposal/components/proposal-answer/proposal-answer.component.html b/src/app/components/proposal/components/proposal-answer/proposal-answer.component.html new file mode 100644 index 0000000..9b43522 --- /dev/null +++ b/src/app/components/proposal/components/proposal-answer/proposal-answer.component.html @@ -0,0 +1,16 @@ + +
    + #{{ answer?.value }} +

    {{ answer?.text }}

    +
    +
    +

    diff --git a/src/app/components/proposal/components/proposal-answer/proposal-answer.component.less b/src/app/components/proposal/components/proposal-answer/proposal-answer.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/proposal/components/proposal-answer/proposal-answer.component.ts b/src/app/components/proposal/components/proposal-answer/proposal-answer.component.ts new file mode 100644 index 0000000..813b543 --- /dev/null +++ b/src/app/components/proposal/components/proposal-answer/proposal-answer.component.ts @@ -0,0 +1,12 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { ProposalAnswer } from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-proposal-answer', + templateUrl: './proposal-answer.component.html', + styleUrls: ['./proposal-answer.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ProposalAnswerComponent { + @Input() answer?: ProposalAnswer; +} diff --git a/src/app/components/proposal/components/proposal-answer/proposal-answer.module.ts b/src/app/components/proposal/components/proposal-answer/proposal-answer.module.ts new file mode 100644 index 0000000..ca2ca12 --- /dev/null +++ b/src/app/components/proposal/components/proposal-answer/proposal-answer.module.ts @@ -0,0 +1,12 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RadioModule } from '@components/radio/radio.module'; +import { MarkDownModule } from '@core/pipes/markdown/markdown.module'; +import { ProposalAnswerComponent } from './proposal-answer.component'; + +@NgModule({ + declarations: [ProposalAnswerComponent], + imports: [CommonModule, MarkDownModule, RadioModule], + exports: [ProposalAnswerComponent], +}) +export class ProposalAnswerModule {} diff --git a/src/app/components/proposal/components/proposal-card/proposal-card.component.html b/src/app/components/proposal/components/proposal-card/proposal-card.component.html new file mode 100644 index 0000000..e53ef67 --- /dev/null +++ b/src/app/components/proposal/components/proposal-card/proposal-card.component.html @@ -0,0 +1,127 @@ + diff --git a/src/app/components/proposal/components/proposal-card/proposal-card.component.less b/src/app/components/proposal/components/proposal-card/proposal-card.component.less new file mode 100644 index 0000000..5df80a3 --- /dev/null +++ b/src/app/components/proposal/components/proposal-card/proposal-card.component.less @@ -0,0 +1,19 @@ +.ant-card-meta-avatar { + float: none; +} + +.rotate-180 { + transform: rotate(180deg); +} + +.wen-more-lines { + @apply flex flex-col justify-between text-foregrounds-secondary dark:text-foregrounds-secondary-dark text-sm; + + span { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 5; + white-space: normal; + max-height: 5rem; + } +} diff --git a/src/app/components/proposal/components/proposal-card/proposal-card.component.ts b/src/app/components/proposal/components/proposal-card/proposal-card.component.ts new file mode 100644 index 0000000..1cc1eef --- /dev/null +++ b/src/app/components/proposal/components/proposal-card/proposal-card.component.ts @@ -0,0 +1,126 @@ +import { ChangeDetectionStrategy, Component, Input, OnChanges, OnDestroy } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { getProposalDoughnutColors } from '@core/utils/colors.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { Proposal, ProposalAnswer, Space } from '@soonaverse/interfaces'; +import { ChartConfiguration, ChartType } from 'chart.js'; +import bigDecimal from 'js-big-decimal'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { SpaceApi } from './../../../../@api/space.api'; +import { ROUTER_UTILS } from './../../../../@core/utils/router.utils'; + +export interface ProposalAnswerResultItem { + answer: ProposalAnswer; + result: number; +} + +@UntilDestroy() +@Component({ + selector: 'wen-proposal-card', + templateUrl: './proposal-card.component.html', + styleUrls: ['./proposal-card.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ProposalCardComponent implements OnChanges, OnDestroy { + @Input() + set proposal(value: Proposal | undefined) { + this._proposal = value; + if (this.proposal?.questions[0].answers && this.proposal?.questions[0].answers.length > 2) { + this.sortedAnswerResults = this.proposal?.questions[0].answers + .map((a) => ({ answer: a, result: this.proposal?.results?.answers[a.value] || 0 })) + .sort((a, b) => b.result - a.result); + if (this.sortedAnswerResults[0].result === 0) { + this.sortedAnswerResults = this.sortedAnswerResults.map((r) => ({ ...r, result: 1 })); + } + this.answersSum = this.sortedAnswerResults.reduce((a, b) => a + b.result, 0); + this.doughnutChartData = { + datasets: [ + { + label: 'Dataset 1', + data: this.sortedAnswerResults.map((a) => a.result), + backgroundColor: getProposalDoughnutColors(this.sortedAnswerResults.length), + }, + ], + }; + } + } + + get proposal(): Proposal | undefined { + return this._proposal; + } + + @Input() fullWidth?: boolean; + + public space$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public path = ROUTER_UTILS.config.proposal.root; + public sortedAnswerResults: ProposalAnswerResultItem[] = []; + public answersSum = 0; + public doughnutChartType: ChartType = 'doughnut'; + public doughnutChartData?: ChartConfiguration['data'] = { + datasets: [], + }; + public doughnutChartOptions?: any = { + events: [], + plugins: { + legend: { + display: false, + }, + }, + elements: { + arc: { + borderWidth: 0, + }, + }, + cutout: '75%', + }; + + private _proposal?: Proposal; + private subscriptions$: Subscription[] = []; + + constructor( + private spaceApi: SpaceApi, + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + ) {} + + public getProgressForTwo(a: ProposalAnswer[]): number[] { + const answerOne = + ((this.proposal?.results?.answers?.[a[0].value] || 0) / + (this.proposal?.results?.total || 1)) * + 100; + const answerTwo = + ((this.proposal?.results?.answers?.[a[1].value] || 0) / + (this.proposal?.results?.total || 1)) * + 100; + return [answerOne > 0 ? 100 - answerTwo : 0, answerTwo]; + } + + public castAsStringArray(item: unknown): string[] { + return item as string[]; + } + + public getPercentage(result: number): string { + return bigDecimal.divide(bigDecimal.multiply(result, 100), this.answersSum || 1, 0).toString(); + } + + public ngOnChanges(): void { + if (this.proposal?.space) { + this.subscriptions$.push( + this.spaceApi.listen(this.proposal.space).pipe(untilDestroyed(this)).subscribe(this.space$), + ); + } + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/components/proposal/components/proposal-card/proposal-card.module.ts b/src/app/components/proposal/components/proposal-card/proposal-card.module.ts new file mode 100644 index 0000000..2717c67 --- /dev/null +++ b/src/app/components/proposal/components/proposal-card/proposal-card.module.ts @@ -0,0 +1,32 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzProgressModule } from 'ng-zorro-antd/progress'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NgChartsModule } from 'ng2-charts'; +import { TruncateModule } from './../../../../@core/pipes/truncate/truncate.module'; +import { IconModule } from './../../../../components/icon/icon.module'; +import { ProposalStatusModule } from './../proposal-status/proposal-status.module'; +import { ProposalCardComponent } from './proposal-card.component'; + +@NgModule({ + exports: [ProposalCardComponent], + declarations: [ProposalCardComponent], + imports: [ + CommonModule, + RouterModule, + TruncateModule, + ProposalStatusModule, + NzAvatarModule, + NzTagModule, + NzIconModule, + IconModule, + NzProgressModule, + NgChartsModule, + NzToolTipModule, + ], +}) +export class ProposalCardModule {} diff --git a/src/app/components/proposal/components/proposal-status/proposal-status.component.html b/src/app/components/proposal/components/proposal-status/proposal-status.component.html new file mode 100644 index 0000000..d33326d --- /dev/null +++ b/src/app/components/proposal/components/proposal-status/proposal-status.component.html @@ -0,0 +1,45 @@ +
    + Pending + + Rejected + + Commencing + + + In-Progress + Completed + + + +
    diff --git a/src/app/components/proposal/components/proposal-status/proposal-status.component.less b/src/app/components/proposal/components/proposal-status/proposal-status.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/proposal/components/proposal-status/proposal-status.component.ts b/src/app/components/proposal/components/proposal-status/proposal-status.component.ts new file mode 100644 index 0000000..0ac2785 --- /dev/null +++ b/src/app/components/proposal/components/proposal-status/proposal-status.component.ts @@ -0,0 +1,84 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input, + OnInit, +} from '@angular/core'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { Milestone, PROPOSAL_COMMENCING_IN_DAYS, Proposal } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, map, skip } from 'rxjs'; +import { MilestoneApi } from './../../../../@api/milestone.api'; + +@UntilDestroy() +@Component({ + selector: 'wen-proposal-status', + templateUrl: './proposal-status.component.html', + styleUrls: ['./proposal-status.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ProposalStatusComponent implements OnInit { + @Input() proposal?: Proposal | null; + public lastMilestone$: BehaviorSubject = new BehaviorSubject< + Milestone | undefined + >(undefined); + + constructor(private milestoneApi: MilestoneApi, private cd: ChangeDetectorRef) { + // none. + } + + public ngOnInit(): void { + this.milestoneApi + .top(undefined, 1) + ?.pipe( + untilDestroyed(this), + map((o: Milestone[]) => { + return o[0]; + }), + ) + .subscribe(this.lastMilestone$); + + this.lastMilestone$.pipe(skip(1), untilDestroyed(this)).subscribe(() => { + this.cd.markForCheck(); + }); + } + + public isComplete(): boolean { + if (!this.proposal) { + return false; + } + + return ( + dayjs(this.proposal.settings.endDate.toDate()).isBefore(dayjs()) && !this.proposal.rejected + ); + } + + public isInProgress(): boolean { + if (!this.proposal || this.proposal.rejected) { + return false; + } + + return !this.isComplete() && !this.isCommencing() && !!this.proposal.approved; + } + + public isPending(): boolean { + return ( + !this.isCommencing() && !this.isInProgress() && !this.isComplete() && !this.proposal?.rejected + ); + } + + public isCommencing(): boolean { + if (!this.proposal || !this.proposal.approved || this.proposal.rejected) { + return false; + } + + return ( + dayjs(this.proposal.settings.startDate.toDate()) + .subtract(PROPOSAL_COMMENCING_IN_DAYS, 'd') + .isBefore(dayjs()) && + dayjs(this.proposal.settings.startDate.toDate()).isAfter(dayjs()) && + !this.isComplete() + ); + } +} diff --git a/src/app/components/proposal/components/proposal-status/proposal-status.module.ts b/src/app/components/proposal/components/proposal-status/proposal-status.module.ts new file mode 100644 index 0000000..21a8000 --- /dev/null +++ b/src/app/components/proposal/components/proposal-status/proposal-status.module.ts @@ -0,0 +1,22 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { DateTagModule } from '@components/date-tag/date-tag.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzProgressModule } from 'ng-zorro-antd/progress'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { ProposalStatusComponent } from './proposal-status.component'; + +@NgModule({ + exports: [ProposalStatusComponent], + declarations: [ProposalStatusComponent], + imports: [ + CommonModule, + NzAvatarModule, + NzTagModule, + NzIconModule, + NzProgressModule, + DateTagModule, + ], +}) +export class ProposalStatusModule {} diff --git a/src/app/components/proposal/proposals.module.ts b/src/app/components/proposal/proposals.module.ts new file mode 100644 index 0000000..5d26c1f --- /dev/null +++ b/src/app/components/proposal/proposals.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { ProposalCardModule } from './components/proposal-card/proposal-card.module'; +import { ProposalStatusModule } from './components/proposal-status/proposal-status.module'; + +@NgModule({ + exports: [ProposalCardModule, ProposalStatusModule], + imports: [CommonModule], +}) +export class ProposalModule {} diff --git a/src/app/components/radio/radio.component.html b/src/app/components/radio/radio.component.html new file mode 100644 index 0000000..f808346 --- /dev/null +++ b/src/app/components/radio/radio.component.html @@ -0,0 +1,3 @@ + diff --git a/src/app/components/radio/radio.component.less b/src/app/components/radio/radio.component.less new file mode 100644 index 0000000..ca6ed87 --- /dev/null +++ b/src/app/components/radio/radio.component.less @@ -0,0 +1,19 @@ +[nz-radio] ::ng-deep { + @apply font-medium text-base; + + .ant-radio:hover .ant-radio-inner { + @apply border-accent-primary; + } + + .ant-radio-checked .ant-radio-inner { + @apply bg-accent-primary border-accent-primary; + } + + .ant-radio-disabled { + opacity: 0.4; + + .ant-radio-inner { + @apply bg-backgrounds-primary; + } + } +} diff --git a/src/app/components/radio/radio.component.ts b/src/app/components/radio/radio.component.ts new file mode 100644 index 0000000..6bc22cd --- /dev/null +++ b/src/app/components/radio/radio.component.ts @@ -0,0 +1,13 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +@Component({ + selector: 'wen-radio', + templateUrl: './radio.component.html', + styleUrls: ['./radio.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RadioComponent { + @Input() value: string | boolean | number = ''; + + @Input() disabled = false; +} diff --git a/src/app/components/radio/radio.module.ts b/src/app/components/radio/radio.module.ts new file mode 100644 index 0000000..9f1d1ed --- /dev/null +++ b/src/app/components/radio/radio.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { NzRadioModule } from 'ng-zorro-antd/radio'; +import { RadioComponent } from './radio.component'; + +@NgModule({ + exports: [RadioComponent], + declarations: [RadioComponent], + imports: [CommonModule, NzRadioModule], +}) +export class RadioModule {} diff --git a/src/app/components/share/share.component.html b/src/app/components/share/share.component.html new file mode 100644 index 0000000..aa459a7 --- /dev/null +++ b/src/app/components/share/share.component.html @@ -0,0 +1,60 @@ +
    + + +
    Share
    +
    + +
    + +
    +
    Share
    + + + + + +
    diff --git a/src/app/components/share/share.component.less b/src/app/components/share/share.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/share/share.component.ts b/src/app/components/share/share.component.ts new file mode 100644 index 0000000..ad9fc10 --- /dev/null +++ b/src/app/components/share/share.component.ts @@ -0,0 +1,49 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { copyToClipboard } from '@core/utils/tools.utils'; + +export enum ShareComponentSize { + SMALL = 'small', + DEFAULT = 'default', + LARGE = 'large', +} + +@Component({ + selector: 'wen-share', + templateUrl: './share.component.html', + styleUrls: ['./share.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ShareComponent { + @Input() shareText = ''; + @Input() shareUrl = ''; + @Input() size: ShareComponentSize = ShareComponentSize.DEFAULT; + public isCopied = false; + + constructor(public deviceService: DeviceService, private cd: ChangeDetectorRef) {} + + public get shareSizes(): typeof ShareComponentSize { + return ShareComponentSize; + } + + public getShareUrl(): string { + return ( + 'https://twitter.com/share?text=' + + this.shareText + + '&url=' + + this.shareUrl + + '&hashtags=soonaverse' + ); + } + + public copy(): void { + if (!this.isCopied) { + copyToClipboard(window?.location.href); + this.isCopied = true; + setTimeout(() => { + this.isCopied = false; + this.cd.markForCheck(); + }, 3000); + } + } +} diff --git a/src/app/components/share/share.module.ts b/src/app/components/share/share.module.ts new file mode 100644 index 0000000..7736fc3 --- /dev/null +++ b/src/app/components/share/share.module.ts @@ -0,0 +1,12 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { ShareComponent } from './share.component'; + +@NgModule({ + declarations: [ShareComponent], + imports: [CommonModule, NzButtonModule, IconModule], + exports: [ShareComponent], +}) +export class ShareModule {} diff --git a/src/app/components/space/components/select-space/select-space.component.html b/src/app/components/space/components/select-space/select-space.component.html new file mode 100644 index 0000000..d93d6f7 --- /dev/null +++ b/src/app/components/space/components/select-space/select-space.component.html @@ -0,0 +1,147 @@ + + + + + + + + {{ s.label }} + + + +
    +
    + + + + + +
    + + {{ s.nzLabel }} +
    +
    +
    +
    + + +
    + +
    Select a space
    + +
    +
    + + + +
    + +
    + +
    + No results for "{{ searchControl.value }}" +
    + +
    +
    +
    + + + + +
    + {{ opt.label }} + +
    +
    +
    +
    +
    diff --git a/src/app/components/space/components/select-space/select-space.component.less b/src/app/components/space/components/select-space/select-space.component.less new file mode 100644 index 0000000..87fc81c --- /dev/null +++ b/src/app/components/space/components/select-space/select-space.component.less @@ -0,0 +1,3 @@ +::ng-deep .select-search-margin .ant-select-selection-search { + @apply ml-8; +} diff --git a/src/app/components/space/components/select-space/select-space.component.ts b/src/app/components/space/components/select-space/select-space.component.ts new file mode 100644 index 0000000..e332e8a --- /dev/null +++ b/src/app/components/space/components/select-space/select-space.component.ts @@ -0,0 +1,121 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input, + OnInit, +} from '@angular/core'; +import { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, Validators } from '@angular/forms'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; + +export interface SelectSpaceOption { + label: string; + value: string; + img?: string; +} + +export const DEFAULT_SPACE: SelectSpaceOption = { + label: $localize`All Spaces`, + value: 'all', +}; + +@UntilDestroy() +@Component({ + selector: 'wen-select-space', + templateUrl: './select-space.component.html', + styleUrls: ['./select-space.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [ + { + provide: NG_VALUE_ACCESSOR, + multi: true, + useExisting: SelectSpaceComponent, + }, + ], +}) +export class SelectSpaceComponent implements OnInit, ControlValueAccessor { + @Input() size: 'small' | 'large' = 'small'; + @Input() includeDefaultSpace = true; + + @Input() + set spaces(value: SelectSpaceOption[]) { + if (this.includeDefaultSpace) { + this._spaces = [DEFAULT_SPACE, ...value]; + } else { + this._spaces = [...value]; + } + this.setShownSpaces(); + } + + public get spaces(): SelectSpaceOption[] { + return this._spaces; + } + + public onChange: (v: string | undefined) => undefined = () => undefined; + public disabled = false; + public spaceControl: FormControl = new FormControl('', Validators.required); + public searchControl: FormControl = new FormControl('', Validators.required); + public isSelectOpen = false; + public isDrawerOpen = false; + public shownSpaces: SelectSpaceOption[] = []; + private _spaces: SelectSpaceOption[] = []; + + constructor( + private cd: ChangeDetectorRef, + public previewImageService: PreviewImageService, + public deviceService: DeviceService, + ) {} + + public ngOnInit(): void { + this.spaceControl.valueChanges.pipe(untilDestroyed(this)).subscribe((value: string) => { + this.onChange(value); + this.isSelectOpen = false; + this.isDrawerOpen = false; + this.cd.markForCheck(); + }); + + this.searchControl.valueChanges.pipe(untilDestroyed(this)).subscribe(() => { + this.setShownSpaces(); + this.cd.markForCheck(); + }); + } + + public registerOnChange(fn: () => undefined): void { + this.onChange = fn; + } + + public registerOnTouched(): void { + return undefined; + } + + public setDisabledState(isDisabled: boolean): void { + this.disabled = isDisabled; + } + + public writeValue(value: string): void { + this.spaceControl.setValue(value); + this.cd.markForCheck(); + } + + public trackByValue(index: number, item: SelectSpaceOption) { + return item.value; + } + + public onSelectClick(): void { + this.isSelectOpen = this.deviceService.isDesktop$.getValue(); + this.isDrawerOpen = this.deviceService.isMobile$.getValue(); + this.cd.markForCheck(); + } + + public getSpace(uid: string): SelectSpaceOption | undefined { + return this.spaces.find((space) => space.value === uid); + } + + private setShownSpaces(): void { + this.shownSpaces = this.spaces.filter((space) => + space.label.toLowerCase().includes(this.searchControl.value.toLowerCase()), + ); + } +} diff --git a/src/app/components/space/components/select-space/select-space.module.ts b/src/app/components/space/components/select-space/select-space.module.ts new file mode 100644 index 0000000..9ccfa49 --- /dev/null +++ b/src/app/components/space/components/select-space/select-space.module.ts @@ -0,0 +1,27 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { IconModule } from '@components/icon/icon.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { SelectSpaceComponent } from './select-space.component'; + +@NgModule({ + declarations: [SelectSpaceComponent], + imports: [ + CommonModule, + NzSelectModule, + NzFormModule, + NzAvatarModule, + IconModule, + FormsModule, + ReactiveFormsModule, + NzDrawerModule, + NzInputModule, + ], + exports: [SelectSpaceComponent], +}) +export class SelectSpaceModule {} diff --git a/src/app/components/space/components/space-card/space-card.component.html b/src/app/components/space/components/space-card/space-card.component.html new file mode 100644 index 0000000..be18e92 --- /dev/null +++ b/src/app/components/space/components/space-card/space-card.component.html @@ -0,0 +1,48 @@ + diff --git a/src/app/components/space/components/space-card/space-card.component.less b/src/app/components/space/components/space-card/space-card.component.less new file mode 100644 index 0000000..e531d1d --- /dev/null +++ b/src/app/components/space/components/space-card/space-card.component.less @@ -0,0 +1,3 @@ +.ant-card-meta-avatar { + float: none; +} diff --git a/src/app/components/space/components/space-card/space-card.component.ts b/src/app/components/space/components/space-card/space-card.component.ts new file mode 100644 index 0000000..c091325 --- /dev/null +++ b/src/app/components/space/components/space-card/space-card.component.ts @@ -0,0 +1,30 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { FileApi } from '@api/file.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { FILE_SIZES, Space } from '@soonaverse/interfaces'; +import { ROUTER_UTILS } from './../../../../@core/utils/router.utils'; + +@Component({ + selector: 'wen-space-card', + templateUrl: './space-card.component.html', + styleUrls: ['./space-card.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SpaceCardComponent { + @Input() public space?: Space; + public path = ROUTER_UTILS.config.space.root; + + constructor(public auth: AuthService) {} + + public get avatarUrl(): string | undefined { + return this.space?.avatarUrl + ? FileApi.getUrl(this.space.avatarUrl, FILE_SIZES.small) + : undefined; + } + + public get bannerUrl(): string | undefined { + return this.space?.bannerUrl + ? FileApi.getUrl(this.space.bannerUrl, FILE_SIZES.medium) + : undefined; + } +} diff --git a/src/app/components/space/components/space-card/space-card.module.ts b/src/app/components/space/components/space-card/space-card.module.ts new file mode 100644 index 0000000..66a1b73 --- /dev/null +++ b/src/app/components/space/components/space-card/space-card.module.ts @@ -0,0 +1,22 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { TruncateModule } from '../../../../@core/pipes/truncate/truncate.module'; +import { StripMarkDownModule } from './../../../../@core/pipes/strip-markdown/strip-markdown.module'; +import { IconModule } from './../../../icon/icon.module'; +import { SpaceCardComponent } from './space-card.component'; + +@NgModule({ + exports: [SpaceCardComponent], + declarations: [SpaceCardComponent], + imports: [ + CommonModule, + StripMarkDownModule, + RouterModule, + IconModule, + TruncateModule, + NzAvatarModule, + ], +}) +export class SpaceCardModule {} diff --git a/src/app/components/space/components/space-claim/space-claim.component.html b/src/app/components/space/components/space-claim/space-claim.component.html new file mode 100644 index 0000000..4d71942 --- /dev/null +++ b/src/app/components/space/components/space-claim/space-claim.component.html @@ -0,0 +1,175 @@ + + + + +
    + + +
    {{ space?.name }}
    +
    + +
    + + + + + + + + + + + +
    +
    + + +
    + + + +
    +
    + + +
    + +
    + +
    + +
    + {{ + expiryTicker$ | async | countdownTime + }} + + remaining to make the transfer. + Expired +
    +
    + + + + + + + + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    +
    + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    + +
    +
    + +
    +
    Claim complete. Congratulations.
    +
    + +
    + +
    +
    diff --git a/src/app/components/space/components/space-claim/space-claim.component.less b/src/app/components/space/components/space-claim/space-claim.component.less new file mode 100644 index 0000000..11934cc --- /dev/null +++ b/src/app/components/space/components/space-claim/space-claim.component.less @@ -0,0 +1,14 @@ +input { + @apply rounded-none; +} + +::ng-deep { + input::-webkit-inner-spin-button, + input::-webkit-outer-spin-button { + opacity: 0; + } +} + +.info-item { + @apply flex items-center justify-between flex-1 w-full px-6 py-2 mt-2 rounded-3xl bg-backgrounds-secondary dark:bg-backgrounds-secondary-dark min-h-14; +} diff --git a/src/app/components/space/components/space-claim/space-claim.component.ts b/src/app/components/space/components/space-claim/space-claim.component.ts new file mode 100644 index 0000000..f25c830 --- /dev/null +++ b/src/app/components/space/components/space-claim/space-claim.component.ts @@ -0,0 +1,323 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import { OrderApi } from '@api/order.api'; +import { SpaceApi } from '@api/space.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { getSpaceClaimItem, removeSpaceClaimItem, setSpaceClaimItem } from '@core/utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { + DEFAULT_NETWORK, + Network, + Space, + Timestamp, + Transaction, + TransactionType, + TRANSACTION_AUTO_EXPIRY_MS, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, interval, Subscription } from 'rxjs'; + +export enum StepType { + CONFIRM = 'Confirm', + TRANSACTION = 'Transaction', + COMPLETE = 'Complete', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-space-claim', + templateUrl: './space-claim.component.html', + styleUrls: ['./space-claim.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SpaceClaimComponent implements OnInit, OnDestroy { + @Input() currentStep = StepType.CONFIRM; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() space?: Space; + @Output() wenOnClose = new EventEmitter(); + + public network: Network | null = DEFAULT_NETWORK; + public targetAddress?: string = ''; + public invalidPayment = false; + public targetAmount?: number; + public receivedTransactions = false; + public purchasedAmount = 0; + public history: HistoryItem[] = []; + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public isCopied = false; + private _isOpen = false; + private transSubscription?: Subscription; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public helper: HelperService, + public unitsService: UnitsService, + public transactionService: TransactionService, + private auth: AuthService, + private notification: NotificationService, + private orderApi: OrderApi, + private spaceApi: SpaceApi, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + this.network = val.network || DEFAULT_NETWORK; + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + this.space && removeSpaceClaimItem(this.space.uid); + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.TRANSACTION; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`Payment received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + val.createdOn, + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + val.createdOn, + $localize`Transaction confirmed.`, + ); + this.purchasedAmount = val.payload.amount; + this.receivedTransactions = true; + this.currentStep = StepType.COMPLETE; + this.cd.markForCheck(); + }, 2000); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload.invalidPayment === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid amount or invalid senders address. Refunding transaction...`, + ); + } + + const markInvalid = () => { + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid transaction.You must gift storage deposit.`, + ); + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload.invalidPayment !== true && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Funds refunded.`, + val.payload?.walletReference?.chainReference, + ); + } + + this.cd.markForCheck(); + }); + + if (this.space && getSpaceClaimItem(this.space.uid)) { + this.transSubscription = this.orderApi + .listen(getSpaceClaimItem(this.space.uid)) + .subscribe(this.transaction$); + } + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + this.space && removeSpaceClaimItem(this.space.uid); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.CONFIRM; + this.cd.markForCheck(); + } + + public async claimSpace(): Promise { + if (!this.space) { + return; + } + + const params: any = { + space: this.space.uid, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.spaceApi.claimSpace(sc), $localize`Space claim submitted.`, finish) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + this.space && setSpaceClaimItem(this.space.uid, val.uid); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + }); + }); + } + + public get stepType(): typeof StepType { + return StepType; + } + + public ngOnDestroy(): void { + this.transSubscription?.unsubscribe(); + } +} diff --git a/src/app/components/space/components/space-claim/space-claim.module.ts b/src/app/components/space/components/space-claim/space-claim.module.ts new file mode 100644 index 0000000..b8f88fc --- /dev/null +++ b/src/app/components/space/components/space-claim/space-claim.module.ts @@ -0,0 +1,50 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { RelativeTimeModule } from '@core/pipes/relative-time/relative-time.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { SpaceClaimComponent } from './space-claim.component'; + +@NgModule({ + declarations: [SpaceClaimComponent], + imports: [ + CommonModule, + NzModalModule, + NzDrawerModule, + IconModule, + NzButtonModule, + NzCheckboxModule, + NzAvatarModule, + NzInputModule, + TimeModule, + NzAlertModule, + NetworkModule, + FormatTokenModule, + FormsModule, + ReactiveFormsModule, + ModalDrawerModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + CountdownTimeModule, + DescriptionModule, + RelativeTimeModule, + ], + providers: [PercentPipe], + exports: [SpaceClaimComponent], +}) +export class SpaceClaimModule {} diff --git a/src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html b/src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html new file mode 100644 index 0000000..d60293b --- /dev/null +++ b/src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html @@ -0,0 +1,186 @@ + + + + +
    +
    Token Reward Schedule
    + +
    + +
    + + Existing Schedule + + + Upload New + +
    + +
    + + +
    +
    + +
    + Vault address: + {{ space?.vaultAddress }} +
    +
    +

    + Loading... +

    +

    + No records. +

    +
    +
    + + +
    +
    +
    + Schedule a new Reward +
    + Download CSV template +
    + +
    + You can schedule new staking rewards here. To do this, upload a .csv file containing user + addresses and allocation details. +
    + +
    + If you don’t know how to prepare CSV file, you can download our template made for you. +
    + +
    + + + + + + + + + +
    +
    +
    + + +
    +
    Confirm schedule
    + +
    +
    + + + + + + Start Date + End Date + Vesting Date + Tokens to Distribute + Status + Action + + + + + {{ t.startDate.toDate() | date : 'short' }} + {{ t.endDate.toDate() | date : 'short' }} + {{ t.tokenVestingDate.toDate() | date : 'short' }} + + {{ t.tokensToDistribute | formatToken : token?.uid : false : false | async }} + {{ token?.symbol }} + + {{ t.status }} + + Remove + + + + + + + +
    + +
    +
    +
    diff --git a/src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.less b/src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts b/src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts new file mode 100644 index 0000000..1bd5130 --- /dev/null +++ b/src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts @@ -0,0 +1,187 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnInit, + Output, +} from '@angular/core'; +import { StakeRewardApi } from '@api/stake_reward'; +import { AuthService } from '@components/auth/services/auth.service'; +import { NotificationService } from '@core/services/notification'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { download } from '@core/utils/tools.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { + Space, + StakeReward, + StakeRewardStatus, + Token, + getDefDecimalIfNotSet, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { NzUploadFile } from 'ng-zorro-antd/upload'; +import Papa from 'papaparse'; +import { BehaviorSubject, Observable, map } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-space-reward-schedule', + templateUrl: './space-reward-schedule.component.html', + styleUrls: ['./space-reward-schedule.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SpaceRewardScheduleComponent implements OnInit { + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() token?: Token; + @Input() isGuardian?: boolean = false; + @Input() space?: Space; + @Output() wenOnClose = new EventEmitter(); + public rewardsToUpload: any = []; + public stakeRewards$: BehaviorSubject = new BehaviorSubject< + StakeReward[] | undefined + >(undefined); + public uploadStage = 0; + public tableConfig = [ + { label: `StartDate`, key: 'startDate' }, + { label: `EndDate`, key: 'endDate' }, + { label: `TokenVestingDate`, key: 'tokenVestingDate' }, + { label: `TokensToDistribute`, key: 'tokensToDistribute' }, + ]; + private _isOpen = false; + + constructor( + public unitsService: UnitsService, + public transactionService: TransactionService, + private cd: ChangeDetectorRef, + private auth: AuthService, + private notification: NotificationService, + private stakeRewardApi: StakeRewardApi, + ) {} + + public ngOnInit(): void { + // Load schedule. + this.stakeRewardApi + .token(this.token!.uid, undefined) + .pipe( + untilDestroyed(this), + map((o) => { + return o?.sort((a, b) => a.startDate.toMillis() - b.startDate.toMillis()); + }), + ) + .subscribe(this.stakeRewards$); + } + + public beforeCSVUpload(file: NzUploadFile): boolean | Observable { + if (!file) return false; + + Papa.parse(file as unknown as File, { + skipEmptyLines: true, + header: true, + complete: (results: any) => { + if (!results?.data?.length) { + return; + } + + this.rewardsToUpload = results.data.map((v: any) => { + return { + startDate: dayjs(v.StartDate), + endDate: dayjs(v.EndDate), + tokenVestingDate: dayjs(v.TokenVestingDate), + tokensToDistribute: + v.TokensToDistribute * Math.pow(10, getDefDecimalIfNotSet(this.token?.decimals)), + }; + }); + this.uploadStage = 2; + this.cd.markForCheck(); + }, + }); + + return false; + } + + public generateTemplate(): void { + const fields = ['', ...this.tableConfig.map((r) => r.label)] as string[]; + + const csv = Papa.unparse({ + fields, + data: [], + }); + + download(`data:text/csv;charset=utf-8${csv}`, 'soonaverse_airdrop_template.csv'); + } + + public async submit(): Promise { + if (!this.rewardsToUpload?.length || !this.token?.uid) { + this.reset(); + return; + } + + await this.auth.sign( + { + token: this.token!.uid, + items: this.rewardsToUpload.map((o: any) => { + return { + startDate: o.startDate.valueOf(), + endDate: o.endDate.valueOf(), + tokenVestingDate: o.tokenVestingDate.valueOf(), + tokensToDistribute: o.tokensToDistribute, + }; + }), + }, + (sc, finish) => { + this.notification + .processRequest(this.stakeRewardApi.submit(sc), $localize`Submitted.`, finish) + .subscribe(() => { + this.close(); + }); + }, + ); + } + + public async remove(id: string): Promise { + await this.auth.sign( + { + stakeRewardIds: [id], + }, + (sc, finish) => { + this.notification + .processRequest( + this.stakeRewardApi.remove(sc), + $localize`Proposal created to remove the reward.`, + finish, + ) + .subscribe(() => { + // none. + }); + }, + ); + } + + public get rewardScheduleStatuses(): typeof StakeRewardStatus { + return StakeRewardStatus; + } + + public close(): void { + this.reset(); + this.rewardsToUpload = []; + this.uploadStage = 0; + this.wenOnClose.next(); + } + + public reset(): void { + this.isOpen = false; + this.rewardsToUpload = []; + this.uploadStage = 0; + this.cd.markForCheck(); + } +} diff --git a/src/app/components/space/components/space-reward-schedule/space-reward-schedule.module.ts b/src/app/components/space/components/space-reward-schedule/space-reward-schedule.module.ts new file mode 100644 index 0000000..2749b32 --- /dev/null +++ b/src/app/components/space/components/space-reward-schedule/space-reward-schedule.module.ts @@ -0,0 +1,45 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { RadioModule } from '@components/radio/radio.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzRadioModule } from 'ng-zorro-antd/radio'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzUploadModule } from 'ng-zorro-antd/upload'; +import { SpaceRewardScheduleComponent } from './space-reward-schedule.component'; + +@NgModule({ + declarations: [SpaceRewardScheduleComponent], + imports: [ + CommonModule, + ModalDrawerModule, + IconModule, + NzIconModule, + FormatTokenModule, + NzFormModule, + NzDatePickerModule, + NzSelectModule, + FormsModule, + NzTableModule, + NzCardModule, + NzTagModule, + NzUploadModule, + ReactiveFormsModule, + DescriptionModule, + NzButtonModule, + RadioModule, + NzRadioModule, + ], + exports: [SpaceRewardScheduleComponent], +}) +export class SpaceRewardScheduleModule {} diff --git a/src/app/components/space/space.module.ts b/src/app/components/space/space.module.ts new file mode 100644 index 0000000..ec7f187 --- /dev/null +++ b/src/app/components/space/space.module.ts @@ -0,0 +1,9 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { SpaceCardModule } from './components/space-card/space-card.module'; + +@NgModule({ + exports: [SpaceCardModule], + imports: [CommonModule], +}) +export class SpaceModule {} diff --git a/src/app/components/tabs/tabs.component.html b/src/app/components/tabs/tabs.component.html new file mode 100644 index 0000000..40345d5 --- /dev/null +++ b/src/app/components/tabs/tabs.component.html @@ -0,0 +1,18 @@ + diff --git a/src/app/components/tabs/tabs.component.less b/src/app/components/tabs/tabs.component.less new file mode 100644 index 0000000..c98ad18 --- /dev/null +++ b/src/app/components/tabs/tabs.component.less @@ -0,0 +1,15 @@ +[nz-menu] > .ant-menu-item::after { + @apply border-b-0; +} + +[nz-menu] > .ant-menu-item { + @apply lg:text-icons-primary lg:dark:text-icons-primary-dark; +} + +[nz-menu] > .ant-menu-item-selected { + @apply text-white bg-tabs-selected; +} + +[nz-menu] > .ant-menu-item:hover:not(.ant-menu-item-selected) { + @apply text-tabs-text-on-hover; +} diff --git a/src/app/components/tabs/tabs.component.ts b/src/app/components/tabs/tabs.component.ts new file mode 100644 index 0000000..fb2394c --- /dev/null +++ b/src/app/components/tabs/tabs.component.ts @@ -0,0 +1,37 @@ +import { + AfterViewInit, + ChangeDetectionStrategy, + Component, + Input, + QueryList, + Type, + ViewChildren, + ViewContainerRef, +} from '@angular/core'; + +export interface TabSection { + label: string; + route: string | string[]; + icon?: any; +} + +@Component({ + selector: 'wen-tabs', + templateUrl: './tabs.component.html', + styleUrls: ['./tabs.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TabsComponent implements AfterViewInit { + @Input() tabs: TabSection[] = []; + + @ViewChildren('tabIcon', { read: ViewContainerRef }) + tabIconElements!: QueryList; + + public ngAfterViewInit(): void { + this.tabIconElements.toArray().forEach((tab, index: number) => { + if (this.tabs[index].icon) { + tab.createComponent(this.tabs[index].icon as Type); + } + }); + } +} diff --git a/src/app/components/tabs/tabs.module.ts b/src/app/components/tabs/tabs.module.ts new file mode 100644 index 0000000..742777b --- /dev/null +++ b/src/app/components/tabs/tabs.module.ts @@ -0,0 +1,12 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { NzMenuModule } from 'ng-zorro-antd/menu'; +import { TabsComponent } from './tabs.component'; + +@NgModule({ + exports: [TabsComponent], + declarations: [TabsComponent], + imports: [CommonModule, RouterModule, NzMenuModule], +}) +export class TabsModule {} diff --git a/src/app/components/terms-and-conditions/terms-and-conditions.component.html b/src/app/components/terms-and-conditions/terms-and-conditions.component.html new file mode 100644 index 0000000..307bb3c --- /dev/null +++ b/src/app/components/terms-and-conditions/terms-and-conditions.component.html @@ -0,0 +1,22 @@ + diff --git a/src/app/components/terms-and-conditions/terms-and-conditions.component.less b/src/app/components/terms-and-conditions/terms-and-conditions.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/components/terms-and-conditions/terms-and-conditions.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/components/terms-and-conditions/terms-and-conditions.component.ts b/src/app/components/terms-and-conditions/terms-and-conditions.component.ts new file mode 100644 index 0000000..ccd8ec5 --- /dev/null +++ b/src/app/components/terms-and-conditions/terms-and-conditions.component.ts @@ -0,0 +1,25 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { DeviceService } from '@core/services/device'; + +@Component({ + selector: 'wen-terms-and-conditions', + templateUrl: './terms-and-conditions.component.html', + styleUrls: ['./terms-and-conditions.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TermsAndConditionsComponent { + @Input() isChecked = false; + @Input() label? = $localize`By checking this box, you agree with`; + @Input() linkLabel? = $localize`Terms and Conditions`; + @Input() showLink = true; + @Input() documentLink!: string; + @Input() disabled = false; + @Output() wenOnCheckChange = new EventEmitter(); + + constructor(public deviceService: DeviceService) {} + + public onChange(value: boolean): void { + this.isChecked = value; + this.wenOnCheckChange.emit(this.isChecked); + } +} diff --git a/src/app/components/terms-and-conditions/terms-and-conditions.module.ts b/src/app/components/terms-and-conditions/terms-and-conditions.module.ts new file mode 100644 index 0000000..1c398db --- /dev/null +++ b/src/app/components/terms-and-conditions/terms-and-conditions.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { TermsAndConditionsComponent } from './terms-and-conditions.component'; + +@NgModule({ + declarations: [TermsAndConditionsComponent], + imports: [CommonModule, NzCheckboxModule], + exports: [TermsAndConditionsComponent], +}) +export class TermsAndConditionsModule {} diff --git a/src/app/components/timeline/timeline.component.html b/src/app/components/timeline/timeline.component.html new file mode 100644 index 0000000..cca1dfe --- /dev/null +++ b/src/app/components/timeline/timeline.component.html @@ -0,0 +1,306 @@ + + + + + + + + + + + + +
    +
    + +
    + +
    + +
    + +
    +
    + + + +
    +
    + {{ + item.payload.date + | date : ((deviceService.isDesktop$ | async) ? 'medium' : 'mediumDate') + }} +
    +
    + Earned Badge {{ item.payload.name }} with + {{ castAsBadgePayload(item.payload).xp }}XP +
    +
    +
    +
    +
    + +
    +
    + +
    + +
    + +
    +
    + + +
    +
    + {{ + item.payload.date + | date : ((deviceService.isDesktop$ | async) ? 'medium' : 'mediumDate') + }} +
    +
    + + Listed by @{{ item.payload.name | truncate : [10] }} + + + Made available for auction by @{{ + item.payload.name | truncate : [10] + }} + +
    +
    +
    +
    +
    + +
    +
    + +
    + +
    + +
    + +
    +
    + + + +
    +
    + {{ + item.payload.date + | date : ((deviceService.isDesktop$ | async) ? 'medium' : 'mediumDate') + }} +
    +
    + + + + +
    +
    + Purchased by @{{ item.payload.name }} + for + {{ + castAsOrderPayload(item.payload).amount + | formatToken : item.payload.network : true + | async + }} +
    + + See + Hide + +
    +
    + +
    +
    +
    + +
    + {{ tt.createdOn?.toDate() | date : 'shortDate' }} +
    + {{ tt.createdOn?.toDate() | date : 'shortTime' }} +
    + +
    + {{ transactionService.getTitle(tt) }} + + + +
    + {{ tt.payload.amount | formatToken : tt.network | async }} +
    + + {{ (cache.getSpace(tt.space) | async)?.name }} +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    + +
    + +
    +
    + + + +
    +
    + {{ + item.payload.date + | date : ((deviceService.isDesktop$ | async) ? 'medium' : 'mediumDate') + }} +
    +
    + Listed by space {{ item.payload.name }} +
    +
    +
    +
    +
    +
    + + +
    diff --git a/src/app/components/timeline/timeline.component.less b/src/app/components/timeline/timeline.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/components/timeline/timeline.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/components/timeline/timeline.component.ts b/src/app/components/timeline/timeline.component.ts new file mode 100644 index 0000000..ef15e9a --- /dev/null +++ b/src/app/components/timeline/timeline.component.ts @@ -0,0 +1,151 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { + FileMetedata, + FILE_SIZES, + Network, + Transaction, + TransactionType, +} from '@soonaverse/interfaces'; + +export enum TimelineItemType { + BADGE = 'Badge', + LISTED_BY_MEMBER = 'ListedByMember', + ORDER = 'Order', + LISTED_BY_SPACE = 'ListedBySpace', +} + +export interface BadgeTimelineItemPayload { + image?: FileMetedata; + date?: Date; + name: string; + xp: string; + network?: Network; +} + +export interface ListedByMemberTimelineItemPayload { + image?: string; + date?: Date; + name: string; + isAuction: boolean; + network?: Network; +} + +export interface OrderTimelineItemPayload { + image?: FileMetedata; + date?: Date; + name: string; + amount: number; + transactions: Transaction[]; + network?: Network; +} + +export interface ListedBySpaceTimelineItemPayload { + image?: string; + date?: Date; + name: string; + network?: Network; +} + +export type TimelineItemPayload = + | BadgeTimelineItemPayload + | ListedByMemberTimelineItemPayload + | OrderTimelineItemPayload + | ListedBySpaceTimelineItemPayload; + +export interface TimelineItem { + type: TimelineItemType; + payload: TimelineItemPayload; +} + +@Component({ + selector: 'wen-timeline', + templateUrl: './timeline.component.html', + styleUrls: ['./timeline.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TimelineComponent { + @Input() + set items(value: TimelineItem[]) { + this._items = value; + } + + get items(): TimelineItem[] { + return this._items; + } + + @Input() isCollapsable = false; + public showAll = false; + public collapsedItemsCount = 2; + public activeItems: (string | undefined)[] = []; + + private _items: TimelineItem[] = []; + + constructor( + public deviceService: DeviceService, + public transactionService: TransactionService, + public previewImageService: PreviewImageService, + public cache: CacheService, + public unitsService: UnitsService, + private cd: ChangeDetectorRef, + ) {} + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + public get transactionTypes(): typeof TransactionType { + return TransactionType; + } + + public trackByUid(index: number, item: any) { + return item.uid; + } + + public get timelineItemTypes(): typeof TimelineItemType { + return TimelineItemType; + } + + public getOrdersLength(): number { + return this.items.filter((item) => item.type === TimelineItemType.ORDER).length; + } + + public castAsBadgePayload(payload: TimelineItemPayload): BadgeTimelineItemPayload { + return payload as BadgeTimelineItemPayload; + } + + public castAsListedByMemberPayload( + payload: TimelineItemPayload, + ): ListedByMemberTimelineItemPayload { + return payload as ListedByMemberTimelineItemPayload; + } + + public castAsOrderPayload(payload: TimelineItemPayload): OrderTimelineItemPayload { + return payload as OrderTimelineItemPayload; + } + + public castAsListedBySpacePayload( + payload: TimelineItemPayload, + ): ListedBySpaceTimelineItemPayload { + return payload as ListedBySpaceTimelineItemPayload; + } + + public activeChange(event: boolean, item: TimelineItem): void { + if (event) { + this.activeItems = [...this.activeItems, item?.payload?.date?.toISOString()]; + } else { + this.activeItems = this.activeItems.filter( + (activeItem) => activeItem !== item?.payload?.date?.toISOString(), + ); + } + this.cd.markForCheck(); + } + + public isActive(item: TimelineItem): boolean { + return this.activeItems.includes(item?.payload?.date?.toISOString()); + } +} diff --git a/src/app/components/timeline/timeline.module.ts b/src/app/components/timeline/timeline.module.ts new file mode 100644 index 0000000..ba9db55 --- /dev/null +++ b/src/app/components/timeline/timeline.module.ts @@ -0,0 +1,36 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { CollapseModule } from '@components/collapse/collapse.module'; +import { IconModule } from '@components/icon/icon.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { IpfsBadgeModule } from '@core/pipes/ipfs-badge/ipfs-badge.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzCollapseModule } from 'ng-zorro-antd/collapse'; +import { NzPopoverModule } from 'ng-zorro-antd/popover'; +import { TimelineComponent } from './timeline.component'; + +@NgModule({ + declarations: [TimelineComponent], + imports: [ + CommonModule, + NzAvatarModule, + NzCardModule, + NzPopoverModule, + NzCollapseModule, + IconModule, + IpfsBadgeModule, + NzButtonModule, + CollapseModule, + FormatTokenModule, + ResizeAvatarModule, + TruncateModule, + RouterModule, + ], + exports: [TimelineComponent], +}) +export class TimelineModule {} diff --git a/src/app/components/token/components/locked-token-claim/locked-token-claim.component.html b/src/app/components/token/components/locked-token-claim/locked-token-claim.component.html new file mode 100644 index 0000000..4b99214 --- /dev/null +++ b/src/app/components/token/components/locked-token-claim/locked-token-claim.component.html @@ -0,0 +1,184 @@ + + + + +
    + + + + + + + + + + + +
    +
    + + +
    +
    +
    Total available tokens to refund
    +
    + {{ + ( + this.transaction?.payload.nativeTokens?.[0].amount| formatToken: + this.transaction?.payload.token: + false: + false | async + ) + }} +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    + Total available tokens to refund +
    +
    + {{ + ( + this.transaction?.payload.nativeTokens?.[0].amount | formatToken: + this.transaction?.payload.token: + false: + false | async + ) + }} +
    +
    +
    + +
    + +
    + {{ + expiryTicker$ | async | countdownTime + }} + + remaining to make the transfer. + Expired +
    +
    + + + + + + + + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    +
    + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    + +
    +
    + +
    +
    Refund complete. Congratulations.
    +
    + +
    + +
    +
    diff --git a/src/app/components/token/components/locked-token-claim/locked-token-claim.component.less b/src/app/components/token/components/locked-token-claim/locked-token-claim.component.less new file mode 100644 index 0000000..11934cc --- /dev/null +++ b/src/app/components/token/components/locked-token-claim/locked-token-claim.component.less @@ -0,0 +1,14 @@ +input { + @apply rounded-none; +} + +::ng-deep { + input::-webkit-inner-spin-button, + input::-webkit-outer-spin-button { + opacity: 0; + } +} + +.info-item { + @apply flex items-center justify-between flex-1 w-full px-6 py-2 mt-2 rounded-3xl bg-backgrounds-secondary dark:bg-backgrounds-secondary-dark min-h-14; +} diff --git a/src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts b/src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts new file mode 100644 index 0000000..9929656 --- /dev/null +++ b/src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts @@ -0,0 +1,345 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import { OrderApi } from '@api/order.api'; +import { TransactionApi } from '@api/transaction.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { + getLockedTokenClaimItem, + removeLockedTokenClaimItem, + setLockedTokenClaimItem, +} from '@core/utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { + Timestamp, + TokenDrop, + Transaction, + TransactionType, + TRANSACTION_AUTO_EXPIRY_MS, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, interval, Subscription } from 'rxjs'; + +export enum StepType { + CONFIRM = 'Confirm', + TRANSACTION = 'Transaction', + COMPLETE = 'Complete', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-locked-token-claim', + templateUrl: './locked-token-claim.component.html', + styleUrls: ['./locked-token-claim.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class LockedTokenClaimComponent implements OnInit, OnDestroy { + @Input() currentStep = StepType.CONFIRM; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() transaction?: Transaction; + @Output() wenOnClose = new EventEmitter(); + + public targetAddress?: string = ''; + public invalidPayment = false; + public targetAmount?: number; + public receivedTransactions = false; + public purchasedAmount = 0; + public history: HistoryItem[] = []; + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public isCopied = false; + private _isOpen = false; + private transSubscription?: Subscription; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public helper: HelperService, + public unitsService: UnitsService, + public transactionService: TransactionService, + private auth: AuthService, + private notification: NotificationService, + private orderApi: OrderApi, + private transactionApi: TransactionApi, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + this.transaction?.uid && removeLockedTokenClaimItem(this.transaction.uid); + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.TRANSACTION; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`Payment received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + val.createdOn, + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + val.createdOn, + $localize`Transaction confirmed.`, + ); + this.purchasedAmount = val.payload.amount; + this.receivedTransactions = true; + this.currentStep = StepType.COMPLETE; + this.cd.markForCheck(); + }, 2000); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid amount received. Refunding transaction...`, + ); + } + + const markInvalid = () => { + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid transaction.You must gift storage deposit.`, + ); + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Invalid payment refunded.`, + val.payload?.walletReference?.chainReference, + ); + + // Let's go back to wait. With slight delay so they can see this. + markInvalid(); + } + + this.cd.markForCheck(); + }); + + if (this.transaction?.uid && getLockedTokenClaimItem(this.transaction.uid)) { + this.transSubscription = this.orderApi + .listen(getLockedTokenClaimItem(this.transaction.uid)) + .subscribe(this.transaction$); + } + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + this.transaction?.uid && removeLockedTokenClaimItem(this.transaction.uid); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.CONFIRM; + this.cd.markForCheck(); + } + + public async claimToken(): Promise { + if (!this.transaction?.uid) { + return; + } + + const params: any = { + transaction: this.transaction.uid, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest( + this.transactionApi.creditUnrefundable(sc), + $localize`Credit refund submitted.`, + finish, + ) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + this.transaction?.uid && setLockedTokenClaimItem(this.transaction.uid, val.uid); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + }); + }); + } + + // TODO Only if date is in past. + public sumVested(arr: TokenDrop[]): number { + return arr.reduce((pv, cv) => { + return pv + (dayjs(cv.vestingAt.toDate()).isAfter(dayjs()) ? 0 : cv.count); + }, 0); + } + + public sum(arr: TokenDrop[]): number { + return arr.reduce((pv, cv) => { + return pv + cv.count; + }, 0); + } + + public nonVestedDrops(arr: TokenDrop[]): TokenDrop[] { + return arr.filter((d) => dayjs(d.vestingAt.toDate()).isAfter(dayjs())); + } + + public get stepType(): typeof StepType { + return StepType; + } + + public ngOnDestroy(): void { + this.transSubscription?.unsubscribe(); + } +} diff --git a/src/app/components/token/components/locked-token-claim/locked-token-claim.module.ts b/src/app/components/token/components/locked-token-claim/locked-token-claim.module.ts new file mode 100644 index 0000000..30772d6 --- /dev/null +++ b/src/app/components/token/components/locked-token-claim/locked-token-claim.module.ts @@ -0,0 +1,50 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { RelativeTimeModule } from '@core/pipes/relative-time/relative-time.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { LockedTokenClaimComponent } from './locked-token-claim.component'; + +@NgModule({ + declarations: [LockedTokenClaimComponent], + imports: [ + CommonModule, + NzModalModule, + NzDrawerModule, + IconModule, + NzButtonModule, + NzCheckboxModule, + FormatTokenModule, + NzAvatarModule, + NzInputModule, + TimeModule, + NzAlertModule, + NetworkModule, + FormsModule, + ReactiveFormsModule, + ModalDrawerModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + CountdownTimeModule, + DescriptionModule, + RelativeTimeModule, + ], + providers: [PercentPipe], + exports: [LockedTokenClaimComponent], +}) +export class LockedTokenClaimModule {} diff --git a/src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html b/src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html new file mode 100644 index 0000000..1027584 --- /dev/null +++ b/src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html @@ -0,0 +1,246 @@ + + + + +
    + +
    + +
    + + + + + + + + + + + +
    + + +
    +
    + + +
    {{ token?.name }}
    +
    ({{ token?.symbol }})
    +
    + +
    +
    + Tokens to airdrop +
    +
    + {{ getTotalToDrop() | formatToken : token?.uid : false : false | async }} + {{ token?.symbol }} +
    +
    + + + + + + + + +
    + Once you agree with the terms, the generated address will remain active during the whole + process. +
    +
    +
    + + +
    +
    + + +
    {{ token?.name }}
    +
    ({{ token?.symbol }})
    +
    + +
    +
    + Tokens to Airdrop +
    +
    + {{ getTotalToDrop() | formatToken : token?.uid : false : false | async }} + {{ token?.symbol }} +
    +
    + + + +
    +
    + +
    + {{ + expiryTicker$ | async | countdownTime + }} + + remaining to make the transfer. + Expired +
    +
    + + +
    + + + + + + + + +
    +
    + + +
    +
    + + +
    {{ token?.name }}
    +
    ({{ token?.symbol }})
    +
    + + + +
    +
    Transaction history
    + +
    +
    +
    + {{ t.date | Time }} +
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    + + +
    +
    + +
    +
    Transaction complete. Congratulations.
    +
    + + +
    +
    +
    +
    diff --git a/src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.less b/src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts b/src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts new file mode 100644 index 0000000..6bf66af --- /dev/null +++ b/src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts @@ -0,0 +1,355 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnInit, + Output, +} from '@angular/core'; +import { Router } from '@angular/router'; +import { OrderApi } from '@api/order.api'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { TransactionStep } from '@components/transaction-steps/transaction-steps.component'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { removeItem, setItem, StorageItem } from '@core/utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { + Timestamp, + Token, + Transaction, + TransactionType, + TRANSACTION_AUTO_EXPIRY_MS, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, interval, Subscription } from 'rxjs'; + +export enum StepType { + SELECT = 'Select', + TRANSACTION = 'Transaction', + WAIT = 'Wait', + CONFIRMED = 'Confirmed', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-token-airdrop-network', + templateUrl: './token-airdrop-network.component.html', + styleUrls: ['./token-airdrop-network.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenAirdropNetworkComponent implements OnInit { + @Input() currentStep = StepType.SELECT; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() token?: Token; + @Input() drops?: any; + @Output() wenOnClose = new EventEmitter(); + + public stepType = StepType; + public isCopied = false; + public agreeTermsConditions = false; + public targetAddress?: string = 'dummy_address'; + public targetAmount?: number = 1200000; + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public environment = environment; + public invalidPayment = false; + public history: HistoryItem[] = []; + public receivedTransactions = false; + public steps: TransactionStep[] = [ + { label: $localize`Select network`, sequenceNum: 0 }, + { label: $localize`Make transaction`, sequenceNum: 1 }, + { label: $localize`Wait for confirmation`, sequenceNum: 2 }, + { label: $localize`Confirmed`, sequenceNum: 3 }, + ]; + private transSubscription?: Subscription; + private _isOpen = false; + + constructor( + public previewImageService: PreviewImageService, + public unitsService: UnitsService, + public transactionService: TransactionService, + public helper: HelperService, + private cd: ChangeDetectorRef, + private auth: AuthService, + private notification: NotificationService, + private tokenApi: TokenApi, + private router: Router, + private orderApi: OrderApi, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + // It's expired. + removeItem(StorageItem.TokenAirdropTransaction); + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.WAIT; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`Payment received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + dayjs(), + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + dayjs(), + $localize`Transaction confirmed.`, + ); + this.receivedTransactions = true; + this.currentStep = StepType.CONFIRMED; + this.cd.markForCheck(); + }, 2000); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid amount received. Refunding transaction...`, + ); + } + + const markInvalid = () => { + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid transaction.You must gift storage deposit.`, + ); + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Invalid payment refunded.`, + val.payload?.walletReference?.chainReference, + ); + + // Let's go back to wait. With slight delay so they can see this. + markInvalid(); + } + + this.cd.markForCheck(); + }); + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + removeItem(StorageItem.TokenAirdropTransaction); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public get lockTime(): number { + return TRANSACTION_AUTO_EXPIRY_MS / 1000 / 60; + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.SELECT; + this.cd.markForCheck(); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + this.router.navigate(['/', ROUTER_UTILS.config.token.root, this.token?.uid]); + } + + public isExpired(val?: Transaction | null): boolean { + if (!val?.createdOn) { + return false; + } + + const expiresOn: dayjs.Dayjs = dayjs(val.createdOn.toDate()).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + return expiresOn.isBefore(dayjs()) && val.type === TransactionType.ORDER; + } + + public async proceedWithAirdrop(): Promise { + if (!this.token || !this.token?.mintingData) { + return; + } + + const params: any = { + token: this.token.uid, + drops: this.drops, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.tokenApi.airdropMintedToken(sc), 'Order created.', finish) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + setItem(StorageItem.TokenAirdropTransaction, val.uid); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + }); + }); + } + + public getTotalToDrop(): number { + return this.drops?.length ? this.drops.reduce((pv: any, cv: any) => pv + cv.count, 0) : 0; + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public getCurrentSequenceNum(): number { + switch (this.currentStep) { + case StepType.SELECT: + return 0; + case StepType.TRANSACTION: + return 1; + case StepType.WAIT: + return 2; + case StepType.CONFIRMED: + return 3; + default: + return 0; + } + } +} diff --git a/src/app/components/token/components/token-airdrop-network/token-airdrop-network.module.ts b/src/app/components/token/components/token-airdrop-network/token-airdrop-network.module.ts new file mode 100644 index 0000000..a1936ce --- /dev/null +++ b/src/app/components/token/components/token-airdrop-network/token-airdrop-network.module.ts @@ -0,0 +1,37 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { TransactionStepsModule } from '@components/transaction-steps/transaction-steps.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { TokenAirdropNetworkComponent } from './token-airdrop-network.component'; + +@NgModule({ + declarations: [TokenAirdropNetworkComponent], + imports: [ + CommonModule, + ModalDrawerModule, + NzButtonModule, + IconModule, + FormatTokenModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + NzAlertModule, + NetworkModule, + CountdownTimeModule, + TimeModule, + NzAvatarModule, + TransactionStepsModule, + ], + providers: [PercentPipe], + exports: [TokenAirdropNetworkComponent], +}) +export class TokenAirdropNetworkModule {} diff --git a/src/app/components/token/components/token-all-token-row/token-all-token-row.component.html b/src/app/components/token/components/token-all-token-row/token-all-token-row.component.html new file mode 100644 index 0000000..e487b26 --- /dev/null +++ b/src/app/components/token/components/token-all-token-row/token-all-token-row.component.html @@ -0,0 +1,196 @@ + + + + + +
    +
    + Price ({{ + unitsService.label(token?.mintingData?.networkFormat || token?.mintingData?.network) + }}) +
    +
    + {{ + { value: (listenAvgPrice$ | async) || 0, exponents: getDefaultNetworkDecimals() } + | formatToken + : token?.mintingData?.networkFormat || token?.mintingData?.network + : false + : false + | async + | unknownIfZero + }} +
    +
    + +
    +
    + Price (USD) +
    +
    + + {{ + unitsService.getUsd( + listenAvgPrice$ | async, + token?.mintingData?.networkFormat || token?.mintingData?.network + ) + | async + | currency : 'USD' + | UsdBelowTwoDecimals + }} + + - +
    +
    + +
    +
    + 24h Change +
    +
    + + {{ (listenChangePrice24h$ | async)?.toString() | percent : '1.0-2' }} + + - +
    +
    + +
    + +
    + 24h Volume ({{ + (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol + }}) +
    +
    + {{ + listenVolume24h$ + | async + | formatToken : token?.uid : false : false : 0 + | async + | unknownIfZero + }} +
    +
    +
    + +
    +
    + M. Cap (USD) +
    +
    + + {{ + unitsService.getUsd( + ((this.token?.totalSupply || 0) * ((listenAvgPrice$ | async) || 0)) / 1000 / 1000, + token?.mintingData?.networkFormat || token?.mintingData?.network + ) + | async + | currency : 'USD' + | UsdBelowTwoDecimals + }} + + - +
    +
    +
    diff --git a/src/app/components/token/components/token-all-token-row/token-all-token-row.component.less b/src/app/components/token/components/token-all-token-row/token-all-token-row.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/components/token/components/token-all-token-row/token-all-token-row.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/components/token/components/token-all-token-row/token-all-token-row.component.ts b/src/app/components/token/components/token-all-token-row/token-all-token-row.component.ts new file mode 100644 index 0000000..fccda58 --- /dev/null +++ b/src/app/components/token/components/token-all-token-row/token-all-token-row.component.ts @@ -0,0 +1,133 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input, + OnDestroy, + OnInit, +} from '@angular/core'; +import { TokenApi } from '@api/token.api'; +import { TokenMarketApi } from '@api/token_market.api'; +import { TokenPurchaseApi } from '@api/token_purchase.api'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { DEFAULT_NETWORK_DECIMALS, Token, TokenStatus } from '@soonaverse/interfaces'; +import { BehaviorSubject, Subscription, first } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-token-all-token-row', + templateUrl: './token-all-token-row.component.html', + styleUrls: ['./token-all-token-row.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenAllTokenRowComponent implements OnInit, OnDestroy { + @Input() tokenId?: string; + public token?: Token; + public path = ROUTER_UTILS.config.token.root; + public tradePath = ROUTER_UTILS.config.token.trade; + public listenAvgPrice$: BehaviorSubject = new BehaviorSubject< + number | undefined + >(undefined); + public listenVolume24h$: BehaviorSubject = new BehaviorSubject< + number | undefined + >(undefined); + public listenChangePrice24h$: BehaviorSubject = new BehaviorSubject< + number | undefined + >(undefined); + private subscriptions$: Subscription[] = []; + + constructor( + public previewImageService: PreviewImageService, + public helper: HelperService, + public deviceService: DeviceService, + public unitsService: UnitsService, + private tokenPurchaseApi: TokenPurchaseApi, + private tokenMarketApi: TokenMarketApi, + private tokenApi: TokenApi, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + if (this.tokenId) { + this.tokenApi + .listen(this.tokenId) + .pipe(first(), untilDestroyed(this)) + .subscribe((token) => { + if (token) { + this.token = token; + this.listenToStats(this.token.uid); + this.cd.markForCheck(); + } + }); + } + } + + private listenToStats(tokenId: string): void { + this.cancelSubscriptions(); + // TODO Add pagging. + this.subscriptions$.push( + this.tokenMarketApi + .listenAvgPrice(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenAvgPrice$), + ); + this.subscriptions$.push( + this.tokenPurchaseApi + .listenVolume24h(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenVolume24h$), + ); + this.subscriptions$.push( + this.tokenPurchaseApi + .listenChangePrice24h(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenChangePrice24h$), + ); + } + + public getDefaultNetworkDecimals(): number { + return DEFAULT_NETWORK_DECIMALS; + } + + public getPublicSaleSupply(): number { + let sup = 0; + this.token?.allocations.forEach((b) => { + if (b.isPublicSale) { + sup = b.percentage / 100; + } + }); + + return (this.token?.totalSupply || 0) * sup; + } + + public tradable(): boolean { + return ( + this.token?.status === TokenStatus.PRE_MINTED || + this.token?.status === TokenStatus.MINTED || + this.token?.status === TokenStatus.BASE + ); + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public getTokenRoute(): string[] { + if (this.tradable()) { + return ['/', this.path, this.token!.uid, this.tradePath]; + } else { + return ['/', this.path, this.token!.uid]; + } + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/components/token/components/token-all-token-row/token-all-token-row.module.ts b/src/app/components/token/components/token-all-token-row/token-all-token-row.module.ts new file mode 100644 index 0000000..219860a --- /dev/null +++ b/src/app/components/token/components/token-all-token-row/token-all-token-row.module.ts @@ -0,0 +1,27 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { UnknownIfZeroModule } from '@core/pipes/unknown-if-zero/unknown-if-zero.module'; +import { UsdBelowTwoDecimalsModule } from '@core/pipes/usd-below-two-decimals/usd-below-two-decimals.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { TokenAllTokenRowComponent } from './token-all-token-row.component'; + +@NgModule({ + declarations: [TokenAllTokenRowComponent], + imports: [ + CommonModule, + RouterModule, + NzAvatarModule, + NzButtonModule, + NzSkeletonModule, + FormatTokenModule, + UsdBelowTwoDecimalsModule, + UnknownIfZeroModule, + ], + providers: [PercentPipe], + exports: [TokenAllTokenRowComponent], +}) +export class TokenAllTokenRowModule {} diff --git a/src/app/components/token/components/token-bid/token-bid.component.html b/src/app/components/token/components/token-bid/token-bid.component.html new file mode 100644 index 0000000..a48fbaa --- /dev/null +++ b/src/app/components/token/components/token-bid/token-bid.component.html @@ -0,0 +1,272 @@ + + + + +
    + + +
    {{ token?.name }}
    +
    + {{ '(' + (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol + ')' }} +
    +
    + +
    + Summary +
    + +
    +
    + Token amount to buy +
    +
    + {{ + { value: amount, exponents: token?.decimals } + | formatToken : token?.uid : true : false + | async + }} + {{ (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol }} +
    +
    + +
    +
    + Offered price per token +
    +
    +
    + {{ + { value: price, exponents: getDefaultNetworkDecimals() } + | formatToken : token?.mintingData?.networkFormat || token?.mintingData?.network : true + | async + }} +
    + ~{{ + unitsService.getUsd( + price, + token?.mintingData?.networkFormat || token?.mintingData?.network + ) + | async + | currency : 'USD' + | UsdBelowTwoDecimals + }} +
    +
    + +
    +
    + Token amount to send +
    +
    +
    + {{ + getTargetAmount(false) + | formatToken : token?.mintingData?.networkFormat || token?.mintingData?.network : true + | async + }} +
    + ~{{ + unitsService.getUsd( + amount * price, + token?.mintingData?.networkFormat || token?.mintingData?.network + ) + | async + | currency : 'USD' + | UsdBelowTwoDecimals + }} +
    +
    + +
    + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + +
    + Once you agree with the terms, the generated address will remain active during the whole sale. +
    +
    +
    + + +
    +
    + +
    + {{ + expiryTicker$ | async | countdownTime + }} + + remaining to make the transfer. + Expired +
    +
    + + +
    + + + + + + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    +
    + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    + +
    +
    + +
    +
    Buy complete. Congratulations.
    +
    + +
    + +
    +
    diff --git a/src/app/components/token/components/token-bid/token-bid.component.less b/src/app/components/token/components/token-bid/token-bid.component.less new file mode 100644 index 0000000..06f39ee --- /dev/null +++ b/src/app/components/token/components/token-bid/token-bid.component.less @@ -0,0 +1,18 @@ +input { + @apply rounded-none; +} + +::ng-deep { + input::-webkit-inner-spin-button, + input::-webkit-outer-spin-button { + opacity: 0; + } +} + +.price-info-item { + @apply flex-1 border border-foregrounds-separator dark:border-foregrounds-separator-dark rounded-2xl py-3 flex items-center flex-col; +} + +.summary-item { + @apply mt-3 rounded-3xl flex items-center justify-between py-4 px-6 space-x-4; +} diff --git a/src/app/components/token/components/token-bid/token-bid.component.ts b/src/app/components/token/components/token-bid/token-bid.component.ts new file mode 100644 index 0000000..62d4ea5 --- /dev/null +++ b/src/app/components/token/components/token-bid/token-bid.component.ts @@ -0,0 +1,406 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import { OrderApi } from '@api/order.api'; +import { TokenMarketApi } from '@api/token_market.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { StorageItem, getItem, setItem } from '@core/utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { + DEFAULT_NETWORK, + DEFAULT_NETWORK_DECIMALS, + NETWORK_DETAIL, + Network, + Space, + TRANSACTION_AUTO_EXPIRY_MS, + Timestamp, + Token, + TokenTradeOrderType, + Transaction, + TransactionType, + getDefDecimalIfNotSet, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import bigDecimal from 'js-big-decimal'; +import { BehaviorSubject, Subscription, interval } from 'rxjs'; + +export enum StepType { + CONFIRM = 'Confirm', + TRANSACTION = 'Transaction', + COMPLETE = 'Complete', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-token-bid', + templateUrl: './token-bid.component.html', + styleUrls: ['./token-bid.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenBidComponent implements OnInit, OnDestroy { + @Input() set currentStep(value: StepType | undefined) { + this._currentStep = value; + if (this.currentStep === StepType.TRANSACTION && this.token?.uid) { + const acceptedTerms = (getItem(StorageItem.TokenBidsAcceptedTerms) || []) as string[]; + setItem(StorageItem.TokenBidsAcceptedTerms, [ + ...acceptedTerms.filter((r) => r !== this.token?.uid), + this.token.uid, + ]); + } + this.cd.markForCheck(); + } + + get currentStep(): StepType | undefined { + return this._currentStep; + } + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() token?: Token; + @Input() space?: Space; + @Input() price = 0; + @Input() amount = 0; + @Output() wenOnClose = new EventEmitter(); + + public agreeTermsConditions = false; + public agreeTokenTermsConditions = false; + public targetAddress?: string = ''; + public invalidPayment = false; + public targetAmount?: number; + public receivedTransactions = false; + public purchasedAmount = 0; + public history: HistoryItem[] = []; + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public isCopied = false; + private _isOpen = false; + private _currentStep?: StepType; + private transSubscription?: Subscription; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public helper: HelperService, + public unitsService: UnitsService, + public transactionService: TransactionService, + private auth: AuthService, + private notification: NotificationService, + private orderApi: OrderApi, + private tokenMarketApi: TokenMarketApi, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + // none. + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.TRANSACTION; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`Payment received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + val.createdOn, + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + val.createdOn, + $localize`Transaction confirmed.`, + ); + this.purchasedAmount = val.payload.amount; + this.receivedTransactions = true; + this.currentStep = StepType.COMPLETE; + this.cd.markForCheck(); + }, 2000); + } + + // Let's go back to wait. With slight delay so they can see this. + const markInvalid = () => { + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid amount received. Refunding transaction...`, + ); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid transaction.You must gift storage deposit.`, + ); + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference && + !val.ignoreWalletReason + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Invalid payment refunded.`, + val.payload?.walletReference?.chainReference, + ); + markInvalid(); + } + + this.cd.markForCheck(); + }); + + if (this.token?.uid) { + const acceptedTerms = getItem(StorageItem.TokenBidsAcceptedTerms) as string[]; + if (acceptedTerms && acceptedTerms.indexOf(this.token.uid) > -1) { + this.currentStep = StepType.TRANSACTION; + this.isOpen = false; + this.cd.markForCheck(); + + this.agreeTermsConditions = true; + this.agreeTokenTermsConditions = true; + // Hide while we're waiting. + this.proceedWithBid((s: boolean) => { + if (s) { + this.isOpen = true; + this.cd.markForCheck(); + } else { + this.close(); + } + }).catch(() => { + this.close(); + }); + } else { + this.currentStep = StepType.CONFIRM; + } + this.cd.markForCheck(); + } + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.CONFIRM; + this.cd.markForCheck(); + } + + public async proceedWithBid(cb?: any): Promise { + if (!this.token || !this.agreeTermsConditions || !this.agreeTokenTermsConditions) { + return; + } + + const params: any = { + symbol: this.token.symbol, + count: Number(this.amount * Math.pow(10, getDefDecimalIfNotSet(this.token?.decimals))), + price: Number(this.price), + type: TokenTradeOrderType.BUY, + }; + + const r = await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest( + this.tokenMarketApi.tradeToken(sc), + $localize`Bid created.`, + (success: boolean) => { + cb && cb(success); + finish(); + }, + ) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + if (cb) { + cb && cb(true); + finish(); + } + }); + }); + + if (!r) { + this.close(); + } + } + + public get stepType(): typeof StepType { + return StepType; + } + + public getDefaultNetworkDecimals(): number { + return DEFAULT_NETWORK_DECIMALS; + } + + public getTargetAmount(divideBy = false): number { + return Number( + bigDecimal[divideBy ? 'divide' : 'multiply']( + bigDecimal.multiply(Number(this.amount), Number(this.price)), + Math.pow( + 10, + getDefDecimalIfNotSet( + NETWORK_DETAIL[this.token?.mintingData?.network || DEFAULT_NETWORK].decimals, + ), + ), + 6, + ), + ); + } + + public getSymbolForNetwork(): Network { + return this.token?.symbol.toLowerCase(); + } + + public ngOnDestroy(): void { + this.transSubscription?.unsubscribe(); + } +} diff --git a/src/app/components/token/components/token-bid/token-bid.module.ts b/src/app/components/token/components/token-bid/token-bid.module.ts new file mode 100644 index 0000000..0ceb8ea --- /dev/null +++ b/src/app/components/token/components/token-bid/token-bid.module.ts @@ -0,0 +1,50 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { UsdBelowTwoDecimalsModule } from '@core/pipes/usd-below-two-decimals/usd-below-two-decimals.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { TokenBidComponent } from './token-bid.component'; + +@NgModule({ + declarations: [TokenBidComponent], + imports: [ + CommonModule, + NzModalModule, + NzDrawerModule, + IconModule, + NzButtonModule, + NzCheckboxModule, + NzAvatarModule, + UsdBelowTwoDecimalsModule, + FormatTokenModule, + NzInputModule, + TimeModule, + FormsModule, + NetworkModule, + CountdownTimeModule, + NzAlertModule, + ReactiveFormsModule, + ModalDrawerModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + DescriptionModule, + ], + providers: [PercentPipe], + exports: [TokenBidComponent], +}) +export class TokenBidModule {} diff --git a/src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html b/src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html new file mode 100644 index 0000000..475cc1b --- /dev/null +++ b/src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html @@ -0,0 +1,37 @@ + + + + +
    + +
    +
    Are you sure you want to cancel the sale?
    + +
    + Once the sale is cancelled process will trigger automatically and all investors will be + refunded immediately. +
    + +
    + + +
    +
    +
    +
    diff --git a/src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.less b/src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts b/src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts new file mode 100644 index 0000000..b134afb --- /dev/null +++ b/src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts @@ -0,0 +1,62 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { NotificationService } from '@core/services/notification'; +import { Token } from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-token-cancel-sale', + templateUrl: './token-cancel-sale.component.html', + styleUrls: ['./token-cancel-sale.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenCancelSaleComponent { + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() token?: Token; + @Output() wenOnClose = new EventEmitter(); + + private _isOpen = false; + + constructor( + private cd: ChangeDetectorRef, + private auth: AuthService, + private notification: NotificationService, + private tokenApi: TokenApi, + ) {} + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public reset(): void { + this.isOpen = false; + this.cd.markForCheck(); + } + + public async cancelSale(): Promise { + await this.auth.sign({ token: this.token?.uid }, (sc, finish) => { + this.notification + .processRequest( + this.tokenApi.cancelPublicSale(sc), + $localize`Canceled public sale.`, + finish, + ) + .subscribe(() => this.close()); + }); + } +} diff --git a/src/app/components/token/components/token-cancel-sale/token-cancel-sale.module.ts b/src/app/components/token/components/token-cancel-sale/token-cancel-sale.module.ts new file mode 100644 index 0000000..3685231 --- /dev/null +++ b/src/app/components/token/components/token-cancel-sale/token-cancel-sale.module.ts @@ -0,0 +1,13 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { TokenCancelSaleComponent } from './token-cancel-sale.component'; + +@NgModule({ + declarations: [TokenCancelSaleComponent], + imports: [CommonModule, ModalDrawerModule, IconModule, NzButtonModule], + exports: [TokenCancelSaleComponent], +}) +export class TokenCancelSaleModule {} diff --git a/src/app/components/token/components/token-cancel/token-cancel.component.html b/src/app/components/token/components/token-cancel/token-cancel.component.html new file mode 100644 index 0000000..b8f373c --- /dev/null +++ b/src/app/components/token/components/token-cancel/token-cancel.component.html @@ -0,0 +1,82 @@ + + + + +
    + + +
    {{ token?.name }}
    +
    {{ '(' + token?.symbol + ')' }}
    +
    + +
    +
    + Price ({{ + unitsService.label(token?.mintingData?.network) + }}) +
    +
    + {{ + (tradeOrder?.price || 0) * getMulti(token?.mintingData?.network) + | formatToken : token?.mintingData?.network + }} +
    +
    + +
    +
    +
    + Amount {{ '(' + token?.symbol + ')' }} +
    +
    + {{ + (tradeOrder?.count || 0) - (tradeOrder?.fulfilled || 0) + | formatToken : token?.uid : false : false + | async + }} +
    +
    +
    +
    + Total ({{ unitsService.label(token?.mintingData?.network) }}) +
    +
    {{ getTargetAmount() }}
    +
    +
    + +
    +
    + +
    +
    + + Are you sure you want to cancel your buy order? + + Are you sure you want to cancel your sell order? +
    +
    + +
    + + +
    +
    diff --git a/src/app/components/token/components/token-cancel/token-cancel.component.less b/src/app/components/token/components/token-cancel/token-cancel.component.less new file mode 100644 index 0000000..1f5b735 --- /dev/null +++ b/src/app/components/token/components/token-cancel/token-cancel.component.less @@ -0,0 +1,7 @@ +.price-info-item { + @apply flex-1 border border-foregrounds-separator dark:border-foregrounds-separator-dark rounded-2xl py-3 flex items-center flex-col; +} + +.summary-item { + @apply mt-3 rounded-3xl flex items-center justify-between py-4 px-6; +} diff --git a/src/app/components/token/components/token-cancel/token-cancel.component.ts b/src/app/components/token/components/token-cancel/token-cancel.component.ts new file mode 100644 index 0000000..605c0b3 --- /dev/null +++ b/src/app/components/token/components/token-cancel/token-cancel.component.ts @@ -0,0 +1,92 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { TokenMarketApi } from '@api/token_market.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { + DEFAULT_NETWORK, + NETWORK_DETAIL, + Network, + Token, + TokenTradeOrder, + TokenTradeOrderType, +} from '@soonaverse/interfaces'; +import bigDecimal from 'js-big-decimal'; + +@Component({ + selector: 'wen-token-cancel', + templateUrl: './token-cancel.component.html', + styleUrls: ['./token-cancel.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenCancelComponent { + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() token?: Token; + @Input() tradeOrder?: TokenTradeOrder; + @Output() wenOnClose = new EventEmitter(); + + private _isOpen = false; + + constructor( + public auth: AuthService, + public unitsService: UnitsService, + public previewImageService: PreviewImageService, + private notification: NotificationService, + private tokenMarketApi: TokenMarketApi, + ) {} + + public async cancel(): Promise { + if (!this.tradeOrder) return; + + const params: any = { + uid: this.tradeOrder.uid, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.tokenMarketApi.cancel(sc), $localize`Cancelled.`, finish) + .subscribe(() => { + this.close(); + }); + }); + } + + public close(): void { + this.isOpen = false; + this.wenOnClose.next(); + } + + public getTargetAmount(): string { + return bigDecimal.divide( + bigDecimal.multiply( + Number((this.tradeOrder?.count || 0) - (this.tradeOrder?.fulfilled || 0)), + Number(this.tradeOrder?.price || 0), + ), + NETWORK_DETAIL[this.token?.mintingData?.network || DEFAULT_NETWORK].divideBy, + 6, + ); + } + + public getMulti(v?: Network): number { + return NETWORK_DETAIL[v || DEFAULT_NETWORK].divideBy; + } + + public get tokenTradeOrderTypes(): typeof TokenTradeOrderType { + return TokenTradeOrderType; + } + + public get getTitle(): string { + if (!this.tradeOrder) return ''; + return this.tradeOrder.type === TokenTradeOrderType.BUY + ? $localize`Cancel your buy` + : $localize`Cancel your sell`; + } +} diff --git a/src/app/components/token/components/token-cancel/token-cancel.module.ts b/src/app/components/token/components/token-cancel/token-cancel.module.ts new file mode 100644 index 0000000..a8933b1 --- /dev/null +++ b/src/app/components/token/components/token-cancel/token-cancel.module.ts @@ -0,0 +1,22 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { TokenCancelComponent } from './token-cancel.component'; + +@NgModule({ + declarations: [TokenCancelComponent], + imports: [ + CommonModule, + ModalDrawerModule, + NzButtonModule, + IconModule, + NzAvatarModule, + FormatTokenModule, + ], + exports: [TokenCancelComponent], +}) +export class TokenCancelModule {} diff --git a/src/app/components/token/components/token-card/token-card.component.html b/src/app/components/token/components/token-card/token-card.component.html new file mode 100644 index 0000000..8571e60 --- /dev/null +++ b/src/app/components/token/components/token-card/token-card.component.html @@ -0,0 +1,265 @@ +
    +
    + Ongoing sale + Sale ends soon + Cooldown ends +
    + +
    +
    + + +
    + {{ token?.name }} +
    +
    + +
    + + +
    +
    +
    + Sale starts +
    +
    + {{ token?.saleStartDate?.toDate() | date : 'medium' }} +
    +
    + + + +
    +
    + + +
    + +
    +
    + {{ getPrc() | number : '1.2-2' }}% +
    +
    + {{ + token?.totalDeposit || 0 | formatToken : token?.uid : false : false | async + }} + + / {{ getPublicSaleSupply() | formatToken : token?.uid : false : false | async }} + + {{ + (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol + }} +
    +
    +
    + +
    +
    +
    + Sale ends +
    +
    + {{ helper.saleEndDate(token).toDate() | date : 'medium' }} +
    +
    + + + +
    +
    + + +
    + +
    +
    + {{ getPrc() | number : '1.2-2' }}% +
    +
    + {{ + token?.totalDeposit | formatToken : token?.uid : false : false | async + }} + + / {{ getPublicSaleSupply() | formatToken : token?.uid : false : false | async }} + + {{ + (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol + }} +
    +
    +
    + +
    +
    +
    + Sale ends +
    +
    + {{ helper.saleEndDate(token).toDate() | date : 'medium' }} +
    +
    + + + +
    +
    + + +
    + +
    +
    + {{ getPrc() | number : '1.2-2' }}% +
    +
    + {{ + token?.totalDeposit | formatToken : token?.uid : false : false | async + }} + + / {{ getPublicSaleSupply() | formatToken : token?.uid : false : false | async }} + + {{ + (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol + }} +
    +
    +
    + +
    +
    +
    + Cooldown ends +
    +
    + {{ getCooldownDate().toDate() | date : 'medium' }} +
    +
    + + + +
    +
    +
    +
    diff --git a/src/app/components/token/components/token-card/token-card.component.less b/src/app/components/token/components/token-card/token-card.component.less new file mode 100644 index 0000000..9d68e07 --- /dev/null +++ b/src/app/components/token/components/token-card/token-card.component.less @@ -0,0 +1,14 @@ +.upcoming-wrapper { + box-shadow: 0px 1px 12px #dceff9; + border: 2px solid #d0eaf7; +} + +.ongoing-wrapper { + box-shadow: 0px 1px 12px #c4f8d0; + border: 2px solid #beefc9; +} + +.ending-wrapper { + box-shadow: 0px 1px 12px #f9ded2; + border: 2px solid #f9d8ca; +} diff --git a/src/app/components/token/components/token-card/token-card.component.ts b/src/app/components/token/components/token-card/token-card.component.ts new file mode 100644 index 0000000..0376894 --- /dev/null +++ b/src/app/components/token/components/token-card/token-card.component.ts @@ -0,0 +1,108 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { DataService } from '@pages/token/services/data.service'; +import { HelperService } from '@pages/token/services/helper.service'; +import { Token } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; + +export enum TokenCardType { + UPCOMING = 0, + ONGOING = 1, + ENDING = 2, + COOLDOWN = 3, +} + +@Component({ + selector: 'wen-token-card', + templateUrl: './token-card.component.html', + styleUrls: ['./token-card.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenCardComponent { + @Input() + set token(value: Token | undefined) { + this._token = value; + this.setCardType(); + } + + get token(): Token | undefined { + return this._token; + } + + public cardType = TokenCardType.UPCOMING; + public path = ROUTER_UTILS.config.token.root; + private _token?: Token; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public data: DataService, + public helper: HelperService, + private cd: ChangeDetectorRef, + ) {} + + public get tokenCardTypes(): typeof TokenCardType { + return TokenCardType; + } + + public getStartDate(): dayjs.Dayjs { + return dayjs(this.token?.saleStartDate?.toDate()); + } + + public getCooldownDate(): dayjs.Dayjs { + return dayjs(this.token?.coolDownEnd?.toDate()); + } + + public getEndDate(): dayjs.Dayjs { + return dayjs(this.token?.saleStartDate?.toDate()).add(this.token?.saleLength || 0, 'ms'); + } + + public getPrc(): number { + const prc = + (this.token?.totalDeposit || 0) / + (this.token?.pricePerToken || 0) / + this.getPublicSaleSupply(); + return (prc > 1 ? 1 : prc) * 100; + } + + public getPublicSaleSupply(): number { + let sup = 0; + this.token?.allocations.forEach((b) => { + if (b.isPublicSale) { + sup = b.percentage / 100; + } + }); + + return (this.token?.totalSupply || 0) * sup; + } + + private setCardType(): void { + const endDate = this.getEndDate(); + // 1 / 5 is close to ending. + if ( + dayjs(this.token?.saleStartDate?.toDate()).isBefore(dayjs()) && + endDate + .clone() + .subtract((this.token?.saleLength || 0) / 5) + .isBefore(dayjs()) && + endDate.isAfter(dayjs()) + ) { + this.cardType = TokenCardType.ENDING; + } else if ( + dayjs(this.token?.saleStartDate?.toDate()).isBefore(dayjs()) && + endDate.isAfter(dayjs()) + ) { + this.cardType = TokenCardType.ONGOING; + } else if ( + endDate.isBefore(dayjs()) && + dayjs(this.token?.coolDownEnd?.toDate()).isAfter(dayjs()) + ) { + this.cardType = TokenCardType.COOLDOWN; + } else { + this.cardType = TokenCardType.UPCOMING; + } + this.cd.markForCheck(); + } +} diff --git a/src/app/components/token/components/token-card/token-card.module.ts b/src/app/components/token/components/token-card/token-card.module.ts new file mode 100644 index 0000000..c97c7b6 --- /dev/null +++ b/src/app/components/token/components/token-card/token-card.module.ts @@ -0,0 +1,25 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { CountdownModule } from '@components/countdown/countdown.module'; +import { IconModule } from '@components/icon/icon.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzProgressModule } from 'ng-zorro-antd/progress'; +import { TokenCardComponent } from './token-card.component'; + +@NgModule({ + declarations: [TokenCardComponent], + imports: [ + CommonModule, + RouterModule, + NzAvatarModule, + IconModule, + NzProgressModule, + FormatTokenModule, + CountdownModule, + ], + providers: [PercentPipe], + exports: [TokenCardComponent], +}) +export class TokenCardModule {} diff --git a/src/app/components/token/components/token-claim/token-claim.component.html b/src/app/components/token/components/token-claim/token-claim.component.html new file mode 100644 index 0000000..4d37d97 --- /dev/null +++ b/src/app/components/token/components/token-claim/token-claim.component.html @@ -0,0 +1,281 @@ + + + + +
    + + +
    {{ token?.name }}
    +
    {{ '(' + token?.symbol + ')' }}
    +
    + +
    + + + + + + + + + + + +
    +
    + + +
    +
    + +
    Total available tokens to claim as of today
    +
    + {{ + sumVested(memberDistribution?.tokenDrops || []) + | formatToken : token?.uid : false : false + | async + }} + {{ token?.symbol }} +
    +
    + +
    Total available tokens to claim as of today
    +
    + {{ + sumVested(memberDistribution?.tokenDrops || []) + + (!memberDistribution?.mintedClaimedOn ? memberDistribution?.tokenOwned || 0 : 0) + | formatToken : token?.uid : false : false + | async + }} + {{ token?.symbol }} +
    +
    +
    +
    +
    + Tokens available from + {{ drop.vestingAt.toDate() | date : 'shortDate' }} +
    +
    + {{ drop.count | formatToken : token?.uid : false : false | async }} {{ token?.symbol }} +
    +
    +
    +
    Total tokens to claim
    +
    + {{ + sum(memberDistribution?.tokenDrops || []) + + (helper.isMinted(token) && !memberDistribution?.mintedClaimedOn + ? memberDistribution?.tokenOwned || 0 + : 0) + | formatToken : token?.uid : false : false + | async + }} + {{ token?.symbol }} +
    +
    +
    + + + + + + + +
    + + +
    + Once you agree with the terms, the generated address will remain active during the whole sale. +
    +
    +
    + + +
    +
    + +
    + Total available tokens to claim as of today +
    +
    + {{ + sumVested(memberDistribution?.tokenDrops || []) + | formatToken : token?.uid : false : false + | async + }} +
    +
    + +
    + Total available tokens to claim on the network +
    +
    + {{ + sum(memberDistribution?.tokenDrops || []) + + (!memberDistribution?.mintedClaimedOn ? memberDistribution?.tokenOwned || 0 : 0) + | formatToken : token?.uid : false : false + | async + }} +
    +
    +
    +
    + +
    + +
    + {{ + expiryTicker$ | async | countdownTime + }} + + remaining to make the transfer. + Expired +
    +
    + + + + + + + + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    +
    + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    + +
    +
    + +
    +
    Claim complete. Congratulations.
    +
    + +
    + +
    +
    diff --git a/src/app/components/token/components/token-claim/token-claim.component.less b/src/app/components/token/components/token-claim/token-claim.component.less new file mode 100644 index 0000000..11934cc --- /dev/null +++ b/src/app/components/token/components/token-claim/token-claim.component.less @@ -0,0 +1,14 @@ +input { + @apply rounded-none; +} + +::ng-deep { + input::-webkit-inner-spin-button, + input::-webkit-outer-spin-button { + opacity: 0; + } +} + +.info-item { + @apply flex items-center justify-between flex-1 w-full px-6 py-2 mt-2 rounded-3xl bg-backgrounds-secondary dark:bg-backgrounds-secondary-dark min-h-14; +} diff --git a/src/app/components/token/components/token-claim/token-claim.component.ts b/src/app/components/token/components/token-claim/token-claim.component.ts new file mode 100644 index 0000000..769d33a --- /dev/null +++ b/src/app/components/token/components/token-claim/token-claim.component.ts @@ -0,0 +1,356 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import { TokenDistributionWithAirdrops } from '@api/member.api'; +import { OrderApi } from '@api/order.api'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { getTokenClaimItem, removeTokenClaimItem, setTokenClaimItem } from '@core/utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { + Space, + Timestamp, + Token, + TokenDrop, + TokenStatus, + Transaction, + TransactionType, + TRANSACTION_AUTO_EXPIRY_MS, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, interval, Subscription } from 'rxjs'; + +export enum StepType { + CONFIRM = 'Confirm', + TRANSACTION = 'Transaction', + COMPLETE = 'Complete', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-token-claim', + templateUrl: './token-claim.component.html', + styleUrls: ['./token-claim.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenClaimComponent implements OnInit, OnDestroy { + @Input() currentStep = StepType.CONFIRM; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() token?: Token; + @Input() memberDistribution?: TokenDistributionWithAirdrops | null; + @Input() space?: Space; + @Output() wenOnClose = new EventEmitter(); + + public agreeTermsConditions = false; + public agreeTokenTermsConditions = false; + public targetAddress?: string = ''; + public invalidPayment = false; + public targetAmount?: number; + public receivedTransactions = false; + public purchasedAmount = 0; + public history: HistoryItem[] = []; + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public isCopied = false; + private _isOpen = false; + private transSubscription?: Subscription; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public helper: HelperService, + public unitsService: UnitsService, + public transactionService: TransactionService, + private auth: AuthService, + private notification: NotificationService, + private orderApi: OrderApi, + private tokenApi: TokenApi, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + this.token && removeTokenClaimItem(this.token.uid); + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.TRANSACTION; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`Payment received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + val.createdOn, + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + val.createdOn, + $localize`Transaction confirmed.`, + ); + this.purchasedAmount = val.payload.amount; + this.receivedTransactions = true; + this.currentStep = StepType.COMPLETE; + this.cd.markForCheck(); + }, 2000); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid amount received. Refunding transaction...`, + ); + } + + const markInvalid = () => { + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid transaction.You must gift storage deposit.`, + ); + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Invalid payment refunded.`, + val.payload?.walletReference?.chainReference, + ); + + // Let's go back to wait. With slight delay so they can see this. + markInvalid(); + } + + this.cd.markForCheck(); + }); + + if (this.token && getTokenClaimItem(this.token.uid)) { + this.transSubscription = this.orderApi + .listen(getTokenClaimItem(this.token.uid)) + .subscribe(this.transaction$); + } + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + this.token && removeTokenClaimItem(this.token.uid); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.CONFIRM; + this.cd.markForCheck(); + } + + public async claimToken(): Promise { + if (!this.token || !this.agreeTermsConditions) { + return; + } + + const params: any = + this.token?.status === TokenStatus.MINTED || this.token?.status === TokenStatus.BASE + ? { + symbol: this.token.symbol, + } + : { + token: this.token.uid, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest( + this.token?.status === TokenStatus.MINTED || this.token?.status === TokenStatus.BASE + ? this.tokenApi.claimMintedToken(sc) + : this.tokenApi.claimAirdroppedToken(sc), + $localize`Token claim submitted.`, + finish, + ) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + this.token && setTokenClaimItem(this.token.uid, val.uid); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + }); + }); + } + + // TODO Only if date is in past. + public sumVested(arr: TokenDrop[]): number { + return arr.reduce((pv, cv) => { + return pv + (dayjs(cv.vestingAt.toDate()).isAfter(dayjs()) ? 0 : cv.count); + }, 0); + } + + public sum(arr: TokenDrop[]): number { + return arr.reduce((pv, cv) => { + return pv + cv.count; + }, 0); + } + + public nonVestedDrops(arr: TokenDrop[]): TokenDrop[] { + return arr.filter((d) => dayjs(d.vestingAt.toDate()).isAfter(dayjs())); + } + + public get stepType(): typeof StepType { + return StepType; + } + + public ngOnDestroy(): void { + this.transSubscription?.unsubscribe(); + } +} diff --git a/src/app/components/token/components/token-claim/token-claim.module.ts b/src/app/components/token/components/token-claim/token-claim.module.ts new file mode 100644 index 0000000..0958d7f --- /dev/null +++ b/src/app/components/token/components/token-claim/token-claim.module.ts @@ -0,0 +1,50 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { RelativeTimeModule } from '@core/pipes/relative-time/relative-time.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { TokenClaimComponent } from './token-claim.component'; + +@NgModule({ + declarations: [TokenClaimComponent], + imports: [ + CommonModule, + NzModalModule, + NzDrawerModule, + IconModule, + NzButtonModule, + NzCheckboxModule, + NzAvatarModule, + NzInputModule, + TimeModule, + NzAlertModule, + NetworkModule, + FormsModule, + FormatTokenModule, + ReactiveFormsModule, + ModalDrawerModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + CountdownTimeModule, + DescriptionModule, + RelativeTimeModule, + ], + providers: [PercentPipe], + exports: [TokenClaimComponent], +}) +export class TokenClaimModule {} diff --git a/src/app/components/token/components/token-highlight-card/token-highlight-card.component.html b/src/app/components/token/components/token-highlight-card/token-highlight-card.component.html new file mode 100644 index 0000000..f719cb5 --- /dev/null +++ b/src/app/components/token/components/token-highlight-card/token-highlight-card.component.html @@ -0,0 +1,62 @@ + +
    {{ title }}
    + + + + + +
    + + +
    + {{ (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol }} +
    +
    + {{ token?.name }} +
    +
    + + +
    + {{ + { value: (listenAvgPrice[i] | async) || 0, exponents: token?.decimals } + | formatToken : token?.uid : false : false + | async + | unknownIfZero + }} + {{ + unitsService.label(token?.mintingData?.networkFormat || token?.mintingData?.network) + }} +
    + + +
    + {{ (listenChangePrice24h[i] | async)?.toString() | percent : '1.0-2' }} +
    + + + +
    +
    diff --git a/src/app/components/token/components/token-highlight-card/token-highlight-card.component.less b/src/app/components/token/components/token-highlight-card/token-highlight-card.component.less new file mode 100644 index 0000000..d5fe027 --- /dev/null +++ b/src/app/components/token/components/token-highlight-card/token-highlight-card.component.less @@ -0,0 +1,19 @@ +:host { + @apply block; + + ::ng-deep { + nz-card { + @apply rounded-2xl; + + .ant-card-body { + @apply px-2 pt-3 pb-1; + } + } + + nz-table { + .ant-table-tbody .ant-table-row .ant-table-cell { + @apply border-0 !important; + } + } + } +} diff --git a/src/app/components/token/components/token-highlight-card/token-highlight-card.component.ts b/src/app/components/token/components/token-highlight-card/token-highlight-card.component.ts new file mode 100644 index 0000000..74656e1 --- /dev/null +++ b/src/app/components/token/components/token-highlight-card/token-highlight-card.component.ts @@ -0,0 +1,78 @@ +import { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core'; +import { TokenMarketApi } from '@api/token_market.api'; +import { TokenPurchaseApi } from '@api/token_purchase.api'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { Token } from '@soonaverse/interfaces'; +import { BehaviorSubject, Subscription } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-token-highlight-card', + templateUrl: './token-highlight-card.component.html', + styleUrls: ['./token-highlight-card.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenHighlightCardComponent implements OnDestroy { + @Input() title = ''; + + @Input() + set tokens(value: Token[]) { + this._tokens = value; + this.listenToStats(); + } + + get tokens(): Token[] { + return this._tokens; + } + + @Input() toDetail = true; + + public listenAvgPrice: BehaviorSubject[] = []; + public listenChangePrice24h: BehaviorSubject[] = []; + + private _tokens: Token[] = []; + private subscriptions$: Subscription[] = []; + + constructor( + public previewImageService: PreviewImageService, + public unitsService: UnitsService, + private tokenPurchaseApi: TokenPurchaseApi, + private tokenMarketApi: TokenMarketApi, + ) {} + + private listenToStats(): void { + this.cancelSubscriptions(); + this.listenAvgPrice = []; + this.listenChangePrice24h = []; + this.tokens.forEach((token) => { + const listenAvgPrice$ = new BehaviorSubject(undefined); + const listenChangePrice24h$ = new BehaviorSubject(undefined); + this.listenAvgPrice.push(listenAvgPrice$); + this.listenChangePrice24h.push(listenChangePrice24h$); + this.subscriptions$.push( + this.tokenMarketApi + .listenAvgPrice(token?.uid) + .pipe(untilDestroyed(this)) + .subscribe(listenAvgPrice$), + ); + this.subscriptions$.push( + this.tokenPurchaseApi + .listenChangePrice24h(token?.uid) + .pipe(untilDestroyed(this)) + .subscribe(listenChangePrice24h$), + ); + }); + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/components/token/components/token-highlight-card/token-highlight-card.module.ts b/src/app/components/token/components/token-highlight-card/token-highlight-card.module.ts new file mode 100644 index 0000000..01237b3 --- /dev/null +++ b/src/app/components/token/components/token-highlight-card/token-highlight-card.module.ts @@ -0,0 +1,24 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { UnknownIfZeroModule } from '@core/pipes/unknown-if-zero/unknown-if-zero.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { TokenHighlightCardComponent } from './token-highlight-card.component'; + +@NgModule({ + declarations: [TokenHighlightCardComponent], + imports: [ + CommonModule, + NzCardModule, + NzAvatarModule, + FormatTokenModule, + NzTableModule, + RouterModule, + UnknownIfZeroModule, + ], + exports: [TokenHighlightCardComponent], +}) +export class TokenHighlightCardModule {} diff --git a/src/app/components/token/components/token-import/token-import.component.html b/src/app/components/token/components/token-import/token-import.component.html new file mode 100644 index 0000000..b447136 --- /dev/null +++ b/src/app/components/token/components/token-import/token-import.component.html @@ -0,0 +1,242 @@ + + + + +
    + +
    + +
    + + + + + + + + + + + +
    + + +
    +
    + +
    + Token must be minted following IRC30 standard. It MUST include name, description, uri, + symbol and decimals.

    + + Make sure you are sending the confirmation deposit from the same wallet that owns the + alias token was minted with. +
    +
    + + + + +
    + +
    + + + + + + +
    + Once you agree with the terms, the generated address will remain active during the whole + process. +
    +
    +
    + + +
    +
    + +
    + Token must be minted following IRC30 standard. It MUST include name, description, uri, + symbol and decimals.

    + + Make sure you are sending the confirmation deposit from the same wallet that owns the + alias token was minted with. +
    +
    + +
    +
    + Token ID: +
    + +
    +
    + {{ tokenIdControl.value }} +
    +
    +
    + + + + + + + + + + +
    +
    + + +
    + +
    + Token must be minted following IRC30 standard. It MUST include name, description, uri, + symbol and decimals.

    + + Make sure you are sending the confirmation deposit from the same wallet that owns the alias + token was minted with. +
    +
    + +
    +
    +
    + Token ID: +
    + +
    +
    + {{ tokenIdControl.value }} +
    +
    +
    + + + +
    +
    Transaction history
    + +
    +
    +
    + {{ t.date | Time }} +
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    + + +
    +
    + +
    +
    Transaction complete. Congratulations.
    +
    + + +
    +
    +
    +
    diff --git a/src/app/components/token/components/token-import/token-import.component.less b/src/app/components/token/components/token-import/token-import.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/token/components/token-import/token-import.component.ts b/src/app/components/token/components/token-import/token-import.component.ts new file mode 100644 index 0000000..cec795c --- /dev/null +++ b/src/app/components/token/components/token-import/token-import.component.ts @@ -0,0 +1,375 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnInit, + Output, +} from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { Router } from '@angular/router'; +import { OrderApi } from '@api/order.api'; +import { TokenMintApi } from '@api/token_mint.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { TransactionStep } from '@components/transaction-steps/transaction-steps.component'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { StorageItem, removeItem, setItem } from '@core/utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { + Network, + Space, + TRANSACTION_AUTO_EXPIRY_MS, + Timestamp, + Transaction, + TransactionType, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, Subscription, interval } from 'rxjs'; + +export enum StepType { + SELECT = 'Select', + TRANSACTION = 'Transaction', + WAIT = 'Wait', + CONFIRMED = 'Confirmed', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-token-import', + templateUrl: './token-import.component.html', + styleUrls: ['./token-import.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenImportComponent implements OnInit { + @Input() currentStep = StepType.SELECT; + @Input() space: Space | undefined = undefined; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + @Output() wenOnClose = new EventEmitter(); + + public stepType = StepType; + public isCopied = false; + public selectedNetwork?: Network; + public agreeTermsConditions = false; + public targetAddress?: string = 'dummy_address'; + public targetAmount?: number = 1200000; + public tokenIdControl = new FormControl(''); + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public invalidPayment = false; + public history: HistoryItem[] = []; + public receivedTransactions = false; + public steps: TransactionStep[] = [ + { label: $localize`Select network`, sequenceNum: 0 }, + { label: $localize`Make transaction`, sequenceNum: 1 }, + { label: $localize`Wait for confirmation`, sequenceNum: 2 }, + { label: $localize`Confirmed`, sequenceNum: 3 }, + ]; + private transSubscription?: Subscription; + private _isOpen = false; + + constructor( + public previewImageService: PreviewImageService, + public unitsService: UnitsService, + public transactionService: TransactionService, + public helper: HelperService, + private router: Router, + private cd: ChangeDetectorRef, + private auth: AuthService, + private notification: NotificationService, + private tokenMintApi: TokenMintApi, + private orderApi: OrderApi, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + // It's expired. + removeItem(StorageItem.TokenMintTransaction); + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.WAIT; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`Payment received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + dayjs(), + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + dayjs(), + $localize`Transaction confirmed.`, + ); + this.receivedTransactions = true; + this.currentStep = StepType.CONFIRMED; + this.cd.markForCheck(); + }, 2000); + } + + const markInvalid = () => { + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload.invalidPayment === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_credit_back', + dayjs(), + $localize`Invalid amount received. Refunding transaction...`, + ); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload.invalidPayment === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_credit_back', + dayjs(), + $localize`Invalid transaction.You must gift storage deposit.`, + ); + + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload.invalidPayment === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_credit_back', + dayjs(), + $localize`Refunding your payment...`, + ); + } + + // Credit + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory(val, val.uid + '_refund_complete', dayjs(), 'Payment refunded.'); + + if (val.payload.invalidPayment) { + markInvalid(); + } + } + + this.cd.markForCheck(); + }); + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + removeItem(StorageItem.TokenMintTransaction); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public get lockTime(): number { + return TRANSACTION_AUTO_EXPIRY_MS / 1000 / 60; + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.SELECT; + this.cd.markForCheck(); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public goToToken(): void { + this.router.navigate(['/', ROUTER_UTILS.config.token.root, this.tokenIdControl.value]); + this.close(); + } + + public isExpired(val?: Transaction | null): boolean { + if (!val?.createdOn) { + return false; + } + + const expiresOn: dayjs.Dayjs = dayjs(val.createdOn.toDate()).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + return expiresOn.isBefore(dayjs()) && val.type === TransactionType.ORDER; + } + + public async proceedWithMint(): Promise { + if ( + !this.tokenIdControl.value || + !this.space?.uid || + this.selectedNetwork === undefined || + !this.agreeTermsConditions + ) { + return; + } + + const params: any = { + tokenId: this.tokenIdControl.value, + space: this.space.uid, + network: this.selectedNetwork, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.tokenMintApi.importToken(sc), 'Order created.', finish) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + setItem(StorageItem.TokenMintTransaction, val.uid); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + }); + }); + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public getCurrentSequenceNum(): number { + switch (this.currentStep) { + case StepType.SELECT: + return 0; + case StepType.TRANSACTION: + return 1; + case StepType.WAIT: + return 2; + case StepType.CONFIRMED: + return 3; + default: + return 0; + } + } +} diff --git a/src/app/components/token/components/token-import/token-import.module.ts b/src/app/components/token/components/token-import/token-import.module.ts new file mode 100644 index 0000000..0217d5a --- /dev/null +++ b/src/app/components/token/components/token-import/token-import.module.ts @@ -0,0 +1,41 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { TransactionStepsModule } from '@components/transaction-steps/transaction-steps.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { TokenImportComponent } from './token-import.component'; + +@NgModule({ + declarations: [TokenImportComponent], + imports: [ + CommonModule, + ModalDrawerModule, + NzButtonModule, + IconModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + NzAlertModule, + NetworkModule, + FormatTokenModule, + CountdownTimeModule, + TimeModule, + NzInputModule, + ReactiveFormsModule, + NzAvatarModule, + TransactionStepsModule, + ], + providers: [PercentPipe], + exports: [TokenImportComponent], +}) +export class TokenImportModule {} diff --git a/src/app/components/token/components/token-info/token-info-description.component.html b/src/app/components/token/components/token-info/token-info-description.component.html new file mode 100644 index 0000000..95089e8 --- /dev/null +++ b/src/app/components/token/components/token-info/token-info-description.component.html @@ -0,0 +1,47 @@ + + + + diff --git a/src/app/components/token/components/token-info/token-info-description.component.less b/src/app/components/token/components/token-info/token-info-description.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/token/components/token-info/token-info-description.component.ts b/src/app/components/token/components/token-info/token-info-description.component.ts new file mode 100644 index 0000000..ff3593d --- /dev/null +++ b/src/app/components/token/components/token-info/token-info-description.component.ts @@ -0,0 +1,91 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { TokenApi } from '@api/token.api'; +import { DescriptionItemType } from '@components/description/description.component'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { download } from '@core/utils/tools.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/token/services/data.service'; +import { HelperService } from '@pages/token/services/helper.service'; +import { Token } from '@soonaverse/interfaces'; +import Papa from 'papaparse'; +import { debounceTime } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-token-info-description', + templateUrl: './token-info-description.component.html', + styleUrls: ['./token-info-description.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenInfoDescriptionComponent { + @Input() token?: Token; + + public tokenInfoLabels: string[] = [ + $localize`Icon`, + $localize`Name`, + $localize`Symbol`, + $localize`Decimals`, + $localize`Launchpad Price`, + $localize`Network`, + $localize`Total supply`, + $localize`Current distribution`, + $localize`Type`, + ]; + + constructor( + public data: DataService, + public previewImageService: PreviewImageService, + public helper: HelperService, + public unitsService: UnitsService, + private tokenApi: TokenApi, + private cd: ChangeDetectorRef, + ) {} + + public get descriptionItemTypes(): typeof DescriptionItemType { + return DescriptionItemType; + } + + public downloadCurrentDistribution(): void { + this.tokenApi + .getDistributions(this.token?.uid) + .pipe(debounceTime(2500), untilDestroyed(this)) + .subscribe((distributions) => { + const fields = [ + '', + 'ethAddress', + 'tokenOwned', + 'unclaimedTokens', + 'tokenClaimed', + 'lockedForSale', + 'sold', + 'totalBought', + 'refundedAmount', + 'totalPaid', + 'totalDeposit', + ]; + const csv = Papa.unparse({ + fields, + data: + distributions?.map((d) => [ + d.uid, + d.tokenOwned, + d.totalUnclaimedAirdrop || 0, + d.tokenClaimed, + d.lockedForSale, + d.sold, + d.totalBought, + d.refundedAmount, + d.totalPaid, + d.totalDeposit, + ]) || [], + }); + + download( + `data:text/csv;charset=utf-8${csv}`, + `soonaverse_${this.token?.symbol}_distribution.csv`, + ); + this.cd.markForCheck(); + }); + } +} diff --git a/src/app/components/token/components/token-info/token-info-description.module.ts b/src/app/components/token/components/token-info/token-info-description.module.ts new file mode 100644 index 0000000..f9b040d --- /dev/null +++ b/src/app/components/token/components/token-info/token-info-description.module.ts @@ -0,0 +1,15 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { TokenInfoDescriptionComponent } from './token-info-description.component'; + +@NgModule({ + declarations: [TokenInfoDescriptionComponent], + imports: [CommonModule, DescriptionModule, NzAvatarModule, IconModule, FormatTokenModule], + providers: [PercentPipe], + exports: [TokenInfoDescriptionComponent], +}) +export class TokenInfoDescriptionModule {} diff --git a/src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html b/src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html new file mode 100644 index 0000000..55d5735 --- /dev/null +++ b/src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html @@ -0,0 +1,192 @@ + + + + + +
    +
    + Price ({{ + unitsService.label(token?.mintingData?.network) + }}) +
    +
    + {{ + { value: token?.pricePerToken || 0 || 0, exponents: token?.decimals } + | formatToken : token?.mintingData?.network : false : false + | async + }} +
    +
    + +
    +
    + Price (USD) +
    +
    + + {{ + unitsService.getUsd(token?.pricePerToken, token?.mintingData?.network) + | async + | currency : 'USD' + | UsdBelowTwoDecimals + }} + + - +
    +
    + +
    + + +
    + Sale starts +
    +
    + {{ token?.saleStartDate?.toDate() | date : 'medium' }} +
    +
    + + +
    + Sale ends +
    +
    + {{ getEndDate().toDate() | date : 'medium' }} +
    +
    +
    + + + +
    + Cooldown period ends +
    +
    + {{ token?.coolDownEnd?.toDate() | date : 'medium' }} +
    +
    +
    +
    +
    diff --git a/src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.less b/src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.less new file mode 100644 index 0000000..6fb75c8 --- /dev/null +++ b/src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.less @@ -0,0 +1,13 @@ +:host { + @apply block; +} + +.ongoing-wrapper { + box-shadow: 0px 1px 4px #c4f8d0; + border: 2px solid #beefc9; +} + +.ending-wrapper { + box-shadow: 0px 1px 4px #f9ded2; + border: 2px solid #f9d8ca; +} diff --git a/src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.ts b/src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.ts new file mode 100644 index 0000000..5b97a37 --- /dev/null +++ b/src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.ts @@ -0,0 +1,127 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input, + OnDestroy, + OnInit, +} from '@angular/core'; +import { TokenApi } from '@api/token.api'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { Token, TokenStatus } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { first, Subscription } from 'rxjs'; +import { TokenCardType } from '../token-card/token-card.component'; + +@UntilDestroy() +@Component({ + selector: 'wen-token-launchpad-row', + templateUrl: './token-launchpad-row.component.html', + styleUrls: ['./token-launchpad-row.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenLaunchpadRowComponent implements OnInit, OnDestroy { + @Input() tokenId?: string; + public token?: Token; + public path = ROUTER_UTILS.config.token.root; + private subscriptions$: Subscription[] = []; + + constructor( + public previewImageService: PreviewImageService, + public helper: HelperService, + public deviceService: DeviceService, + public unitsService: UnitsService, + private tokenApi: TokenApi, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + if (this.tokenId) { + this.tokenApi + .listen(this.tokenId) + .pipe(first(), untilDestroyed(this)) + .subscribe((token) => { + if (token) { + this.token = token; + this.cd.markForCheck(); + } + }); + } + } + + public available(): boolean { + return ( + dayjs(this.token?.saleStartDate?.toDate()).isBefore(dayjs()) && + this.token?.status === TokenStatus.AVAILABLE + ); + } + + public saleNotStarted(): boolean { + return dayjs(this.token?.saleStartDate?.toDate()).isAfter(dayjs()); + } + + public getEndDate(): dayjs.Dayjs { + return dayjs(this.token?.saleStartDate?.toDate()).add(this.token?.saleLength || 0, 'ms'); + } + + public saleEnded(): boolean { + return this.getEndDate().isBefore(dayjs()); + } + + public isInCoolDown(): boolean { + return dayjs(this.token?.coolDownEnd?.toDate()).isAfter(dayjs()) && this.saleEnded(); + } + + public getPrc(): number { + const prc = + (this.token?.totalDeposit || 0) / + (this.token?.pricePerToken || 0) / + this.getPublicSaleSupply(); + return (prc > 1 ? 1 : prc) * 100; + } + + public getPublicSaleSupply(): number { + let sup = 0; + this.token?.allocations.forEach((b) => { + if (b.isPublicSale) { + sup = b.percentage / 100; + } + }); + + return (this.token?.totalSupply || 0) * sup; + } + + public getCardType(): TokenCardType | undefined { + const endDate = this.getEndDate(); + // 1 / 5 is close to ending. + let cardType; + if (endDate.isBefore(dayjs()) && dayjs(this.token?.coolDownEnd?.toDate()).isAfter(dayjs())) { + cardType = TokenCardType.ENDING; + } else if ( + dayjs(this.token?.saleStartDate?.toDate()).isBefore(dayjs()) && + endDate.isAfter(dayjs()) + ) { + cardType = TokenCardType.ONGOING; + } + return cardType; + } + + public get tokenCardTypes(): typeof TokenCardType { + return TokenCardType; + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/components/token/components/token-launchpad-row/token-launchpad-row.module.ts b/src/app/components/token/components/token-launchpad-row/token-launchpad-row.module.ts new file mode 100644 index 0000000..9e6be09 --- /dev/null +++ b/src/app/components/token/components/token-launchpad-row/token-launchpad-row.module.ts @@ -0,0 +1,29 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { UsdBelowTwoDecimalsModule } from '@core/pipes/usd-below-two-decimals/usd-below-two-decimals.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzProgressModule } from 'ng-zorro-antd/progress'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { TokenLaunchpadRowComponent } from './token-launchpad-row.component'; + +@NgModule({ + declarations: [TokenLaunchpadRowComponent], + imports: [ + CommonModule, + NzAvatarModule, + NzProgressModule, + NzButtonModule, + NzSkeletonModule, + FormatTokenModule, + UsdBelowTwoDecimalsModule, + NzTagModule, + RouterModule, + ], + providers: [PercentPipe], + exports: [TokenLaunchpadRowComponent], +}) +export class TokenLaunchpadRowModule {} diff --git a/src/app/components/token/components/token-mint-network/token-mint-network.component.html b/src/app/components/token/components/token-mint-network/token-mint-network.component.html new file mode 100644 index 0000000..707dd2b --- /dev/null +++ b/src/app/components/token/components/token-mint-network/token-mint-network.component.html @@ -0,0 +1,286 @@ + + + + +
    + +
    + +
    + + + + + + + + + + + +
    + + +
    +
    + +
    + Public sale will no longer be available after bringing token to a network. +
    +
    + +
    + +
    + Once minted all owners will have the option to migrate their tokens to the selected + network. +
    +
    + +
    + +
    + Note that the ownership and all undistributed tokens will be deposited to your member + profile. +
    +
    + +
    + + +
    {{ token?.name }}
    +
    ({{ token?.symbol }})
    +
    + +
    +
    + Tokens to migrate +
    +
    + {{ token?.totalSupply | formatToken : token?.uid : false : false | async }} + {{ token?.symbol }} +
    +
    + +
    +
    + Locked public tokens +
    +
    + {{ lockedPublicTokens | formatToken : token?.uid : false : false | async }} + {{ token?.symbol }} +
    +
    + + + + + + + + + +
    + Once you agree with the terms, the generated address will remain active during the whole + process. +
    +
    +
    + + +
    +
    + + +
    {{ token?.name }}
    +
    ({{ token?.symbol }})
    +
    + +
    +
    + Tokens to migrate +
    + +
    + {{ token?.totalSupply | formatToken : token?.uid : false : false | async }} + {{ token?.symbol }} +
    +
    + +
    +
    + Locked public tokens +
    + +
    + {{ lockedPublicTokens | formatToken : token?.uid : undefined : false | async }} + {{ token?.symbol }} +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    + + +
    {{ token?.name }}
    +
    ({{ token?.symbol }})
    +
    + + + +
    +
    Transaction history
    + +
    +
    +
    + {{ t.date | Time }} +
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    + + +
    +
    + +
    +
    Transaction complete. Congratulations.
    +
    + + +
    +
    +
    +
    diff --git a/src/app/components/token/components/token-mint-network/token-mint-network.component.less b/src/app/components/token/components/token-mint-network/token-mint-network.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/token/components/token-mint-network/token-mint-network.component.ts b/src/app/components/token/components/token-mint-network/token-mint-network.component.ts new file mode 100644 index 0000000..f82c0ef --- /dev/null +++ b/src/app/components/token/components/token-mint-network/token-mint-network.component.ts @@ -0,0 +1,364 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnInit, + Output, +} from '@angular/core'; +import { OrderApi } from '@api/order.api'; +import { TokenMintApi } from '@api/token_mint.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { TransactionStep } from '@components/transaction-steps/transaction-steps.component'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { removeItem, setItem, StorageItem } from '@core/utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { + Network, + Timestamp, + Token, + TokenDistribution, + Transaction, + TransactionType, + TRANSACTION_AUTO_EXPIRY_MS, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, interval, Subscription } from 'rxjs'; + +export enum StepType { + SELECT = 'Select', + TRANSACTION = 'Transaction', + WAIT = 'Wait', + CONFIRMED = 'Confirmed', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-token-mint-network', + templateUrl: './token-mint-network.component.html', + styleUrls: ['./token-mint-network.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenMintNetworkComponent implements OnInit { + @Input() currentStep = StepType.SELECT; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() token?: Token; + + @Input() + set distributions(value: TokenDistribution[] | undefined) { + this._distributions = value; + this.lockedPublicTokens = + this._distributions?.reduce( + (acc, cur) => acc + ((cur?.tokenOwned || 0) + (cur?.totalUnclaimedAirdrop || 0)), + 0, + ) || 0; + } + + get distributions(): TokenDistribution[] | undefined { + return this._distributions; + } + + @Output() wenOnClose = new EventEmitter(); + + public stepType = StepType; + public isCopied = false; + public selectedNetwork?: Network; + public agreeTermsConditions = false; + public targetAddress?: string = 'dummy_address'; + public targetAmount?: number = 1200000; + public lockedPublicTokens = 0; + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public invalidPayment = false; + public history: HistoryItem[] = []; + public receivedTransactions = false; + public steps: TransactionStep[] = [ + { label: $localize`Select network`, sequenceNum: 0 }, + { label: $localize`Make transaction`, sequenceNum: 1 }, + { label: $localize`Wait for confirmation`, sequenceNum: 2 }, + { label: $localize`Confirmed`, sequenceNum: 3 }, + ]; + private transSubscription?: Subscription; + private _isOpen = false; + private _distributions?: TokenDistribution[]; + + constructor( + public previewImageService: PreviewImageService, + public unitsService: UnitsService, + public transactionService: TransactionService, + public helper: HelperService, + private cd: ChangeDetectorRef, + private auth: AuthService, + private notification: NotificationService, + private tokenMintApi: TokenMintApi, + private orderApi: OrderApi, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + // It's expired. + removeItem(StorageItem.TokenMintTransaction); + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.WAIT; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`Payment received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + dayjs(), + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + dayjs(), + $localize`Transaction confirmed.`, + ); + this.receivedTransactions = true; + this.currentStep = StepType.CONFIRMED; + this.cd.markForCheck(); + }, 2000); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid amount received. Refunding transaction...`, + ); + } + + const markInvalid = () => { + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid transaction.You must gift storage deposit.`, + ); + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Invalid payment refunded.`, + val.payload?.walletReference?.chainReference, + ); + + // Let's go back to wait. With slight delay so they can see this. + markInvalid(); + } + + this.cd.markForCheck(); + }); + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + removeItem(StorageItem.TokenMintTransaction); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public get lockTime(): number { + return TRANSACTION_AUTO_EXPIRY_MS / 1000 / 60; + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.SELECT; + this.cd.markForCheck(); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public isExpired(val?: Transaction | null): boolean { + if (!val?.createdOn) { + return false; + } + + const expiresOn: dayjs.Dayjs = dayjs(val.createdOn.toDate()).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + return expiresOn.isBefore(dayjs()) && val.type === TransactionType.ORDER; + } + + public async proceedWithMint(): Promise { + if (!this.token || this.selectedNetwork === undefined || !this.agreeTermsConditions) { + return; + } + + const params: any = { + token: this.token.uid, + network: this.selectedNetwork, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.tokenMintApi.mintToken(sc), 'Order created.', finish) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + setItem(StorageItem.TokenMintTransaction, val.uid); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + }); + }); + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public getCurrentSequenceNum(): number { + switch (this.currentStep) { + case StepType.SELECT: + return 0; + case StepType.TRANSACTION: + return 1; + case StepType.WAIT: + return 2; + case StepType.CONFIRMED: + return 3; + default: + return 0; + } + } +} diff --git a/src/app/components/token/components/token-mint-network/token-mint-network.module.ts b/src/app/components/token/components/token-mint-network/token-mint-network.module.ts new file mode 100644 index 0000000..b39d152 --- /dev/null +++ b/src/app/components/token/components/token-mint-network/token-mint-network.module.ts @@ -0,0 +1,37 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { TransactionStepsModule } from '@components/transaction-steps/transaction-steps.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { TokenMintNetworkComponent } from './token-mint-network.component'; + +@NgModule({ + declarations: [TokenMintNetworkComponent], + imports: [ + CommonModule, + ModalDrawerModule, + NzButtonModule, + IconModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + NzAlertModule, + NetworkModule, + FormatTokenModule, + CountdownTimeModule, + TimeModule, + NzAvatarModule, + TransactionStepsModule, + ], + providers: [PercentPipe], + exports: [TokenMintNetworkComponent], +}) +export class TokenMintNetworkModule {} diff --git a/src/app/components/token/components/token-offer-mint/token-offer-mint.component.html b/src/app/components/token/components/token-offer-mint/token-offer-mint.component.html new file mode 100644 index 0000000..2c5bae0 --- /dev/null +++ b/src/app/components/token/components/token-offer-mint/token-offer-mint.component.html @@ -0,0 +1,323 @@ + + + + +
    + + +
    {{ token?.name }}
    +
    + ({{ (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol }}) +
    +
    + + +
    + Token ID +
    +
    {{ token?.mintingData?.tokenId }}
    +
    + +
    + Summary +
    + +
    +
    + Offered price per token +
    +
    +
    + {{ + price + | convertToken : token?.mintingData?.network + | async + | formatToken : token?.mintingData?.networkFormat || token?.mintingData?.network : true + | async + }} +
    + ~{{ + unitsService.getUsd( + price, + token?.mintingData?.networkFormat || token?.mintingData?.network + ) + | async + | currency : 'USD' + | UsdBelowTwoDecimals + }} +
    +
    + +
    +
    + You will receive +
    +
    +
    + {{ + getTargetAmount() + | formatToken : token?.mintingData?.networkFormat || token?.mintingData?.network : true + | async + }} +
    + ~{{ + unitsService.getUsd( + amount * price, + token?.mintingData?.networkFormat || token?.mintingData?.network + ) + | async + | currency : 'USD' + | UsdBelowTwoDecimals + }} +
    + Fee {{ exchangeFee }}% ( + {{ getFee() | formatToken : this.token?.mintingData?.network : true : true | async }}) +
    +
    + No FEES! +
    +
    +
    + +
    +
    + Token amount to send +
    +
    + {{ + { value: amount, exponents: token?.decimals } + | formatToken : token?.uid : true : false + | async + }} + {{ (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol }} +
    +
    + +
    + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + +
    + Once you agree with the terms, the generated address will remain active during the whole sale. +
    +
    +
    + + +
    +
    + +
    + {{ + expiryTicker$ | async | countdownTime + }} + + remaining to make the transfer. + Expired +
    +
    + + +
    + + + + +
    + +
    + Make sure the gift storage deposit options in your Firefly wallet is checked when sending + tokens. +
    +
    + + + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    +
    + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    + +
    +
    + +
    +
    Sell complete. Congratulations.
    +
    + +
    + +
    +
    diff --git a/src/app/components/token/components/token-offer-mint/token-offer-mint.component.less b/src/app/components/token/components/token-offer-mint/token-offer-mint.component.less new file mode 100644 index 0000000..06f39ee --- /dev/null +++ b/src/app/components/token/components/token-offer-mint/token-offer-mint.component.less @@ -0,0 +1,18 @@ +input { + @apply rounded-none; +} + +::ng-deep { + input::-webkit-inner-spin-button, + input::-webkit-outer-spin-button { + opacity: 0; + } +} + +.price-info-item { + @apply flex-1 border border-foregrounds-separator dark:border-foregrounds-separator-dark rounded-2xl py-3 flex items-center flex-col; +} + +.summary-item { + @apply mt-3 rounded-3xl flex items-center justify-between py-4 px-6 space-x-4; +} diff --git a/src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts b/src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts new file mode 100644 index 0000000..7d67fb0 --- /dev/null +++ b/src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts @@ -0,0 +1,420 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import { OrderApi } from '@api/order.api'; +import { TokenMarketApi } from '@api/token_market.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { StorageItem, getItem, setItem } from '@core/utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { + DEFAULT_NETWORK, + NETWORK_DETAIL, + Network, + SERVICE_MODULE_FEE_TOKEN_EXCHANGE, + Space, + TRANSACTION_AUTO_EXPIRY_MS, + Timestamp, + Token, + TokenTradeOrderType, + Transaction, + TransactionType, + getDefDecimalIfNotSet, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import bigDecimal from 'js-big-decimal'; +import { BehaviorSubject, Subscription, interval } from 'rxjs'; + +export enum StepType { + CONFIRM = 'Confirm', + TRANSACTION = 'Transaction', + COMPLETE = 'Complete', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-token-offer-mint', + templateUrl: './token-offer-mint.component.html', + styleUrls: ['./token-offer-mint.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenOfferMintComponent implements OnInit, OnDestroy { + @Input() set currentStep(value: StepType | undefined) { + this._currentStep = value; + if (this.currentStep === StepType.TRANSACTION && this.token?.uid) { + const acceptedTerms = (getItem(StorageItem.TokenOffersAcceptedTerms) || []) as string[]; + setItem(StorageItem.TokenOffersAcceptedTerms, [ + ...acceptedTerms.filter((r) => r !== this.token?.uid), + this.token.uid, + ]); + } + this.cd.markForCheck(); + } + + get currentStep(): StepType | undefined { + return this._currentStep; + } + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() token?: Token; + @Input() space?: Space; + @Input() price = 0; + @Input() amount = 0; + @Output() wenOnClose = new EventEmitter(); + + public agreeTermsConditions = false; + public agreeTokenTermsConditions = false; + public targetAddress?: string = ''; + public invalidPayment = false; + public targetAmount?: number; + public receivedTransactions = false; + public purchasedAmount = 0; + public history: HistoryItem[] = []; + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public isCopied = false; + private _isOpen = false; + private _currentStep?: StepType; + private transSubscription?: Subscription; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public helper: HelperService, + public unitsService: UnitsService, + public transactionService: TransactionService, + public auth: AuthService, + private notification: NotificationService, + private orderApi: OrderApi, + private tokenMarketApi: TokenMarketApi, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + // TODO remove empty if + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.TRANSACTION; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`Payment received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + val.createdOn, + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + val.createdOn, + $localize`Transaction confirmed.`, + ); + this.purchasedAmount = val.payload.amount; + this.receivedTransactions = true; + this.currentStep = StepType.COMPLETE; + this.cd.markForCheck(); + }, 2000); + } + + // Let's go back to wait. With slight delay so they can see this. + const markInvalid = () => { + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid amount received. Refunding transaction...`, + ); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid transaction.You must gift storage deposit.`, + ); + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference && + !val.ignoreWalletReason + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Invalid payment refunded.`, + val.payload?.walletReference?.chainReference, + ); + markInvalid(); + } + + this.cd.markForCheck(); + }); + + if (this.token?.uid) { + const acceptedTerms = getItem(StorageItem.TokenOffersAcceptedTerms) as string[]; + if (acceptedTerms && acceptedTerms.indexOf(this.token.uid) > -1) { + this.currentStep = StepType.TRANSACTION; + this.isOpen = false; + this.cd.markForCheck(); + + this.agreeTermsConditions = true; + this.agreeTokenTermsConditions = true; + // Hide while we're waiting. + this.proceedWithOffer((s: boolean) => { + if (s) { + this.isOpen = true; + this.cd.markForCheck(); + } else { + this.close(); + } + }).catch(() => { + this.close(); + }); + } else { + this.currentStep = StepType.CONFIRM; + } + this.cd.markForCheck(); + } + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.CONFIRM; + this.cd.markForCheck(); + } + + public async proceedWithOffer(cb?: any): Promise { + if (!this.token || !this.agreeTermsConditions || !this.agreeTokenTermsConditions) { + return; + } + + const params: any = { + symbol: this.token.symbol, + count: Number(this.amount * Math.pow(10, getDefDecimalIfNotSet(this.token?.decimals))), + price: Number(this.price), + type: TokenTradeOrderType.SELL, + }; + + const r = await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest( + this.tokenMarketApi.tradeToken(sc), + $localize`Offer order created.`, + (success: boolean) => { + cb && cb(success); + finish(); + }, + ) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + if (cb) { + cb && cb(true); + finish(); + } + }); + }); + + if (!r) { + this.close(); + } + } + + public getSymbolForNetwork(): Network { + return this.token?.symbol.toLowerCase(); + } + + public get stepType(): typeof StepType { + return StepType; + } + + public getTargetAmount(divideBy = false): number { + return Number( + bigDecimal[divideBy ? 'divide' : 'multiply']( + bigDecimal.multiply(Number(this.amount), Number(this.price)), + Math.pow( + 10, + getDefDecimalIfNotSet( + NETWORK_DETAIL[this.token?.mintingData?.network || DEFAULT_NETWORK].decimals, + ), + ), + 6, + ), + ); + } + + public get exchangeFee(): number { + return SERVICE_MODULE_FEE_TOKEN_EXCHANGE; + } + + public getFee(): number { + return Number( + bigDecimal.multiply( + bigDecimal.divide( + this.getTargetAmount(false), + NETWORK_DETAIL[this.token?.mintingData?.network || DEFAULT_NETWORK].divideBy, + 6, + ), + this.exchangeFee * 100 * 100, + ), + ); + } + + public ngOnDestroy(): void { + this.transSubscription?.unsubscribe(); + } +} diff --git a/src/app/components/token/components/token-offer-mint/token-offer-mint.module.ts b/src/app/components/token/components/token-offer-mint/token-offer-mint.module.ts new file mode 100644 index 0000000..2c6c279 --- /dev/null +++ b/src/app/components/token/components/token-offer-mint/token-offer-mint.module.ts @@ -0,0 +1,50 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { UsdBelowTwoDecimalsModule } from '@core/pipes/usd-below-two-decimals/usd-below-two-decimals.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { TokenOfferMintComponent } from './token-offer-mint.component'; + +@NgModule({ + declarations: [TokenOfferMintComponent], + imports: [ + CommonModule, + NzModalModule, + NzDrawerModule, + IconModule, + NzButtonModule, + NzCheckboxModule, + NzAvatarModule, + NzInputModule, + NetworkModule, + TimeModule, + FormsModule, + CountdownTimeModule, + UsdBelowTwoDecimalsModule, + NzAlertModule, + ReactiveFormsModule, + ModalDrawerModule, + FormatTokenModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + DescriptionModule, + ], + providers: [PercentPipe], + exports: [TokenOfferMintComponent], +}) +export class TokenOfferMintModule {} diff --git a/src/app/components/token/components/token-offer/token-offer.component.html b/src/app/components/token/components/token-offer/token-offer.component.html new file mode 100644 index 0000000..6dd55bf --- /dev/null +++ b/src/app/components/token/components/token-offer/token-offer.component.html @@ -0,0 +1,158 @@ + + + + +
    + + +
    {{ token?.name }}
    +
    {{ '(' + token?.symbol + ')' }}
    +
    + +
    + Token ID +
    +
    {{ token?.uid }}
    + +
    + Your Balance +
    +
    + {{ memberDistribution?.tokenOwned | formatToken : token?.uid : true : false | async }} + {{ token?.symbol }} +
    + +
    + Summary +
    + +
    +
    + Offered price per token +
    +
    +
    {{ price }} MIOTA
    + ~{{ unitsService.getUsd(price) | async | currency : 'USD' | UsdBelowTwoDecimals }} +
    +
    + +
    +
    + Offered amount of tokens +
    +
    + {{ + { value: amount, exponents: token?.decimals } + | formatToken : token?.uid : true : false + | async + }} + {{ token?.symbol }} +
    +
    + +
    +
    + You will receive +
    +
    +
    + {{ + { value: getTargetAmount(), exponents: token?.decimals } + | formatToken : token?.uid : true + | async + }} +
    + {{ + unitsService.getUsd( + getTargetAmount(), + token?.mintingData?.networkFormat || token?.mintingData?.network + ) + | async + | currency : 'USD' + | UsdBelowTwoDecimals + }} +
    + Fee {{ exchangeFee }}% ( + {{ getFee() | formatToken : this.token?.mintingData?.network : true : true | async }}) +
    +
    + No FEES! +
    +
    +
    + +
    + + + +
    +
    + + + + + + + + +
    + +
    +
    diff --git a/src/app/components/token/components/token-offer/token-offer.component.less b/src/app/components/token/components/token-offer/token-offer.component.less new file mode 100644 index 0000000..29f88ad --- /dev/null +++ b/src/app/components/token/components/token-offer/token-offer.component.less @@ -0,0 +1,18 @@ +input { + @apply rounded-none; +} + +::ng-deep { + input::-webkit-inner-spin-button, + input::-webkit-outer-spin-button { + opacity: 0; + } +} + +.price-info-item { + @apply flex-1 border border-foregrounds-separator dark:border-foregrounds-separator-dark rounded-2xl py-3 flex items-center flex-col; +} + +.summary-item { + @apply mt-3 rounded-3xl flex items-center justify-between py-4 px-6; +} diff --git a/src/app/components/token/components/token-offer/token-offer.component.ts b/src/app/components/token/components/token-offer/token-offer.component.ts new file mode 100644 index 0000000..7e3e6d0 --- /dev/null +++ b/src/app/components/token/components/token-offer/token-offer.component.ts @@ -0,0 +1,143 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { OrderApi } from '@api/order.api'; +import { TokenMarketApi } from '@api/token_market.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { + DEFAULT_NETWORK, + NETWORK_DETAIL, + SERVICE_MODULE_FEE_TOKEN_EXCHANGE, + Space, + Token, + TokenDistribution, + TokenTradeOrderType, + getDefDecimalIfNotSet, +} from '@soonaverse/interfaces'; +import bigDecimal from 'js-big-decimal'; + +export enum StepType { + CONFIRM = 'Confirm', +} + +@UntilDestroy() +@Component({ + selector: 'wen-token-offer', + templateUrl: './token-offer.component.html', + styleUrls: ['./token-offer.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenOfferComponent { + @Input() currentStep = StepType.CONFIRM; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() token?: Token; + @Input() memberDistribution?: TokenDistribution; + @Input() space?: Space; + @Input() price = 0; + @Input() amount = 0; + @Output() wenOnClose = new EventEmitter(); + + public agreeTermsConditions = false; + public agreeTokenTermsConditions = false; + public targetAddress?: string = ''; + public targetAmount?: number; + public isCopied = false; + private _isOpen = false; + + constructor( + public auth: AuthService, + public orderApi: OrderApi, + public tokenMarketApi: TokenMarketApi, + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public unitsService: UnitsService, + private notification: NotificationService, + private cd: ChangeDetectorRef, + ) {} + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.CONFIRM; + this.cd.markForCheck(); + } + + public get stepType(): typeof StepType { + return StepType; + } + + public async proceedWithOrder(): Promise { + if (!this.token || !this.agreeTermsConditions || !this.agreeTokenTermsConditions) { + return; + } + + const params: any = { + symbol: this.token.symbol, + count: Number(this.amount * Math.pow(10, getDefDecimalIfNotSet(this.token?.decimals))), + price: Number(this.price), + type: TokenTradeOrderType.SELL, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.tokenMarketApi.tradeToken(sc), $localize`Offer created.`, finish) + .subscribe(() => { + this.close(); + }); + }); + } + + public get exchangeFee(): number { + return SERVICE_MODULE_FEE_TOKEN_EXCHANGE; + } + + public getFee(): number { + return Number( + bigDecimal.multiply( + bigDecimal.divide( + this.getTargetAmount(false), + NETWORK_DETAIL[this.token?.mintingData?.network || DEFAULT_NETWORK].divideBy, + 6, + ), + this.exchangeFee * 100 * 100, + ), + ); + } + + public getTargetAmount(divideBy = false): number { + return Number( + bigDecimal[divideBy ? 'divide' : 'multiply']( + bigDecimal.multiply(Number(this.amount), Number(this.price)), + Math.pow( + 10, + getDefDecimalIfNotSet( + NETWORK_DETAIL[this.token?.mintingData?.network || DEFAULT_NETWORK].decimals, + ), + ), + 6, + ), + ); + } +} diff --git a/src/app/components/token/components/token-offer/token-offer.module.ts b/src/app/components/token/components/token-offer/token-offer.module.ts new file mode 100644 index 0000000..74dac83 --- /dev/null +++ b/src/app/components/token/components/token-offer/token-offer.module.ts @@ -0,0 +1,41 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { UsdBelowTwoDecimalsModule } from '@core/pipes/usd-below-two-decimals/usd-below-two-decimals.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { TokenOfferComponent } from './token-offer.component'; + +@NgModule({ + declarations: [TokenOfferComponent], + imports: [ + CommonModule, + NzModalModule, + NzDrawerModule, + IconModule, + NzButtonModule, + NzCheckboxModule, + NzAvatarModule, + NzInputModule, + FormatTokenModule, + FormsModule, + ReactiveFormsModule, + UsdBelowTwoDecimalsModule, + ModalDrawerModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + DescriptionModule, + ], + exports: [TokenOfferComponent], +}) +export class TokenOfferModule {} diff --git a/src/app/components/token/components/token-public-sale/token-public-sale.component.html b/src/app/components/token/components/token-public-sale/token-public-sale.component.html new file mode 100644 index 0000000..85b81d2 --- /dev/null +++ b/src/app/components/token/components/token-public-sale/token-public-sale.component.html @@ -0,0 +1,198 @@ + + + +
    Public sale info
    + + + + + + + + + + + + + {{ opt + ' days' }} + + + +
    + + Select token offering length (Default 2 days) +
    +
    + +
    + + {{ s.nzLabel }} +
    +
    +
    +
    + +
    Token allocation info
    + + + +
    Sale Setup
    + +
    + Enable Cooldown period +
    + + + + + +
    + Enable Cooldown with refund option. +
    +
    + + + + + + {{ opt + ' days' }} + + + +
    + + Select token cooldown length (Default 2 days) +
    +
    + +
    + + {{ s.nzLabel }} +
    +
    +
    +
    + + +
    + No Cooldown. Participants can’t refund. +
    +
    +
    +
    +
    + +
    + Enable Oversale +
    + + + + + +
    + No Oversale. Sale ends with 100% reached. +
    +
    + +
    + Sale continues after 100% reached +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/src/app/components/token/components/token-public-sale/token-public-sale.component.less b/src/app/components/token/components/token-public-sale/token-public-sale.component.less new file mode 100644 index 0000000..ed68b03 --- /dev/null +++ b/src/app/components/token/components/token-public-sale/token-public-sale.component.less @@ -0,0 +1,11 @@ +.wen-radio-group { + display: grid; + input { + width: 100px; + margin-left: 10px; + } +} + +.small-select { + @apply max-w-xs w-full !important; +} diff --git a/src/app/components/token/components/token-public-sale/token-public-sale.component.ts b/src/app/components/token/components/token-public-sale/token-public-sale.component.ts new file mode 100644 index 0000000..bfa35b6 --- /dev/null +++ b/src/app/components/token/components/token-public-sale/token-public-sale.component.ts @@ -0,0 +1,145 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DescriptionItemType } from '@components/description/description.component'; +import { NotificationService } from '@core/services/notification'; +import { UnitsService } from '@core/services/units'; +import { Token, TokenAllocation } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; + +@Component({ + selector: 'wen-token-public-sale', + templateUrl: './token-public-sale.component.html', + styleUrls: ['./token-public-sale.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenPublicSaleComponent { + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() token?: Token; + @Output() wenOnClose = new EventEmitter(); + + public startDateControl: FormControl = new FormControl('', Validators.required); + public offerLengthControl: FormControl = new FormControl(2, [ + Validators.required, + Validators.min(1), + ]); + public cooldownLengthControl: FormControl = new FormControl(2, [Validators.required]); + public enableCooldownControl: FormControl = new FormControl(true); + public autoProcessAt100PercentControl: FormControl = new FormControl(true); + public scheduleSaleForm: FormGroup; + public offeringLengthOptions = Array.from({ length: 3 }, (_, i) => i + 1); + public cooldownLengthOptions = Array.from({ length: 3 }, (_, i) => i + 1); + public allocationInfoLabels: string[] = [$localize`Price per token`, $localize`Public sale`]; + private _isOpen = false; + + constructor( + public unitsService: UnitsService, + private cd: ChangeDetectorRef, + private auth: AuthService, + private notification: NotificationService, + private tokenApi: TokenApi, + ) { + this.scheduleSaleForm = new FormGroup({ + startDate: this.startDateControl, + offerLength: this.offerLengthControl, + cooldownLength: this.cooldownLengthControl, + enableCooldown: this.enableCooldownControl, + autoProcessAt100Percent: this.autoProcessAt100PercentControl, + }); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public reset(): void { + this.isOpen = false; + this.cd.markForCheck(); + } + + public get descriptionItemTypes(): typeof DescriptionItemType { + return DescriptionItemType; + } + + public disabledStartDate(startValue: Date): boolean { + // Disable past dates & today + 1day startValue + if (startValue.getTime() < dayjs().toDate().getTime()) { + return true; + } + + return false; + } + + public publicAllocation(allocations?: TokenAllocation[]): TokenAllocation | undefined { + return allocations?.find((a) => a.isPublicSale); + } + + public percentageMarketCap(): number { + if (!this.token) { + return 0; + } + return ( + ((this.token?.pricePerToken * this.token?.totalSupply) / 100) * + Number(this.publicAllocation(this.token?.allocations)?.percentage || 0) + ); + } + + private validateForm(): boolean { + this.scheduleSaleForm.updateValueAndValidity(); + if (!this.scheduleSaleForm.valid) { + Object.values(this.scheduleSaleForm.controls).forEach((control) => { + if (control.invalid) { + control.markAsDirty(); + control.updateValueAndValidity({ onlySelf: true }); + } + }); + return false; + } + return true; + } + + public formatSubmitData(data: any): any { + const res: any = {}; + + res.token = this.token?.uid; + res.saleStartDate = data.startDate; + + res.saleLength = data.offerLength * 24 * 60 * 60 * 1000; + res.coolDownLength = data.enableCooldown ? data.cooldownLength * 24 * 60 * 60 * 1000 : 0; + res.autoProcessAt100Percent = data.autoProcessAt100Percent; + res.pricePerToken = this.token?.pricePerToken; + + return res; + } + + public async scheduleSale(): Promise { + if (!this.validateForm()) { + return; + } + await this.auth.sign(this.formatSubmitData(this.scheduleSaleForm.value), (sc, finish) => { + this.notification + .processRequest( + this.tokenApi.setTokenAvailableForSale(sc), + 'Scheduled public sale.', + finish, + ) + .subscribe(() => this.close()); + }); + } +} diff --git a/src/app/components/token/components/token-public-sale/token-public-sale.module.ts b/src/app/components/token/components/token-public-sale/token-public-sale.module.ts new file mode 100644 index 0000000..a969089 --- /dev/null +++ b/src/app/components/token/components/token-public-sale/token-public-sale.module.ts @@ -0,0 +1,35 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { RadioModule } from '@components/radio/radio.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzRadioModule } from 'ng-zorro-antd/radio'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { TokenPublicSaleComponent } from './token-public-sale.component'; + +@NgModule({ + declarations: [TokenPublicSaleComponent], + imports: [ + CommonModule, + ModalDrawerModule, + IconModule, + NzFormModule, + NzDatePickerModule, + NzSelectModule, + FormsModule, + ReactiveFormsModule, + DescriptionModule, + FormatTokenModule, + NzButtonModule, + RadioModule, + NzRadioModule, + ], + exports: [TokenPublicSaleComponent], +}) +export class TokenPublicSaleModule {} diff --git a/src/app/components/token/components/token-purchase/token-purchase.component.html b/src/app/components/token/components/token-purchase/token-purchase.component.html new file mode 100644 index 0000000..2b12eda --- /dev/null +++ b/src/app/components/token/components/token-purchase/token-purchase.component.html @@ -0,0 +1,334 @@ + + + + +
    + + +
    {{ token?.name }}
    +
    {{ token?.symbol }}
    +
    + +
    + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + +
    + + +
    + Once you agree with the terms, the generated address will remain active during the whole sale. +
    +
    +
    + + +
    + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + Enter how much you want to spend. Amount of tokens will be calculated. +
    + + + + + +
    +
    + +
    + {{ isAmountInput ? token?.symbol : unitsService.label() }} +
    +
    + +
    +
    + {{ + isAmountInput + ? ( + getResultAmount() + | convertToken : token?.mintingData?.network + | async + | formatToken : token?.mintingData?.network : false : false + | async + )?.toString() || undefined + : (getResultAmount() | formatToken : token?.uid : false : false | async) + }} +
    +
    + {{ isAmountInput ? unitsService.label() : token?.symbol }} +
    +
    + + +
    + + + + + + +
    + + + + + + + + + + + + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    +
    + + + + + + + +
    +
    +
    + Purchased tokens +
    +
    + {{ + (purchasedAmount / (token?.pricePerToken || 0) + | formatToken : token?.uid : false : false + | async) + + ' ' + + token?.symbol + }} +
    +
    +
    +
    + Price +
    +
    {{ purchasedAmount | formatToken | async }}
    +
    +
    + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    + +
    +
    + +
    +
    Transaction complete. Congratulations.
    +
    + +
    + +
    +
    diff --git a/src/app/components/token/components/token-purchase/token-purchase.component.less b/src/app/components/token/components/token-purchase/token-purchase.component.less new file mode 100644 index 0000000..df1a5dc --- /dev/null +++ b/src/app/components/token/components/token-purchase/token-purchase.component.less @@ -0,0 +1,10 @@ +input { + @apply rounded-none; +} + +::ng-deep { + input::-webkit-inner-spin-button, + input::-webkit-outer-spin-button { + opacity: 0; + } +} diff --git a/src/app/components/token/components/token-purchase/token-purchase.component.ts b/src/app/components/token/components/token-purchase/token-purchase.component.ts new file mode 100644 index 0000000..d0f8028 --- /dev/null +++ b/src/app/components/token/components/token-purchase/token-purchase.component.ts @@ -0,0 +1,359 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { Router } from '@angular/router'; +import { OrderApi } from '@api/order.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DescriptionItemType } from '@components/description/description.component'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { + DEFAULT_NETWORK, + NETWORK_DETAIL, + Network, + Space, + Timestamp, + Token, + Transaction, + TransactionType, + getDefDecimalIfNotSet, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, Subscription, filter } from 'rxjs'; + +export enum StepType { + CONFIRM = 'Confirm', + TRANSACTION = 'Transaction', + WAIT = 'Wait', + COMPLETE = 'Complete', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-token-purchase', + templateUrl: './token-purchase.component.html', + styleUrls: ['./token-purchase.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenPurchaseComponent implements OnInit, OnDestroy { + @Input() currentStep = StepType.CONFIRM; + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() token?: Token; + @Input() space?: Space; + @Output() wenOnClose = new EventEmitter(); + + public amountControl: FormControl = new FormControl(null); + public iotaControl: FormControl = new FormControl(null); + public isAmountInput = true; + public agreeTermsConditions = false; + public agreeTokenTermsConditions = false; + public targetAddress?: string = ''; + public invalidPayment = false; + public receivedTransactions = false; + public purchasedAmount = 0; + public history: HistoryItem[] = []; + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public isCopied = false; + private _isOpen = false; + private transSubscription?: Subscription; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public unitsService: UnitsService, + public transactionService: TransactionService, + private auth: AuthService, + private notification: NotificationService, + private orderApi: OrderApi, + private router: Router, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const startFrom = dayjs(); + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + const historical = dayjs(val?.createdOn?.toDate()).isBefore(startFrom); + + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + // Nothing... + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = historical ? StepType.TRANSACTION : StepType.WAIT; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`Payment received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + val.createdOn, + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + val.createdOn, + $localize`Transaction confirmed.`, + ); + if (!historical) { + this.purchasedAmount = val.payload.amount; + this.receivedTransactions = true; + this.currentStep = StepType.COMPLETE; + } + this.cd.markForCheck(); + }, 2000); + } + + const markInvalid = () => { + setTimeout(() => { + if (!historical) { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + } + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload.invalidPayment === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid amount received. Refunding transaction...`, + ); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload.invalidPayment === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid transaction.You must gift storage deposit.`, + ); + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Invalid payment refunded.`, + val.payload?.walletReference?.chainReference, + ); + + // Let's go back to wait. With slight delay so they can see this. + markInvalid(); + } + + this.cd.markForCheck(); + }); + + this.amountControl.valueChanges + .pipe( + filter(() => this.isAmountInput), + untilDestroyed(this), + ) + .subscribe((val: string) => { + this.iotaControl.setValue((Number(val) * (this.token?.pricePerToken || 0)).toFixed(2)); + this.cd.markForCheck(); + }); + + this.iotaControl.valueChanges + .pipe( + filter(() => !this.isAmountInput), + untilDestroyed(this), + ) + .subscribe((val: string) => { + this.amountControl.setValue((Number(val) / (this.token?.pricePerToken || 0)).toFixed(2)); + this.cd.markForCheck(); + }); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public goToToken(): void { + this.router.navigate([ + '/', + ROUTER_UTILS.config.member.root, + this.auth.member$.value?.uid, + ROUTER_UTILS.config.member.tokens, + ]); + this.reset(); + this.wenOnClose.next(); + } + + public getEndDate(): dayjs.Dayjs { + return dayjs(this.token?.saleStartDate?.toDate()).add(this.token?.saleLength || 0, 'ms'); + } + + public get descriptionItemTypes(): typeof DescriptionItemType { + return DescriptionItemType; + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.CONFIRM; + this.cd.markForCheck(); + } + + public get stepType(): typeof StepType { + return StepType; + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public async proceedWithOrder(): Promise { + if (!this.token || !this.agreeTermsConditions) { + return; + } + + const params: any = { + token: this.token.uid, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.orderApi.orderToken(sc), $localize`Order created.`, finish) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + }); + }); + } + + public getDecimalsPerNetwork(v?: Network): number { + return NETWORK_DETAIL[v || DEFAULT_NETWORK].divideBy; + } + + public getTargetAmount(): number { + return this.amountControl.value * (this.token?.pricePerToken || 0); + } + + public getResultAmount(): number { + return this.isAmountInput + ? this.amountControl.value * (this.token?.pricePerToken || 0) + : this.amountControl.value * Math.pow(10, getDefDecimalIfNotSet(this.token?.decimals)); + } + + public ngOnDestroy(): void { + this.transSubscription?.unsubscribe(); + } +} diff --git a/src/app/components/token/components/token-purchase/token-purchase.module.ts b/src/app/components/token/components/token-purchase/token-purchase.module.ts new file mode 100644 index 0000000..b140b57 --- /dev/null +++ b/src/app/components/token/components/token-purchase/token-purchase.module.ts @@ -0,0 +1,45 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { RelativeTimeModule } from '@core/pipes/relative-time/relative-time.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { TokenPurchaseComponent } from './token-purchase.component'; + +@NgModule({ + declarations: [TokenPurchaseComponent], + imports: [ + CommonModule, + NzModalModule, + NzDrawerModule, + IconModule, + NetworkModule, + NzButtonModule, + NzCheckboxModule, + NzAvatarModule, + RelativeTimeModule, + TimeModule, + NzInputModule, + FormsModule, + ReactiveFormsModule, + FormatTokenModule, + DescriptionModule, + ModalDrawerModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + ], + exports: [TokenPurchaseComponent], +}) +export class TokenPurchaseModule {} diff --git a/src/app/components/token/components/token-refund/token-refund.component.html b/src/app/components/token/components/token-refund/token-refund.component.html new file mode 100644 index 0000000..4cc0e46 --- /dev/null +++ b/src/app/components/token/components/token-refund/token-refund.component.html @@ -0,0 +1,85 @@ + + + + +
    + + +
    {{ token?.name }}
    +
    ({{ token?.symbol }})
    +
    + +
    + +
    +
    Cooldown period ends
    +
    {{ token?.coolDownEnd || null | relativeTime : 'from' }}
    +
    +
    + +
    +
    +
    Mi
    + +
    + +
    +
    + {{ + formatTokenBest(amountControl.value / (token?.pricePerToken || 0)) + ' ' + token?.symbol + }} +
    +
    +
    + + + + + + + +
    + +
    +
    diff --git a/src/app/components/token/components/token-refund/token-refund.component.less b/src/app/components/token/components/token-refund/token-refund.component.less new file mode 100644 index 0000000..d28ac5b --- /dev/null +++ b/src/app/components/token/components/token-refund/token-refund.component.less @@ -0,0 +1,3 @@ +input { + @apply rounded-none; +} diff --git a/src/app/components/token/components/token-refund/token-refund.component.ts b/src/app/components/token/components/token-refund/token-refund.component.ts new file mode 100644 index 0000000..34f9c6d --- /dev/null +++ b/src/app/components/token/components/token-refund/token-refund.component.ts @@ -0,0 +1,85 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { Token, TokenDistribution, getDefDecimalIfNotSet } from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-token-refund', + templateUrl: './token-refund.component.html', + styleUrls: ['./token-refund.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenRefundComponent { + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() token?: Token | null; + @Input() memberDistribution?: TokenDistribution | null; + @Output() wenOnClose = new EventEmitter(); + + public amountControl: FormControl = new FormControl(null); + public agreeTermsConditions = false; + public agreeTokenTermsConditions = false; + private _isOpen = false; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + private tokenApi: TokenApi, + private cd: ChangeDetectorRef, + private auth: AuthService, + private notification: NotificationService, + ) {} + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public reset(): void { + this.isOpen = false; + this.cd.markForCheck(); + } + + public getTitle(): string { + return $localize`Refund token`; + } + + public formatTokenBest(amount?: number | null): string { + if (!amount) { + return '0'; + } + + return amount.toFixed(2); + } + + public async confirm(): Promise { + const data = { + token: this.token?.uid, + amount: + Number(this.amountControl.value) * + Math.pow(10, getDefDecimalIfNotSet(this.token?.decimals)), + }; + await this.auth.sign(data, (sc, finish) => { + this.notification + .processRequest(this.tokenApi.creditToken(sc), 'Token successfully refunded.', finish) + .subscribe(() => this.close()); + }); + } +} diff --git a/src/app/components/token/components/token-refund/token-refund.module.ts b/src/app/components/token/components/token-refund/token-refund.module.ts new file mode 100644 index 0000000..0c4a309 --- /dev/null +++ b/src/app/components/token/components/token-refund/token-refund.module.ts @@ -0,0 +1,35 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { RelativeTimeModule } from '@core/pipes/relative-time/relative-time.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { TokenRefundComponent } from './token-refund.component'; + +@NgModule({ + declarations: [TokenRefundComponent], + imports: [ + CommonModule, + NzModalModule, + NzDrawerModule, + IconModule, + NzButtonModule, + NzCheckboxModule, + NzAvatarModule, + NzInputModule, + FormsModule, + ReactiveFormsModule, + ModalDrawerModule, + TermsAndConditionsModule, + RelativeTimeModule, + ], + exports: [TokenRefundComponent], +}) +export class TokenRefundModule {} diff --git a/src/app/components/token/components/token-row/token-row.component.html b/src/app/components/token/components/token-row/token-row.component.html new file mode 100644 index 0000000..c20bc6c --- /dev/null +++ b/src/app/components/token/components/token-row/token-row.component.html @@ -0,0 +1,259 @@ +
    + +
    + + +
    +
    + {{ helper.getPair(token) }} +
    +
    +
    + +
    + +
    +
    + Initial Price ({{ + unitsService.label(token?.mintingData?.networkFormat || token?.mintingData?.network) + }}) +
    +
    + Avg. Price ({{ + unitsService.label(token?.mintingData?.networkFormat || token?.mintingData?.network) + }}) +
    +
    + {{ + { + value: (listenAvgPrice$ | async) || (!tradable() ? token?.pricePerToken : 0) || 0 || 0, + exponents: token?.decimals + } + | formatToken : token?.uid : false : false + | async + }} +
    +
    +
    + + +
    + Sale starts +
    +
    + {{ token?.saleStartDate?.toDate() | date : 'medium' }} +
    +
    + + +
    + Sale ends +
    +
    + {{ getEndDate().toDate() | date : 'medium' }} +
    +
    +
    + + + +
    + Cooldown period ends +
    +
    + {{ token?.coolDownEnd?.toDate() | date : 'medium' }} +
    +
    +
    +
    + +
    + +
    + Change (24h) +
    +
    + {{ (listenChangePrice24h$ | async)?.toString() | percent : '1.0-2' }} +
    +
    + + +
    +
    + {{ getPrc() | number : '1.2-2' }}% +
    + +
    +
    +
    +
    + +
    + +
    + Volume 24h ({{ + (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol + }}) +
    +
    + {{ listenVolume24h$ | async | formatToken : undefined : true : false | async }} +
    +
    +
    + +
    +
    + Market Cap (USD) }}) +
    +
    + + {{ + unitsService.getUsd( + ((this.token?.totalSupply || 0) * ((listenAvgPrice$ | async) || 0)) / 1000 / 1000, + token?.mintingData?.networkFormat || token?.mintingData?.network + ) + | async + | currency : 'USD' + | UsdBelowTwoDecimals + }} + + - + + {{ + (this.token?.totalSupply || 0) * ((listenAvgPrice$ | async) || 0) + | formatToken : token?.uid : false : false : 0 + | async + | unknownIfZero + }} +
    +
    + + +
    + + +
    + +
    + + Launching soon + + + In Cooldown + + + + + +
    +
    +
    diff --git a/src/app/components/token/components/token-row/token-row.component.less b/src/app/components/token/components/token-row/token-row.component.less new file mode 100644 index 0000000..94ec6ca --- /dev/null +++ b/src/app/components/token/components/token-row/token-row.component.less @@ -0,0 +1,5 @@ +:host ::ng-deep { + .ant-progress-inner { + @apply bg-foregrounds-tertiary dark:bg-foregrounds-tertiary-dark; + } +} diff --git a/src/app/components/token/components/token-row/token-row.component.ts b/src/app/components/token/components/token-row/token-row.component.ts new file mode 100644 index 0000000..03c2d95 --- /dev/null +++ b/src/app/components/token/components/token-row/token-row.component.ts @@ -0,0 +1,180 @@ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import { TokenWithMemberDistribution } from '@api/member.api'; +import { TokenMarketApi } from '@api/token_market.api'; +import { TokenPurchaseApi } from '@api/token_purchase.api'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { Token, TokenStatus } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, Subscription } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-token-row', + templateUrl: './token-row.component.html', + styleUrls: ['./token-row.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenRowComponent implements OnInit, OnDestroy { + @Input() token?: TokenWithMemberDistribution | Token; + @Input() isOwner?: boolean; + @Output() wenOnClaim = new EventEmitter(); + @Output() wenOnRefund = new EventEmitter(); + public path = ROUTER_UTILS.config.token.root; + public tradePath = ROUTER_UTILS.config.token.trade; + public listenAvgPrice$: BehaviorSubject = new BehaviorSubject< + number | undefined + >(undefined); + public listenAvgPrice7d$: BehaviorSubject = new BehaviorSubject< + number | undefined + >(undefined); + public listenVolume24h$: BehaviorSubject = new BehaviorSubject< + number | undefined + >(undefined); + public listenVolume7d$: BehaviorSubject = new BehaviorSubject< + number | undefined + >(undefined); + public listenChangePrice24h$: BehaviorSubject = new BehaviorSubject< + number | undefined + >(undefined); + private subscriptions$: Subscription[] = []; + + constructor( + public previewImageService: PreviewImageService, + public helper: HelperService, + public deviceService: DeviceService, + public unitsService: UnitsService, + private tokenPurchaseApi: TokenPurchaseApi, + private tokenMarketApi: TokenMarketApi, + ) {} + + public ngOnInit(): void { + if (this.token?.uid) { + this.listenToStats(this.token.uid); + } + } + + private listenToStats(tokenId: string): void { + // TODO Add pagging. + this.subscriptions$.push( + this.tokenMarketApi + .listenAvgPrice(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenAvgPrice$), + ); + this.subscriptions$.push( + this.tokenPurchaseApi + .listenAvgPrice7d(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenAvgPrice7d$), + ); + this.subscriptions$.push( + this.tokenPurchaseApi + .listenVolume24h(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenVolume24h$), + ); + this.subscriptions$.push( + this.tokenPurchaseApi + .listenVolume7d(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenVolume7d$), + ); + this.subscriptions$.push( + this.tokenPurchaseApi + .listenChangePrice24h(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenChangePrice24h$), + ); + } + + public available(): boolean { + return ( + dayjs(this.token?.saleStartDate?.toDate()).isBefore(dayjs()) && + this.token?.status === TokenStatus.AVAILABLE + ); + } + + public saleNotStarted(): boolean { + return dayjs(this.token?.saleStartDate?.toDate()).isAfter(dayjs()); + } + + public getEndDate(): dayjs.Dayjs { + return dayjs(this.token?.saleStartDate?.toDate()).add(this.token?.saleLength || 0, 'ms'); + } + + public saleEnded(): boolean { + return this.getEndDate().isBefore(dayjs()); + } + + public isInCoolDown(): boolean { + return dayjs(this.token?.coolDownEnd?.toDate()).isAfter(dayjs()) && this.saleEnded(); + } + + public tradable(): boolean { + return ( + this.token?.status === TokenStatus.PRE_MINTED || + this.token?.status === TokenStatus.MINTED || + this.token?.status === TokenStatus.BASE + ); + } + + public getPublicSaleSupply(): number { + let sup = 0; + this.token?.allocations.forEach((b) => { + if (b.isPublicSale) { + sup = b.percentage / 100; + } + }); + + return (this.token?.totalSupply || 0) * sup; + } + + public getPrc(): number { + const prc = + (this.token?.totalDeposit || 0) / + (this.token?.pricePerToken || 0) / + this.getPublicSaleSupply(); + return (prc > 1 ? 1 : prc) * 100; + } + + public castAsTokenWithMemberDistribution( + token: Token | TokenWithMemberDistribution, + ): TokenWithMemberDistribution { + return token as TokenWithMemberDistribution; + } + + public claim($event: MouseEvent, token: TokenWithMemberDistribution): void { + $event.stopPropagation(); + $event.preventDefault(); + this.wenOnClaim.emit(token); + } + + public refund($event: MouseEvent, token: TokenWithMemberDistribution): void { + $event.stopPropagation(); + $event.preventDefault(); + this.wenOnRefund.emit(token); + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/components/token/components/token-row/token-row.module.ts b/src/app/components/token/components/token-row/token-row.module.ts new file mode 100644 index 0000000..1383a86 --- /dev/null +++ b/src/app/components/token/components/token-row/token-row.module.ts @@ -0,0 +1,31 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { IconModule } from '@components/icon/icon.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { UnknownIfZeroModule } from '@core/pipes/unknown-if-zero/unknown-if-zero.module'; +import { UsdBelowTwoDecimalsModule } from '@core/pipes/usd-below-two-decimals/usd-below-two-decimals.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzProgressModule } from 'ng-zorro-antd/progress'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { TokenRowComponent } from './token-row.component'; + +@NgModule({ + declarations: [TokenRowComponent], + imports: [ + CommonModule, + NzAvatarModule, + NzProgressModule, + NzTagModule, + IconModule, + NzButtonModule, + RouterModule, + FormatTokenModule, + UsdBelowTwoDecimalsModule, + UnknownIfZeroModule, + ], + providers: [PercentPipe], + exports: [TokenRowComponent], +}) +export class TokenRowModule {} diff --git a/src/app/components/token/components/token-stake/token-stake.component.html b/src/app/components/token/components/token-stake/token-stake.component.html new file mode 100644 index 0000000..0093a33 --- /dev/null +++ b/src/app/components/token/components/token-stake/token-stake.component.html @@ -0,0 +1,382 @@ + + + + +

    + Select or define the amount you want to stake and the period for how long you want to lock + it. + + + Since you are a guardian you can also + perform static stake. + +

    + +
    + + + + + + + + + + + +
    +
    + + + + +
      +
    • - Choose an amount and for how long you’d like to lock it.
    • +
    • + - Your funds stay at your wallet, but you will not be able to use them during the staking + period. +
    • +
    • + - You will get staked points based on your input. +
    • +
    • + - The more {{ token?.symbol | uppercase }} you stake, the more rewards you get. +
    • +
    • + - See Staking reward page for more info + here. +
    • +
    +
    + + +
    + +
    How it works
    +
    +
    + +
    + +
    +
    +
    + +
    +
    +
    + How much {{ token?.symbol | uppercase }} you want to stake? +
    +
    + +
    +
    + + +
    + {{ token?.symbol }} +
    +
    +
    +
    +
    + +
    + + + +
    + +
    +
    + For how long you want to stake? +
    + + + +
    + +
    +
    +
    Rewards Multiplier
    +
    + {{ multiplierControl.value | number : '1.0-2' }}x + - + + +
    +
    +
    + +
    +
    +
    + Staking Value + +
    +
    + {{ stakeControl.value }} +
    +
    +
    + +
    +
    +
    You will earn
    +
    VIP LEVEL {{ levelControl.value }}
    +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    + Total staked +
    +
    + {{ + { value: amountControl.value, exponents: token?.decimals } + | formatToken : token?.uid : false : false + | async + }} +
    +
    +
    + +
    + +
    + {{ + expiryTicker$ | async | countdownTime + }} + + remaining to make the transfer. + Expired +
    +
    + + + + + + + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    +
    + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    + +
    +
    + +
    +
    Stake complete. Congratulations.
    +
    + +
    + +
    +
    diff --git a/src/app/components/token/components/token-stake/token-stake.component.less b/src/app/components/token/components/token-stake/token-stake.component.less new file mode 100644 index 0000000..268c5ff --- /dev/null +++ b/src/app/components/token/components/token-stake/token-stake.component.less @@ -0,0 +1,10 @@ +::ng-deep { + input::-webkit-inner-spin-button, + input::-webkit-outer-spin-button { + opacity: 0; + } +} + +.info-item { + @apply flex items-center justify-between flex-1 w-full px-6 py-2 mt-2 rounded-3xl min-h-14; +} diff --git a/src/app/components/token/components/token-stake/token-stake.component.ts b/src/app/components/token/components/token-stake/token-stake.component.ts new file mode 100644 index 0000000..5a93f55 --- /dev/null +++ b/src/app/components/token/components/token-stake/token-stake.component.ts @@ -0,0 +1,428 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import { FormControl, Validators } from '@angular/forms'; +import { OrderApi } from '@api/order.api'; +import { StakeRewardApi } from '@api/stake_reward'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { + StorageItem, + getItem, + getTokenStakeItem, + removeStakeTokenItem, + setItem, + setTokenStakeItem, +} from '@core/utils'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { + MAX_WEEKS_TO_STAKE, + MIN_WEEKS_TO_STAKE, + SOON_TOKEN, + SOON_TOKEN_TEST, + StakeReward, + StakeType, + TRANSACTION_AUTO_EXPIRY_MS, + Timestamp, + Token, + TokenStats, + Transaction, + TransactionType, + calcStakedMultiplier, + getDefDecimalIfNotSet, + tiers, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, Subscription, interval, merge } from 'rxjs'; + +export enum StepType { + CONFIRM = 'Confirm', + TRANSACTION = 'Transaction', + COMPLETE = 'Complete', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-token-stake', + templateUrl: './token-stake.component.html', + styleUrls: ['./token-stake.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenStakeComponent implements OnInit, OnDestroy { + @Input() currentStep = StepType.CONFIRM; + @Input() set isOpen(value: boolean) { + this._isOpen = value; + if ( + value && + (this.auth.memberSoonDistribution$.value?.stakes?.[StakeType.DYNAMIC]?.value || 0) > 0 + ) { + this.setCollapsed(false); + } + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() staticStakeEnabled?: boolean; + @Input() token?: Token; + @Input() tokenStats?: TokenStats | null; + @Input() rewards?: StakeReward[] | null; + @Input() set amount(value: number | undefined) { + if (value) { + this.amountControl.setValue(value); + } + } + @Input() set weeks(value: number) { + this.weekControl.setValue(value); + } + @Output() wenOnClose = new EventEmitter(); + + public targetAddress?: string = ''; + public invalidPayment = false; + public staticStake = false; + public targetAmount?: number; + public receivedTransactions = false; + public weeksOptions = Array.from({ length: 52 }, (_, i) => i + 1); + public purchasedAmount = 0; + public amountControl: FormControl = new FormControl(null, [ + Validators.required, + Validators.min(1), + ]); + public weekControl: FormControl = new FormControl(1, [ + Validators.required, + Validators.min(MIN_WEEKS_TO_STAKE), + Validators.max(MAX_WEEKS_TO_STAKE), + ]); + + public stakeControl: FormControl = new FormControl({ value: 0, disabled: true }); + public multiplierControl: FormControl = new FormControl({ value: 0, disabled: true }); + public earnControl: FormControl = new FormControl({ value: 0, disabled: true }); + public levelControl: FormControl = new FormControl({ value: 0, disabled: true }); + public history: HistoryItem[] = []; + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public isCopied = false; + private _isOpen = false; + private transSubscription?: Subscription; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public helper: HelperService, + public unitsService: UnitsService, + public transactionService: TransactionService, + private auth: AuthService, + private notification: NotificationService, + private orderApi: OrderApi, + private tokenApi: TokenApi, + private stakeRewardApi: StakeRewardApi, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + merge(this.amountControl.valueChanges, this.weekControl.valueChanges) + .pipe(untilDestroyed(this)) + .subscribe(() => { + if ((this.amountControl.value || 0) > 0 && (this.weekControl.value || 0) > 0) { + const val = + calcStakedMultiplier(this.weekControl.value) * (this.amountControl.value || 0); + this.stakeControl.setValue(val.toFixed(2)); + const newTotal = + (this.auth.memberSoonDistribution$.value?.stakes?.[StakeType.DYNAMIC]?.value || 0) + + Math.pow(10, getDefDecimalIfNotSet(this.token?.decimals)) * val; + let l = 0; + tiers.forEach((a) => { + if (newTotal >= a) { + l++; + } + }); + + if (l > tiers.length - 1) { + l = tiers.length - 1; + } + + this.levelControl.setValue(l); + this.multiplierControl.setValue(calcStakedMultiplier(this.weekControl.value)); + if (this.tokenStats && this.rewards) { + this.earnControl.setValue( + this.stakeRewardApi.calcApy( + this.tokenStats, + this.stakeControl.value * Math.pow(10, getDefDecimalIfNotSet(this.token?.decimals)), + this.rewards, + ), + ); + } + this.cd.markForCheck(); + } else { + this.stakeControl.setValue(0); + this.multiplierControl.setValue(0); + this.earnControl.setValue(0); + } + }); + + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + this.token && removeStakeTokenItem(this.token.uid); + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.TRANSACTION; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + $localize`Payment received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + val.createdOn, + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + val.createdOn, + $localize`Transaction confirmed.`, + ); + this.purchasedAmount = val.payload.amount; + this.receivedTransactions = true; + this.currentStep = StepType.COMPLETE; + this.cd.markForCheck(); + }, 2000); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid amount received. Refunding transaction...`, + ); + } + + const markInvalid = () => { + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid transaction.You must gift storage deposit.`, + ); + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Invalid payment refunded.`, + val.payload?.walletReference?.chainReference, + ); + + // Let's go back to wait. With slight delay so they can see this. + markInvalid(); + } + + this.amountControl.setValue(this.amountControl.value); + this.cd.markForCheck(); + }); + + if (this.token && getTokenStakeItem(this.token.uid)) { + this.transSubscription = this.orderApi + .listen(getTokenStakeItem(this.token.uid)) + .subscribe(this.transaction$); + } + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + this.token && removeStakeTokenItem(this.token.uid); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public isSoonToken(): boolean { + return this.token?.uid === (environment.production ? SOON_TOKEN : SOON_TOKEN_TEST); + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.CONFIRM; + this.cd.markForCheck(); + } + + public isInfoCollapsed(): boolean { + return getItem(StorageItem.StakingDetails) === false ? false : true; + } + + public setCollapsed(event: any): void { + setItem(StorageItem.StakingDetails, event); + } + + public async stakeToken(): Promise { + if (!this.token) { + return; + } + + const params: any = { + symbol: this.token.symbol, + type: this.staticStake ? StakeType.STATIC : StakeType.DYNAMIC, + weeks: this.weekControl.value, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.tokenApi.depositStake(sc), $localize`Token stake submitted.`, finish) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + this.token && setTokenStakeItem(this.token.uid, val.uid); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + }); + }); + } + + public get stepType(): typeof StepType { + return StepType; + } + + public ngOnDestroy(): void { + this.transSubscription?.unsubscribe(); + } +} diff --git a/src/app/components/token/components/token-stake/token-stake.module.ts b/src/app/components/token/components/token-stake/token-stake.module.ts new file mode 100644 index 0000000..55bd57b --- /dev/null +++ b/src/app/components/token/components/token-stake/token-stake.module.ts @@ -0,0 +1,60 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { RelativeTimeModule } from '@core/pipes/relative-time/relative-time.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzCollapseModule } from 'ng-zorro-antd/collapse'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzInputNumberModule } from 'ng-zorro-antd/input-number'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { TokenStakeComponent } from './token-stake.component'; + +@NgModule({ + declarations: [TokenStakeComponent], + imports: [ + CommonModule, + NzModalModule, + NzDrawerModule, + IconModule, + NzButtonModule, + NzCheckboxModule, + NzAvatarModule, + NzInputModule, + NzInputNumberModule, + TimeModule, + NzSelectModule, + NzAlertModule, + NetworkModule, + NzCollapseModule, + NzTagModule, + FormsModule, + FormatTokenModule, + ReactiveFormsModule, + NzToolTipModule, + ModalDrawerModule, + WalletDeeplinkModule, + TermsAndConditionsModule, + CountdownTimeModule, + DescriptionModule, + RelativeTimeModule, + ], + providers: [PercentPipe], + exports: [TokenStakeComponent], +}) +export class TokenStakeModule {} diff --git a/src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html b/src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html new file mode 100644 index 0000000..f72e974 --- /dev/null +++ b/src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html @@ -0,0 +1,352 @@ + + + + +
    + + +
    {{ token?.name }}
    +
    + ({{ (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol }}) +
    +
    + +
    +
    + Traded amount +
    + +
    + {{ + tradeDetailOrder?.count || tradeDetailPurchases[0].count + | formatToken : token?.uid : true : false + | async + }} + {{ (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol }} +
    +
    +
    +
    + Price per token +
    + +
    +
    + {{ + { + value: tradeDetailOrder?.price || tradeDetailPurchases[0].price || 0, + exponents: token?.decimals + } + | formatToken : token?.uid : true + | async + }} +
    + ~{{ + unitsService.getUsd( + tradeDetailOrder?.price || tradeDetailPurchases[0].price || 0, + token?.mintingData?.networkFormat || token?.mintingData?.network + ) + | async + | currency : 'USD' + | UsdBelowTwoDecimals + }} +
    +
    +
    +
    + Date and Time +
    + +
    + {{ + (tradeDetailOrder?.createdOn || tradeDetailPurchases[0].createdOn)?.toDate() + | date : 'medium' + }} +
    +
    +
    +
    + Fullfilled +
    + +
    {{ helper.getTradeOrderStatus(tradeDetailOrder) }}
    +
    + + + + + Date + Amount + State + + + + + + + + {{ (billPaymentTransactions$[i] | async)?.createdOn?.toDate() | date : 'medium' }} + + + {{ + (billPaymentTransactions$[i] | async)?.payload.nativeTokens[0].amount + | formatToken : (billPaymentTransactions$[i] | async)?.payload.token : true : false + | async + }} + {{ (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol }} + + + ({{ + (billPaymentTransactions$[i] | async)?.payload.amount + | formatToken : (billPaymentTransactions$[i] | async)?.network : true + | async + }}) + + + + {{ + (billPaymentTransactions$[i] | async)?.payload.amount + | formatToken : (billPaymentTransactions$[i] | async)?.network : true + | async + }} + + + Fullfilment + Seller + + + {{ getWalletStatus(billPaymentTransactions$[i] | async) }} + Transaction + + + + + {{ (buyerBillPaymentTransactions$[i] | async)?.createdOn?.toDate() | date : 'medium' }} + + + {{ + (buyerBillPaymentTransactions$[i] | async)?.payload.nativeTokens[0].amount + | formatToken + : (buyerBillPaymentTransactions$[i] | async)?.payload?.token + : true + : false + | async + }} + {{ (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol }} + + + {{ + (buyerBillPaymentTransactions$[i] | async)?.payload.amount + | formatToken : (buyerBillPaymentTransactions$[i] | async)?.network : true + | async + }} + + + Seller + Fullfilment + + + {{ getWalletStatus(buyerBillPaymentTransactions$[i] | async) }} + Transaction + + + + + {{ item?.createdOn?.toDate() | date : 'medium' }} + + + {{ item?.payload.amount | formatToken : item?.network : true | async }} + + + + {{ getFeeName(item) }} + + + + {{ getWalletStatus(item) }} + Transaction + + + + + {{ (creditTransactions$[i] | async)?.createdOn?.toDate() | date : 'medium' }} + + + {{ + (creditTransactions$[i] | async)?.payload.amount + | formatToken : (creditTransactions$[i] | async)?.network : true + | async + }} + + Credit + + {{ getWalletStatus(creditTransactions$[i] | async) }} + Transaction + + + + + +
    diff --git a/src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.less b/src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts b/src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts new file mode 100644 index 0000000..bf22180 --- /dev/null +++ b/src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts @@ -0,0 +1,218 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnDestroy, + Output, +} from '@angular/core'; +import { OrderApi } from '@api/order.api'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { + MIN_IOTA_AMOUNT, + Token, + TokenPurchase, + TokenTradeOrder, + TokenTradeOrderType, + TOKEN_SALE, + TOKEN_SALE_TEST, + Transaction, +} from '@soonaverse/interfaces'; +import { BehaviorSubject, combineLatest, map, Observable, Subscription } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-token-trade-detail-modal', + templateUrl: './token-trade-detail-modal.component.html', + styleUrls: ['./token-trade-detail-modal.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenTradeDetailModalComponent implements OnDestroy { + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() token?: Token; + + @Input() + set tradeDetailOrder(value: TokenTradeOrder | undefined) { + this._tradeDetailOrder = value; + this.creditTransactions$ = []; + this.creditSubscriptions$?.unsubscribe(); + if (value?.creditTransactionId) { + const tempSellerCreditTransaction$ = new BehaviorSubject(undefined); + this.subscriptions$.push( + this.orderApi + .listen(value.creditTransactionId) + .pipe(untilDestroyed(this)) + .subscribe(tempSellerCreditTransaction$), + ); + this.creditTransactions$.push(tempSellerCreditTransaction$); + } + } + + get tradeDetailOrder(): TokenTradeOrder | undefined { + return this._tradeDetailOrder; + } + + @Input() + set tradeDetailPurchases(value: TokenPurchase[] | TokenPurchase) { + if (!(value instanceof Array)) { + value = [value]; + } + this._tradeDetailPurchases = value; + this.cancelSubscriptions(); + this.tradeDetailPurchases.forEach((purchase) => { + const { billPaymentId, buyerBillPaymentId, royaltyBillPayments } = purchase; + if (billPaymentId) { + const tempBillPaymentTransaction$ = new BehaviorSubject(undefined); + this.subscriptions$.push( + this.orderApi + .listen(billPaymentId) + .pipe(untilDestroyed(this)) + .subscribe(tempBillPaymentTransaction$), + ); + this.billPaymentTransactions$.push(tempBillPaymentTransaction$); + } + if (buyerBillPaymentId) { + const tempBuyerBillPaymentTransaction$ = new BehaviorSubject( + undefined, + ); + this.subscriptions$.push( + this.orderApi + .listen(buyerBillPaymentId) + .pipe(untilDestroyed(this)) + .subscribe(tempBuyerBillPaymentTransaction$), + ); + this.buyerBillPaymentTransactions$.push(tempBuyerBillPaymentTransaction$); + } + if (royaltyBillPayments) { + const tempRoyalBillPaymentsTransaction$ = new BehaviorSubject( + undefined, + ); + this.subscriptions$.push( + this.orderApi + .listenMultiple(royaltyBillPayments) + .pipe(untilDestroyed(this)) + .subscribe(tempRoyalBillPaymentsTransaction$), + ); + this.royaltyBillPaymentsTransactions$.push(tempRoyalBillPaymentsTransaction$); + } + }); + } + + get tradeDetailPurchases(): TokenPurchase[] { + return this._tradeDetailPurchases; + } + + @Output() wenOnClose = new EventEmitter(); + + public billPaymentTransactions$: BehaviorSubject[] = []; + public buyerBillPaymentTransactions$: BehaviorSubject[] = []; + public royaltyBillPaymentsTransactions$: BehaviorSubject[] = []; + public creditTransactions$: BehaviorSubject[] = []; + public spacePath: string = ROUTER_UTILS.config.space.root; + private creditSubscriptions$?: Subscription = undefined; + private _isOpen = false; + private _tradeDetailPurchases: TokenPurchase[] = []; + private _tradeDetailOrder?: TokenTradeOrder = undefined; + private subscriptions$: Subscription[] = []; + + constructor( + public previewImageService: PreviewImageService, + public unitsService: UnitsService, + public transactionService: TransactionService, + public helper: HelperService, + private cd: ChangeDetectorRef, + private orderApi: OrderApi, + ) {} + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public reset(): void { + this.isOpen = false; + this.cd.markForCheck(); + } + + public getWalletStatus(tran: Transaction | undefined | null): string { + if (tran?.ignoreWallet && tran?.payload?.amount < MIN_IOTA_AMOUNT) { + return $localize`Non Transferable`; + } else { + return $localize`Processing...`; + } + } + + public get tokenTradeOrderTypes(): typeof TokenTradeOrderType { + return TokenTradeOrderType; + } + + public getFeeName(tran: Transaction | undefined | null): string { + if (!tran) { + return 'Fee'; + } + + const config = environment.production ? TOKEN_SALE : TOKEN_SALE_TEST; + if (tran.space === config.spaceone) { + return $localize`Soonaverse Fee`; + } else if (tran.space === config.spacetwo) { + return $localize`Exchange Fee`; + } else { + return 'Fee'; + } + } + + public getFee(tran: Transaction | undefined | null, i: number): Observable { + return combineLatest([ + this.royaltyBillPaymentsTransactions$[i], + this.buyerBillPaymentTransactions$[i], + ]).pipe( + map(([royalty, bill]) => { + let total = royalty?.reduce((acc, act) => acc + act.payload.amount, 0); + total += bill?.payload.amount; + if (total && tran?.payload.amount) { + return tran?.payload.amount / total; + } else { + return 0; + } + }), + ); + } + + public getDebugInfo(tran: Transaction | undefined | null): string { + let msg = `uid: ${tran?.uid}, tries: ${tran?.payload?.walletReference?.count}`; + if (tran?.payload?.walletReference?.error) { + msg += `, error: "${tran?.payload?.walletReference?.error}"`; + } + + return msg; + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + this.creditSubscriptions$?.unsubscribe(); + this.billPaymentTransactions$ = []; + this.buyerBillPaymentTransactions$ = []; + this.royaltyBillPaymentsTransactions$ = []; + this.creditTransactions$ = []; + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.module.ts b/src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.module.ts new file mode 100644 index 0000000..2f39d79 --- /dev/null +++ b/src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.module.ts @@ -0,0 +1,26 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { UsdBelowTwoDecimalsModule } from '@core/pipes/usd-below-two-decimals/usd-below-two-decimals.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { TokenTradeDetailModalComponent } from './token-trade-detail-modal.component'; + +@NgModule({ + declarations: [TokenTradeDetailModalComponent], + imports: [ + CommonModule, + ModalDrawerModule, + NzToolTipModule, + NzAvatarModule, + RouterModule, + NzTableModule, + FormatTokenModule, + UsdBelowTwoDecimalsModule, + ], + exports: [TokenTradeDetailModalComponent], +}) +export class TokenTradeDetailModalModule {} diff --git a/src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html b/src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html new file mode 100644 index 0000000..fd438d2 --- /dev/null +++ b/src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html @@ -0,0 +1,206 @@ + + + diff --git a/src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.less b/src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.ts b/src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.ts new file mode 100644 index 0000000..59fe464 --- /dev/null +++ b/src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.ts @@ -0,0 +1,125 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import { TokenApi } from '@api/token.api'; +import { TokenMarketApi } from '@api/token_market.api'; +import { TokenPurchaseApi } from '@api/token_purchase.api'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/token/services/helper.service'; +import { Token, TokenStatus } from '@soonaverse/interfaces'; +import { BehaviorSubject, Subscription, first } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-token-trading-pair-row', + templateUrl: './token-trading-pair-row.component.html', + styleUrls: ['./token-trading-pair-row.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenTradingPairRowComponent implements OnInit, OnDestroy { + @Input() limittedView = false; + @Input() tokenId?: string; + @Input() isFavourite = false; + @Input() tableMode = false; + @Output() wenOnFavouriteClick = new EventEmitter(); + @Output() wenOnClick = new EventEmitter(); + public token?: Token; + public path = ROUTER_UTILS.config.token.root; + public tradePath = ROUTER_UTILS.config.token.trade; + public listenAvgPrice$: BehaviorSubject = new BehaviorSubject< + number | undefined + >(undefined); + public listenVolume24h$: BehaviorSubject = new BehaviorSubject< + number | undefined + >(undefined); + public listenChangePrice24h$: BehaviorSubject = new BehaviorSubject< + number | undefined + >(undefined); + private subscriptions$: Subscription[] = []; + + constructor( + public previewImageService: PreviewImageService, + public helper: HelperService, + public deviceService: DeviceService, + public unitsService: UnitsService, + private tokenPurchaseApi: TokenPurchaseApi, + private tokenMarketApi: TokenMarketApi, + private tokenApi: TokenApi, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + if (this.tokenId) { + this.tokenApi + .listen(this.tokenId) + .pipe(first(), untilDestroyed(this)) + .subscribe((token) => { + if (token) { + this.token = token; + this.listenToStats(this.token.uid, [token.status || TokenStatus.PRE_MINTED]); + this.cd.markForCheck(); + } + }); + } + } + + private listenToStats(tokenId: string, status: TokenStatus[]): void { + this.cancelSubscriptions(); + // TODO Add pagging. + this.subscriptions$.push( + this.tokenMarketApi + .listenAvgPrice(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenAvgPrice$), + ); + this.subscriptions$.push( + this.tokenPurchaseApi + .listenVolume24h(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenVolume24h$), + ); + this.subscriptions$.push( + this.tokenPurchaseApi + .listenChangePrice24h(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenChangePrice24h$), + ); + } + + public getPublicSaleSupply(): number { + let sup = 0; + this.token?.allocations.forEach((b) => { + if (b.isPublicSale) { + sup = b.percentage / 100; + } + }); + + return (this.token?.totalSupply || 0) * sup; + } + + public favouriteClick(event: MouseEvent): void { + this.wenOnFavouriteClick.emit(); + event.stopPropagation(); + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.module.ts b/src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.module.ts new file mode 100644 index 0000000..a929b7d --- /dev/null +++ b/src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.module.ts @@ -0,0 +1,28 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { IconModule } from '@components/icon/icon.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { UnknownIfZeroModule } from '@core/pipes/unknown-if-zero/unknown-if-zero.module'; +import { UsdBelowTwoDecimalsModule } from '@core/pipes/usd-below-two-decimals/usd-below-two-decimals.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { TokenTradingPairRowComponent } from './token-trading-pair-row.component'; + +@NgModule({ + declarations: [TokenTradingPairRowComponent], + imports: [ + CommonModule, + NzAvatarModule, + RouterModule, + IconModule, + NzButtonModule, + FormatTokenModule, + NzSkeletonModule, + UsdBelowTwoDecimalsModule, + UnknownIfZeroModule, + ], + exports: [TokenTradingPairRowComponent], +}) +export class TokenTradingPairRowModule {} diff --git a/src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html b/src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html new file mode 100644 index 0000000..6d35fe8 --- /dev/null +++ b/src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html @@ -0,0 +1,65 @@ + +
    +
    Markets
    +
    + +
    + +
    +
    +
    + + + +
    + + +
    +
    + + No Tokens + +
    +
    +
    + + +
    +
    +
    + + + +
    diff --git a/src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.less b/src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.ts b/src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.ts new file mode 100644 index 0000000..e256620 --- /dev/null +++ b/src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.ts @@ -0,0 +1,65 @@ +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { DeviceService } from '@core/services/device'; +import { FilterStorageService } from '@core/services/filter-storage'; +import { StorageItem, getItem, setItem } from '@core/utils'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { COL, Timestamp } from '@soonaverse/interfaces'; +import { InstantSearchConfig } from 'angular-instantsearch/instantsearch/instantsearch'; + +@UntilDestroy() +// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection +@Component({ + selector: 'wen-token-trading-pairs-table', + templateUrl: './token-trading-pairs-table.component.html', + styleUrls: ['./token-trading-pairs-table.component.less'], + // changeDetection: ChangeDetectionStrategy.OnPush +}) +export class TokenTradingPairsTableComponent implements OnInit { + @Input() limittedView = false; + @Input() favouritesOnly = false; + @Output() wenOnClose = new EventEmitter(); + public favouritesFilter = false; + public config: InstantSearchConfig; + public favourites: string[] = []; + + constructor( + public deviceService: DeviceService, + public filterStorageService: FilterStorageService, + public algoliaService: AlgoliaService, + ) { + this.config = { + indexName: COL.TOKEN, + searchClient: this.algoliaService.searchClient, + initialUiState: { + token: this.filterStorageService.tokensTradingPairsFilters$.value, + }, + }; + } + + public ngOnInit(): void { + this.favourites = (getItem(StorageItem.FavouriteTokens) as string[]) || []; + } + + public favouriteClick(tokenId: string): void { + if (this.favourites?.includes(tokenId)) { + this.favourites = this.favourites.filter((t) => t !== tokenId); + } else { + this.favourites = [...this.favourites, tokenId]; + } + + setItem(StorageItem.FavouriteTokens, this.favourites); + } + + public convertAllToSoonaverseModel(algoliaItems: any[]) { + return algoliaItems.map((algolia) => ({ + ...algolia, + createdOn: Timestamp.fromMillis(+algolia.createdOn), + mintedClaimedOn: Timestamp.fromMillis(+algolia.mintedClaimedOn), + })); + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } +} diff --git a/src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.module.ts b/src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.module.ts new file mode 100644 index 0000000..2914f70 --- /dev/null +++ b/src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.module.ts @@ -0,0 +1,22 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { AlgoliaModule } from '@components/algolia/algolia.module'; +import { IconModule } from '@components/icon/icon.module'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { TokenTradingPairRowModule } from '../token-trading-pair-row/token-trading-pair-row.module'; +import { TokenTradingPairsTableComponent } from './token-trading-pairs-table.component'; + +@NgModule({ + declarations: [TokenTradingPairsTableComponent], + imports: [ + CommonModule, + NzInputModule, + NzFormModule, + IconModule, + AlgoliaModule, + TokenTradingPairRowModule, + ], + exports: [TokenTradingPairsTableComponent], +}) +export class TokenTradingPairsTableModule {} diff --git a/src/app/components/token/components/token-vote/token-vote.component.html b/src/app/components/token/components/token-vote/token-vote.component.html new file mode 100644 index 0000000..755e824 --- /dev/null +++ b/src/app/components/token/components/token-vote/token-vote.component.html @@ -0,0 +1,330 @@ + + + + + +
    + Question +
    +
    {{ question }}
    +
    + +
    +
    + Selected option +
    +
    {{ answer?.text }}
    +
    + +
    + How do you set your votes? +
    + + + +
    +
    + {{ op.label }} +
    +
    +
    +
    + +
    + +
    +
    + + +
    + {{ token?.symbol | uppercase }} +
    +
    +
    +
    + +
    +
    + Total native tokens +
    +
    + {{ + (this.amountControl.value | formatToken : token?.uid : true : false | async) + + ' ' + + (token?.symbol === 'IOTA' ? 'M' : '') + + token?.symbol + }} +
    +
    + +
    +
    + Total staked tokens +
    +
    + {{ + (totalStaked | formatToken : token?.uid : true : false | async) + + ' ' + + (token?.symbol === 'IOTA' ? 'M' : '') + + token?.symbol + }} +
    +
    + +
    +
    + Voting is active on +
    +
    + {{ now$ | async | date : 'long' }} +
    +
    + {{ proposal?.settings?.startDate.toDate() | date : 'long' }} +
    +
    + +
    +
    + Your total voting weight +
    +
    + {{ + (getWeight() | formatToken : token?.uid : true : false | async) + + ' ' + + (token?.symbol === 'IOTA' ? 'M' : '') + + token?.symbol + }} +
    +
    + +
    + +
    + Note tha staked tokens can be used only for one voting. Your voting weight will be split if + you use staked tokens on other proposal. +
    +
    + +
    + + + + + + + + + + + +
    +
    + + +
    + + + +
    +
    + + +
    +
    + +
    + {{ + expiryTicker$ | async | countdownTime + }} + + remaining to make the transfer. + Expired +
    +
    + + +
    + + + + +
    + +
    + Make sure the gift storage deposit options in your Firefly wallet is checked when sending + tokens. +
    +
    + + + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    +
    + + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    + +
    +
    + +
    +
    Sell complete. Congratulations.
    +
    + +
    + +
    +
    diff --git a/src/app/components/token/components/token-vote/token-vote.component.less b/src/app/components/token/components/token-vote/token-vote.component.less new file mode 100644 index 0000000..6a3df16 --- /dev/null +++ b/src/app/components/token/components/token-vote/token-vote.component.less @@ -0,0 +1,14 @@ +::ng-deep { + input::-webkit-inner-spin-button, + input::-webkit-outer-spin-button { + opacity: 0; + } +} + +.price-info-item { + @apply flex-1 border border-foregrounds-separator dark:border-foregrounds-separator-dark rounded-2xl py-3 flex items-center flex-col; +} + +.summary-item { + @apply mt-3 rounded-3xl flex items-center justify-between py-4 px-6 space-x-4; +} diff --git a/src/app/components/token/components/token-vote/token-vote.component.ts b/src/app/components/token/components/token-vote/token-vote.component.ts new file mode 100644 index 0000000..67298b7 --- /dev/null +++ b/src/app/components/token/components/token-vote/token-vote.component.ts @@ -0,0 +1,443 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import { FormControl, Validators } from '@angular/forms'; +import { OrderApi } from '@api/order.api'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { StorageItem, getItem, setItem } from '@core/utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService as HelperServiceProposal } from '@pages/proposal/services/helper.service'; +import { HelperService } from '@pages/token/services/helper.service'; +import { + Proposal, + ProposalAnswer, + SERVICE_MODULE_FEE_TOKEN_EXCHANGE, + Space, + TRANSACTION_AUTO_EXPIRY_MS, + Timestamp, + Token, + Transaction, + TransactionType, + getDefDecimalIfNotSet, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, Subscription, interval } from 'rxjs'; + +export enum VoteType { + NATIVE_TOKEN = 0, + STAKED_TOKEN = 1, +} + +export enum StepType { + CONFIRM = 'Confirm', + TRANSACTION = 'Transaction', + COMPLETE = 'Complete', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-token-vote', + templateUrl: './token-vote.component.html', + styleUrls: ['./token-vote.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenVoteComponent implements OnInit, OnDestroy { + @Input() set currentStep(value: StepType | undefined) { + this._currentStep = value; + if (this.currentStep === StepType.TRANSACTION && this.token?.uid) { + const acceptedTerms = (getItem(StorageItem.TokenOffersAcceptedTerms) || []) as string[]; + setItem(StorageItem.TokenOffersAcceptedTerms, [ + ...acceptedTerms.filter((r) => r !== this.token?.uid), + this.token.uid, + ]); + } + this.cd.markForCheck(); + } + + get currentStep(): StepType | undefined { + return this._currentStep; + } + + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() token?: Token; + @Input() proposal?: Proposal; + @Input() space?: Space; + @Input() totalStaked?: number | null; + @Input() question?: string | null; + @Input() answer?: ProposalAnswer | null; + @Output() wenOnClose = new EventEmitter(); + public amount = 0; + public targetAddress?: string = ''; + public invalidPayment = false; + public targetAmount?: number; + public receivedTransactions = false; + public purchasedAmount = 0; + public now$: BehaviorSubject = new BehaviorSubject(new Date()); + public history: HistoryItem[] = []; + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public isCopied = false; + public voteTypeControl: FormControl = new FormControl(VoteType.NATIVE_TOKEN, [ + Validators.required, + ]); + public amountControl: FormControl = new FormControl(null, [Validators.required]); + public voteTypeOptions: { + label: string; + value: VoteType; + }[] = [ + { + label: $localize`Send Native Tokens`, + value: VoteType.NATIVE_TOKEN, + }, + { + label: $localize`Use Staked Tokens`, + value: VoteType.STAKED_TOKEN, + }, + ]; + private _isOpen = false; + private _currentStep?: StepType; + private transSubscription?: Subscription; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public helper: HelperService, + public helperProposal: HelperServiceProposal, + public unitsService: UnitsService, + public transactionService: TransactionService, + public auth: AuthService, + private notification: NotificationService, + private orderApi: OrderApi, + private tokenApi: TokenApi, + private cd: ChangeDetectorRef, + ) { + setInterval(() => { + this.now$.next(new Date()); + }, 1000); + } + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + // TODO remove empty if + } + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.TRANSACTION; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_vote_received', + val.createdOn, + $localize`Vote received.`, + (val).payload?.chainReference, + ); + } + + if ( + val && + val.type === TransactionType.PAYMENT && + val.payload.reconciled === true && + (val).payload.invalidPayment === false + ) { + // Let's add delay to achive nice effect. + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirming_trans', + val.createdOn, + $localize`Confirming transaction.`, + ); + }, 1000); + + setTimeout(() => { + this.pushToHistory( + val, + val.uid + '_confirmed_trans', + val.createdOn, + $localize`Transaction confirmed and funds refunded.`, + ); + this.purchasedAmount = val.payload.amount; + this.receivedTransactions = true; + this.currentStep = StepType.COMPLETE; + this.cd.markForCheck(); + }, 2000); + } + + // Let's go back to wait. With slight delay so they can see this. + const markInvalid = () => { + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload.invalidPayment === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid amount received. Refunding transaction...`, + ); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_false', + val.createdOn, + $localize`Invalid transaction.You must gift storage deposit.`, + ); + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload.invalidPayment === true && + val.payload?.walletReference?.chainReference && + !val.ignoreWalletReason + ) { + this.pushToHistory( + val, + val.uid + '_true', + dayjs(), + $localize`Invalid payment refunded.`, + val.payload?.walletReference?.chainReference, + ); + markInvalid(); + } + + this.cd.markForCheck(); + }); + + if (this.token?.uid) { + this.currentStep = StepType.CONFIRM; + this.cd.markForCheck(); + } + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public get voteTypes(): typeof VoteType { + return VoteType; + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public reset(): void { + this.isOpen = false; + this.currentStep = StepType.CONFIRM; + this.cd.markForCheck(); + } + + public async proceedWithVote(cb?: any): Promise { + if (!this.token || !this.proposal?.uid || !this.answer?.value) { + return; + } + const params: any = { + uid: this.proposal.uid, + values: [this.answer.value], + }; + + if (this.voteTypeControl.value === VoteType.NATIVE_TOKEN) { + return this.proceedWithNativeVote(params, cb); + } else { + params.voteWithStakedTokes = true; + return this.proceedWithStakedTokens(params, cb); + } + } + + private async proceedWithStakedTokens(params: any, cb?: any): Promise { + const r = await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.tokenApi.voteOnProposal(sc), $localize`Token vote executed.`, finish) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + this.close(); + }); + }); + + if (!r) { + this.close(); + } + } + + private async proceedWithNativeVote(params: any, cb?: any): Promise { + const r = await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest( + this.tokenApi.voteOnProposal(sc), + $localize`Token vote order created.`, + finish, + ) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), $localize`Waiting for transaction...`); + if (cb) { + cb(); + } + }); + }); + + if (!r) { + this.close(); + } + } + + public getWeight(): number { + let amount; + if (this.voteTypeControl.value === VoteType.NATIVE_TOKEN) { + amount = this.amountControl.value * Math.pow(10, getDefDecimalIfNotSet(this.token?.decimals)); + } else { + amount = this.totalStaked || 0; + } + + if (this.helperProposal.isCommencing(this.proposal)) { + return amount; + } else { + // Already started so it'll be propotional. + const totalTime = dayjs(this.proposal?.settings?.endDate.toDate()).diff( + dayjs(this.proposal?.settings?.startDate.toDate()), + ); + const diffFromNow = dayjs(this.proposal?.settings?.endDate.toDate()).diff(dayjs()); + + const pct = Math.round((diffFromNow / totalTime) * 100) / 100; + return amount * pct; + } + } + + public get stepType(): typeof StepType { + return StepType; + } + + public getTargetAmount(): number { + return this.amount * Math.pow(10, getDefDecimalIfNotSet(this.token?.decimals)); + } + + public get exchangeFee(): number { + return SERVICE_MODULE_FEE_TOKEN_EXCHANGE; + } + + public ngOnDestroy(): void { + this.transSubscription?.unsubscribe(); + } +} diff --git a/src/app/components/token/components/token-vote/token-vote.module.ts b/src/app/components/token/components/token-vote/token-vote.module.ts new file mode 100644 index 0000000..5d8aebc --- /dev/null +++ b/src/app/components/token/components/token-vote/token-vote.module.ts @@ -0,0 +1,54 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { RadioModule } from '@components/radio/radio.module'; +import { TermsAndConditionsModule } from '@components/terms-and-conditions/terms-and-conditions.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { UsdBelowTwoDecimalsModule } from '@core/pipes/usd-below-two-decimals/usd-below-two-decimals.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzRadioModule } from 'ng-zorro-antd/radio'; +import { TokenVoteComponent } from './token-vote.component'; + +@NgModule({ + declarations: [TokenVoteComponent], + imports: [ + CommonModule, + NzModalModule, + NzDrawerModule, + IconModule, + NzButtonModule, + NzCheckboxModule, + NzAvatarModule, + NzInputModule, + NetworkModule, + TimeModule, + FormsModule, + CountdownTimeModule, + UsdBelowTwoDecimalsModule, + NzAlertModule, + ReactiveFormsModule, + ModalDrawerModule, + NzRadioModule, + RadioModule, + WalletDeeplinkModule, + FormatTokenModule, + TermsAndConditionsModule, + DescriptionModule, + ], + providers: [PercentPipe], + exports: [TokenVoteComponent], +}) +export class TokenVoteModule {} diff --git a/src/app/components/token/token.module.ts b/src/app/components/token/token.module.ts new file mode 100644 index 0000000..7ec4cb5 --- /dev/null +++ b/src/app/components/token/token.module.ts @@ -0,0 +1,8 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +@NgModule({ + declarations: [], + imports: [CommonModule], +}) +export class TokenModule {} diff --git a/src/app/components/trading-view/components/trading-view/trading-view.component.html b/src/app/components/trading-view/components/trading-view/trading-view.component.html new file mode 100644 index 0000000..3338495 --- /dev/null +++ b/src/app/components/trading-view/components/trading-view/trading-view.component.html @@ -0,0 +1,5 @@ +
    +
    +
    +
    +
    diff --git a/src/app/components/trading-view/components/trading-view/trading-view.component.less b/src/app/components/trading-view/components/trading-view/trading-view.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/trading-view/components/trading-view/trading-view.component.ts b/src/app/components/trading-view/components/trading-view/trading-view.component.ts new file mode 100644 index 0000000..d5cae9e --- /dev/null +++ b/src/app/components/trading-view/components/trading-view/trading-view.component.ts @@ -0,0 +1,312 @@ +import { + AfterViewInit, + ChangeDetectionStrategy, + Component, + ElementRef, + Input, + OnInit, + ViewChild, +} from '@angular/core'; +import { TokenPurchaseApi } from '@api/token_purchase.api'; +import { ThemeList, ThemeService } from '@core/services/theme'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { TokenPurchase, TokenStatus } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { + CandlestickData, + CrosshairMode, + GridOptions, + HistogramData, + IChartApi, + ISeriesApi, + LayoutOptions, + LineData, + SingleValueData, + TimeScaleOptions, + UTCTimestamp, + VisiblePriceScaleOptions, + createChart, +} from 'lightweight-charts'; +import { BehaviorSubject, Subscription } from 'rxjs'; + +export enum TRADING_VIEW_INTERVALS { + '5m' = '5m', + '1h' = '1h', + '4h' = '4h', + '1d' = '1d', + '1w' = '1w', +} + +@UntilDestroy() +@Component({ + selector: 'wen-trading-view', + templateUrl: './trading-view.component.html', + styleUrls: ['./trading-view.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TradingViewComponent implements OnInit, AfterViewInit { + @Input() + public set tokenId(value: string | undefined) { + this._tokenId = value; + this.refreshData(); + } + + @Input() public status?: TokenStatus; + + @Input() + public set width(value: number) { + this._width = value; + this.resize(); + } + + @Input() + public set interval(value: TRADING_VIEW_INTERVALS) { + this._interval = value; + // Subscription for data already initiated. + if (this.purchasesSubs$) { + this.drawData(); + } + } + + public get data(): TokenPurchase[] { + return this._data; + } + + @ViewChild('tradingView') tradingViewEleRef?: ElementRef; + private chart?: IChartApi; + private candlestickSeries?: ISeriesApi<'Candlestick'>; + private volumeSeries?: ISeriesApi<'Histogram'>; + private baselineSeries?: ISeriesApi<'Baseline'>; + private lineSeries?: ISeriesApi<'Line'>; + private _data: TokenPurchase[] = []; + private _interval: TRADING_VIEW_INTERVALS = TRADING_VIEW_INTERVALS['1h']; + private _tokenId?: string; + private _width = 600; + public listenToPurchases$: BehaviorSubject = new BehaviorSubject< + TokenPurchase[] + >([]); + private purchasesSubs$?: Subscription; + private timeLimit = 3600; + private defaultHeight = 400; + + constructor(public tokenPurchaseApi: TokenPurchaseApi, private themeService: ThemeService) { + // none. + } + + public ngOnInit(): void { + this.refreshData(); + this.listenToPurchases$.subscribe(() => { + this.drawData(); + }); + + this.themeService.theme$.pipe(untilDestroyed(this)).subscribe(() => { + this.chart?.applyOptions({ + layout: this.getLayoutColours(), + grid: this.getGridColours(), + rightPriceScale: this.getPriceScaleColour(), + timeScale: this.getTimeScaleColour(), + }); + }); + } + + public ngAfterViewInit(): void { + // Great examples: https://www.tradingview.com/lightweight-charts/ + if (this.tradingViewEleRef) { + this.chart = createChart(this.tradingViewEleRef.nativeElement, { + width: this.calcWidth(), + height: this.defaultHeight, + crosshair: { + mode: CrosshairMode.Normal, + }, + layout: this.getLayoutColours(), + grid: this.getGridColours(), + rightPriceScale: this.getPriceScaleColour(), + timeScale: this.getTimeScaleColour(), + }); + this.candlestickSeries = this.chart.addCandlestickSeries({ + wickVisible: true, + borderVisible: true, + upColor: '#28B16F', + borderUpColor: '#28B16F', + wickUpColor: '#28B16F', + downColor: '#E14F4F', + borderDownColor: '#E14F4F', + wickDownColor: '#E14F4F', + }); + this.volumeSeries = this.chart.addHistogramSeries({ + color: '#28B16F', + priceFormat: { + type: 'volume', + }, + priceScaleId: '', + scaleMargins: { + top: 0.8, + bottom: 0, + }, + }); + this.baselineSeries = this.chart.addBaselineSeries({ + lineWidth: 1, + }); + this.lineSeries = this.chart.addLineSeries({ + color: '#020409', + lineWidth: 1, + }); + } + } + + private getLayoutColours(): LayoutOptions { + return { + backgroundColor: this.themeService.theme$.value === ThemeList.Dark ? '#141412' : '#ffffff', + textColor: this.themeService.theme$.value === ThemeList.Dark ? '#D5D3CC' : '#333333', + fontSize: 14, + fontFamily: `'Poppins', sans-serif`, + }; + } + + private getGridColours(): GridOptions { + return { + vertLines: { + color: this.themeService.theme$.value === ThemeList.Dark ? '#272520' : '#F0EEE6', + }, + horzLines: { + color: this.themeService.theme$.value === ThemeList.Dark ? '#272520' : '#F0EEE6', + }, + }; + } + + private getPriceScaleColour(): VisiblePriceScaleOptions { + return { + borderColor: this.themeService.theme$.value === ThemeList.Dark ? '#272520' : '#F0EEE6', + }; + } + + private getTimeScaleColour(): TimeScaleOptions { + return { + borderColor: this.themeService.theme$.value === ThemeList.Dark ? '#272520' : '#F0EEE6', + }; + } + + private resize(): void { + this.chart?.resize(this.calcWidth(), this.defaultHeight); + } + + private calcWidth(): number { + return this._width; + } + + private refreshData(): void { + if (!this._tokenId || !this.status) return; + this.purchasesSubs$?.unsubscribe(); + this.purchasesSubs$ = this.tokenPurchaseApi + .listenToPurchases(this._tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenToPurchases$); + } + + private drawData(): void { + if (!this.listenToPurchases$.value?.length) { + return; + } + + const chartData: CandlestickData[] = []; + const volumeData: HistogramData[] = []; + const baselineData: SingleValueData[] = []; + const lineData: LineData[] = []; + + this.setTimeLimit(); + const sortedList = this.listenToPurchases$.value.sort((a, b) => { + return a.createdOn!.seconds - b.createdOn!.seconds; + }); + + let start = dayjs(sortedList[0].createdOn?.toDate()).hour(0).minute(0).second(0).millisecond(0); + // We only go 1 days back + if (this._interval === TRADING_VIEW_INTERVALS['5m']) { + start = dayjs().subtract(1, 'day').hour(0).minute(0).second(0).millisecond(0); + } + + while (start.isBefore(dayjs())) { + const next = start.add(this.timeLimit, 'second'); + const recordsWithinTime: TokenPurchase[] = this.listenToPurchases$.value.filter((o) => { + return ( + dayjs(o.createdOn!.toDate()).isAfter(start) && + dayjs(o.createdOn!.toDate()).isSameOrBefore(next) + ); + }); + + if (recordsWithinTime.length) { + const max = Math.max(...recordsWithinTime.map((o) => o.price)); + const min = Math.min(...recordsWithinTime.map((o) => o.price)); + const sum = + recordsWithinTime.map((o) => o.count).reduce((partialSum, a) => partialSum + a, 0) / + 1000 / + 1000; + chartData.push({ + time: next.unix() as UTCTimestamp, + open: recordsWithinTime[0].price || 0, + high: max || 0, + low: min || 0, + close: recordsWithinTime[recordsWithinTime.length - 1].price || 0, + }); + + const green = 'rgba(87, 174, 117, 0.6)'; + const red = 'rgba(208, 89, 84, 0.6)'; + volumeData.push({ + time: next.unix() as UTCTimestamp, + value: sum, + color: + // Not sure this is correct. + // chartData[chartData.length - 2] && + // in a given time frame, if the closing price is greater than the opening price, + chartData[chartData.length - 1].close > chartData[chartData.length - 1].open + ? // but the candle's closing price is lesser than the previous candle's closing price, you will get a green candlestick & a red volume bar. + // && chartData[chartData.length - 1].close < chartData[chartData.length - 2].close + red + : green, + }); + } + + start = next; + } + + if (this.candlestickSeries && chartData.length > 0) { + this.candlestickSeries!.setData(chartData); + this.volumeSeries!.setData(volumeData); + this.baselineSeries!.setData(baselineData); + this.lineSeries!.setData(lineData); + + let pastDays = 7; + if ( + this._interval === TRADING_VIEW_INTERVALS['1d'] || + this._interval === TRADING_VIEW_INTERVALS['1w'] + ) { + pastDays = 4 * 7 * 3; + } else if (this._interval === TRADING_VIEW_INTERVALS['5m']) { + pastDays = 1; + } + this.chart?.timeScale().setVisibleRange({ + from: dayjs().subtract(pastDays, 'day').unix() as UTCTimestamp, + to: dayjs().unix() as UTCTimestamp, + }); + } + } + + private setTimeLimit(): void { + const time = parseInt(this._interval.split('')[0], 10); + const unit = this._interval.split('')[1]; + + switch (unit) { + case 'm': + this.timeLimit = 60 * time; + break; + case 'h': + this.timeLimit = 3600 * time; + break; + case 'd': + this.timeLimit = 3600 * 24 * time; + break; + case 'w': + this.timeLimit = 3600 * 24 * 7 * time; + break; + } + } +} diff --git a/src/app/components/trading-view/components/trading-view/trading-view.module.ts b/src/app/components/trading-view/components/trading-view/trading-view.module.ts new file mode 100644 index 0000000..0603096 --- /dev/null +++ b/src/app/components/trading-view/components/trading-view/trading-view.module.ts @@ -0,0 +1,13 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { TradingViewComponent } from './trading-view.component'; + +@NgModule({ + declarations: [TradingViewComponent], + imports: [CommonModule, NzButtonModule, NzAvatarModule, TruncateModule], + exports: [TradingViewComponent], +}) +export class TradingViewModule {} diff --git a/src/app/components/transaction-steps/transaction-steps.component.html b/src/app/components/transaction-steps/transaction-steps.component.html new file mode 100644 index 0000000..bfe6ab9 --- /dev/null +++ b/src/app/components/transaction-steps/transaction-steps.component.html @@ -0,0 +1,27 @@ +
    + +
    +
    + + {{ i + 1 }} +
    +
    + {{ step.label }} +
    +
    + +
    +
    +
    diff --git a/src/app/components/transaction-steps/transaction-steps.component.less b/src/app/components/transaction-steps/transaction-steps.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/components/transaction-steps/transaction-steps.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/components/transaction-steps/transaction-steps.component.ts b/src/app/components/transaction-steps/transaction-steps.component.ts new file mode 100644 index 0000000..c129086 --- /dev/null +++ b/src/app/components/transaction-steps/transaction-steps.component.ts @@ -0,0 +1,33 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; + +export interface TransactionStep { + sequenceNum: number; + label: string; +} + +@Component({ + selector: 'wen-transaction-steps', + templateUrl: './transaction-steps.component.html', + styleUrls: ['./transaction-steps.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TransactionStepsComponent { + @Input() steps: TransactionStep[] = []; + @Input() currentNum = 0; + + public getStepClass(step: TransactionStep): string { + if (step.sequenceNum === this.steps.length - 1 && step.sequenceNum === this.currentNum) { + return 'bg-alerts-success dark:bg-alerts-success-dark text-foregrounds-on-primary dark:text-foregrounds-on-primary-dark'; + } + if (step.sequenceNum < this.currentNum) { + return 'bg-accent-secondary dark:bg-accent-secondary-dark text-foregrounds-on-primary'; + } + if (step.sequenceNum === this.currentNum) { + return 'bg-accent-primary dark:bg-accent-primary-dark text-foregrounds-on-primary'; + } + if (step.sequenceNum > this.currentNum) { + return 'text-foregrounds-primary dark:text-foregrounds-primary-dark opacity-50 border border-inputs-border dark:border-inputs-border-dark'; + } + return ''; + } +} diff --git a/src/app/components/transaction-steps/transaction-steps.module.ts b/src/app/components/transaction-steps/transaction-steps.module.ts new file mode 100644 index 0000000..4f6d81e --- /dev/null +++ b/src/app/components/transaction-steps/transaction-steps.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { TransactionStepsComponent } from './transaction-steps.component'; + +@NgModule({ + declarations: [TransactionStepsComponent], + imports: [CommonModule, IconModule], + exports: [TransactionStepsComponent], +}) +export class TransactionStepsModule {} diff --git a/src/app/components/transaction/components/transaction-card/transaction-card.component.html b/src/app/components/transaction/components/transaction-card/transaction-card.component.html new file mode 100644 index 0000000..78c22ef --- /dev/null +++ b/src/app/components/transaction/components/transaction-card/transaction-card.component.html @@ -0,0 +1,45 @@ +
    +
    {{ transaction.uid }}
    + +
    + +
    +
    + Type +
    +
    + {{ transactionService.getTitle(transaction) }} +
    +
    + +
    +
    + Date +
    +
    + {{ transaction.createdOn?.toDate() | date : 'medium' }} +
    +
    + + +
    + + +
    +
    diff --git a/src/app/components/transaction/components/transaction-card/transaction-card.component.less b/src/app/components/transaction/components/transaction-card/transaction-card.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/transaction/components/transaction-card/transaction-card.component.ts b/src/app/components/transaction/components/transaction-card/transaction-card.component.ts new file mode 100644 index 0000000..880da21 --- /dev/null +++ b/src/app/components/transaction/components/transaction-card/transaction-card.component.ts @@ -0,0 +1,23 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { Transaction } from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-transaction-card', + templateUrl: './transaction-card.component.html', + styleUrls: ['./transaction-card.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TransactionCardComponent { + @Input() transaction!: Transaction; + + constructor( + public previewImageService: PreviewImageService, + public deviceService: DeviceService, + public transactionService: TransactionService, + public unitsService: UnitsService, + ) {} +} diff --git a/src/app/components/transaction/components/transaction-card/transaction-card.module.ts b/src/app/components/transaction/components/transaction-card/transaction-card.module.ts new file mode 100644 index 0000000..c5bdbdd --- /dev/null +++ b/src/app/components/transaction/components/transaction-card/transaction-card.module.ts @@ -0,0 +1,12 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { TransactionCardComponent } from './transaction-card.component'; + +@NgModule({ + declarations: [TransactionCardComponent], + imports: [CommonModule, NzAvatarModule, TruncateModule], + exports: [TransactionCardComponent], +}) +export class TransactionCardModule {} diff --git a/src/app/components/transaction/transaction.module.ts b/src/app/components/transaction/transaction.module.ts new file mode 100644 index 0000000..db16ca4 --- /dev/null +++ b/src/app/components/transaction/transaction.module.ts @@ -0,0 +1,8 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +@NgModule({ + declarations: [], + imports: [CommonModule], +}) +export class TransactionModule {} diff --git a/src/app/components/wallet-address/manage-addresses/manage-addresses.component.html b/src/app/components/wallet-address/manage-addresses/manage-addresses.component.html new file mode 100644 index 0000000..9518d16 --- /dev/null +++ b/src/app/components/wallet-address/manage-addresses/manage-addresses.component.html @@ -0,0 +1,75 @@ + + + + + + + + Network + Address + Action + + + + + +
    + + +
    +
    {{ item | uppercase }}
    +
    + {{ networkDetails[item].label }} +
    + + + + {{ address(item)?.substring(0, (deviceService.isDesktop$ | async) ? 24 : 3) }}...{{ + address(item)?.substring( + (address(item)?.length || 0) - ((deviceService.isDesktop$ | async) ? 8 : 4) + ) + }} + + + Not yet verified + + + + + + Change + Verify + + + + + + +
    +
    diff --git a/src/app/components/wallet-address/manage-addresses/manage-addresses.component.less b/src/app/components/wallet-address/manage-addresses/manage-addresses.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/wallet-address/manage-addresses/manage-addresses.component.spec.ts b/src/app/components/wallet-address/manage-addresses/manage-addresses.component.spec.ts new file mode 100644 index 0000000..ba6e0eb --- /dev/null +++ b/src/app/components/wallet-address/manage-addresses/manage-addresses.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ManageAddressesComponent } from './manage-addresses.component'; + +describe('ManageAddressesComponent', () => { + let component: ManageAddressesComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ManageAddressesComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(ManageAddressesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/wallet-address/manage-addresses/manage-addresses.component.ts b/src/app/components/wallet-address/manage-addresses/manage-addresses.component.ts new file mode 100644 index 0000000..9c466bb --- /dev/null +++ b/src/app/components/wallet-address/manage-addresses/manage-addresses.component.ts @@ -0,0 +1,57 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { environment } from '@env/environment'; +import { + DEFAULT_NETWORK, + Member, + NETWORK_DETAIL, + Network, + PROD_NETWORKS, + Space, + TEST_NETWORKS, +} from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-manage-addresses', + templateUrl: './manage-addresses.component.html', + styleUrls: ['./manage-addresses.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ManageAddressesComponent { + @Input() set isOpen(value: boolean) { + this._isOpen = value; + } + + public get isOpen(): boolean { + return this._isOpen; + } + + @Input() entity?: Space | Member | null; + @Output() wenOnChange = new EventEmitter(); + @Output() wenOnClose = new EventEmitter(); + public networks = Network; + public availableNetworks = environment.production + ? PROD_NETWORKS + : [...PROD_NETWORKS, ...TEST_NETWORKS]; + + private _isOpen = false; + + constructor(public deviceService: DeviceService) {} + + public close(): void { + this.isOpen = false; + this.wenOnClose.next(); + } + + public networkName(network: Network | null): string | undefined { + return Object.entries(this.networks).find(([_key, value]) => value === network)?.[0]; + } + + public address(network?: Network): string | undefined { + return (this.entity?.validatedAddress || {})[network || DEFAULT_NETWORK] || ''; + } + + public get networkDetails(): typeof NETWORK_DETAIL { + return NETWORK_DETAIL; + } +} diff --git a/src/app/components/wallet-address/verify-address/verify-address.component.html b/src/app/components/wallet-address/verify-address/verify-address.component.html new file mode 100644 index 0000000..6bfc993 --- /dev/null +++ b/src/app/components/wallet-address/verify-address/verify-address.component.html @@ -0,0 +1,184 @@ +
    + +
    + +
    + + + + + + + + + + + + + + + +
    + + +
    +
    + + You will be asked to send funds to the new + {{ networkName(network) }} + address for the verification process. The address you send funds from will be linked to + your + + space + profile + for future transactions. +
    + + +
    +
    + + +
    +
    + + Send a small {{ targetAmount | formatToken : network | async }} + amount to validate your address. This expires in {{ expiryTicker$ | async | countdownTime }}. + + Expired. +
    + + + + + + + + +
    +
    + + +
    +
    + Wait for transaction to be validated. We will send back your transaction once completed +
    + +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    Transaction history
    + +
    +
    +
    {{ t.date | Time }}
    + {{ t.label }} +
    {{ t.label }}
    +
    +
    +
    +
    +
    + +
    +
    + Now you can deal with NFTs and participate in token trading. + Your new address has been verified! +
    +
    + + +
    +
    diff --git a/src/app/components/wallet-address/verify-address/verify-address.component.less b/src/app/components/wallet-address/verify-address/verify-address.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/wallet-address/verify-address/verify-address.component.ts b/src/app/components/wallet-address/verify-address/verify-address.component.ts new file mode 100644 index 0000000..b995100 --- /dev/null +++ b/src/app/components/wallet-address/verify-address/verify-address.component.ts @@ -0,0 +1,356 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import { OrderApi } from '@api/order.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { TransactionStep } from '@components/transaction-steps/transaction-steps.component'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { getVerifyAddressItem, removeVerifyAddressItem, setVerifyAddressItem } from '@core/utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { + DEFAULT_NETWORK, + Member, + Network, + Space, + Timestamp, + Transaction, + TransactionType, + TRANSACTION_AUTO_EXPIRY_MS, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { BehaviorSubject, interval, Subscription } from 'rxjs'; +import { EntityType } from './../wallet-address.component'; + +export enum StepType { + GENERATE = 'Generate', + TRANSACTION = 'Transaction', + WAIT = 'Wait', + CONFIRMED = 'Confirmed', +} + +interface HistoryItem { + uniqueId: string; + date: dayjs.Dayjs | Timestamp | null; + label: string; + transaction: Transaction; + link?: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-verify-address', + templateUrl: './verify-address.component.html', + styleUrls: ['./verify-address.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class VerifyAddressComponent implements OnInit, OnDestroy { + @Input() currentStep = StepType.GENERATE; + @Input() network: Network | null = DEFAULT_NETWORK; + @Input() entityType?: EntityType; + @Input() entity?: Space | Member | null; + @Output() wenOnClose = new EventEmitter(); + + public stepType = StepType; + public transaction$: BehaviorSubject = new BehaviorSubject< + Transaction | undefined + >(undefined); + public expiryTicker$: BehaviorSubject = + new BehaviorSubject(null); + public receivedTransactions = false; + public history: HistoryItem[] = []; + public invalidPayment = false; + public targetAddress?: string; + public targetAmount?: number; + public networks = Network; + public steps: TransactionStep[] = [ + { label: $localize`Generate address`, sequenceNum: 0 }, + { label: $localize`Make transaction`, sequenceNum: 1 }, + { label: $localize`Wait for confirmation`, sequenceNum: 2 }, + { label: $localize`Confirmed`, sequenceNum: 3 }, + ]; + + private transSubscription?: Subscription; + + constructor( + public deviceService: DeviceService, + public unitsService: UnitsService, + public transactionService: TransactionService, + private auth: AuthService, + private notification: NotificationService, + private cd: ChangeDetectorRef, + private orderApi: OrderApi, + ) {} + + public ngOnInit(): void { + this.receivedTransactions = false; + const listeningToTransaction: string[] = []; + this.transaction$.pipe(untilDestroyed(this)).subscribe((val) => { + if (val && val.type === TransactionType.ORDER) { + this.targetAddress = val.payload.targetAddress; + this.targetAmount = val.payload.amount; + const expiresOn: dayjs.Dayjs = dayjs(val.payload.expiresOn!.toDate()); + if (expiresOn.isBefore(dayjs()) || val.payload?.void || val.payload?.reconciled) { + // It's expired. + getVerifyAddressItem(this.network || DEFAULT_NETWORK); + } + + if (val.linkedTransactions?.length > 0) { + this.currentStep = StepType.WAIT; + // Listen to other transactions. + for (const tranId of val.linkedTransactions) { + if (listeningToTransaction.indexOf(tranId) > -1) { + continue; + } + + listeningToTransaction.push(tranId); + this.orderApi + .listen(tranId) + .pipe(untilDestroyed(this)) + .subscribe(this.transaction$); + } + } else if (!val.linkedTransactions || val.linkedTransactions.length === 0) { + this.currentStep = StepType.TRANSACTION; + } + + this.expiryTicker$.next(expiresOn); + } + + if (val && val.type === TransactionType.PAYMENT && val.payload.reconciled === true) { + this.pushToHistory( + val, + val.uid + '_payment_received', + val.createdOn, + 'Payment received.', + (val).payload?.chainReference, + ); + this.receivedTransactions = true; + } + + const markInvalid = () => { + setTimeout(() => { + this.currentStep = StepType.TRANSACTION; + this.invalidPayment = true; + this.cd.markForCheck(); + }, 2000); + }; + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload.invalidPayment === true && + val.ignoreWallet === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_credit_back', + dayjs(), + $localize`Invalid amount received. Refunding transaction...`, + ); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload.invalidPayment === true && + val.ignoreWallet === true && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_credit_back', + dayjs(), + $localize`Invalid transaction.You must gift storage deposit.`, + ); + + markInvalid(); + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload.invalidPayment === false && + !val.payload?.walletReference?.chainReference + ) { + this.pushToHistory( + val, + val.uid + '_credit_back', + dayjs(), + $localize`Refunding your payment...`, + ); + } + + // Credit + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory(val, val.uid + '_refund_complete', dayjs(), 'Payment refunded.'); + + if (val.payload.invalidPayment) { + markInvalid(); + } + } + + if ( + val && + val.type === TransactionType.CREDIT && + val.payload.reconciled === true && + val.payload.invalidPayment === false && + val.payload?.walletReference?.chainReference + ) { + this.pushToHistory(val, val.uid + '_confirmed_address', dayjs(), 'Address confirmed.'); + removeVerifyAddressItem(this.network || DEFAULT_NETWORK); + this.currentStep = StepType.CONFIRMED; + } + + this.cd.markForCheck(); + }); + + if (getVerifyAddressItem(this.network || DEFAULT_NETWORK)) { + this.transSubscription = this.orderApi + .listen(getVerifyAddressItem(this.network || DEFAULT_NETWORK)) + .subscribe(this.transaction$); + } + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.expiryTicker$.next(this.expiryTicker$.value); + + // If it's in the past. + if (this.expiryTicker$.value) { + const expiresOn: dayjs.Dayjs = dayjs(this.expiryTicker$.value).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + if (expiresOn.isBefore(dayjs())) { + this.expiryTicker$.next(null); + removeVerifyAddressItem(this.network || DEFAULT_NETWORK); + int.unsubscribe(); + this.reset(); + } + } + }); + } + + public pushToHistory( + transaction: Transaction, + uniqueId: string, + date?: dayjs.Dayjs | Timestamp | null, + text?: string, + link?: string, + ): void { + if ( + this.history.find((s) => { + return s.uniqueId === uniqueId; + }) + ) { + return; + } + + if (date && text) { + this.history.unshift({ + transaction, + uniqueId: uniqueId, + date: date, + label: text, + link: link, + }); + } + } + + public reset(): void { + this.receivedTransactions = false; + this.currentStep = StepType.GENERATE; + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public isSpaceVerification(): boolean { + return this.entityType === EntityType.SPACE; + } + + public isExpired(val?: Transaction | null): boolean { + if (!val?.createdOn) { + return false; + } + + const expiresOn: dayjs.Dayjs = dayjs(val.createdOn.toDate()).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + return expiresOn.isBefore(dayjs()) && val.type === TransactionType.ORDER; + } + + public async initVerification(): Promise { + if (!this.entity) { + return; + } + + const params: any = { + network: this.network, + }; + + if (this.entityType === EntityType.SPACE) { + params.space = this.entity.uid; + } + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.orderApi.validateAddress(sc), 'Validation requested.', finish) + .subscribe((val: any) => { + this.transSubscription?.unsubscribe(); + setVerifyAddressItem(this.network || DEFAULT_NETWORK, val.uid); + this.transSubscription = this.orderApi.listen(val.uid).subscribe(this.transaction$); + this.pushToHistory(val, val.uid, dayjs(), 'Waiting for transaction...'); + }); + }); + } + + public address(network?: Network): string | undefined { + return (this.entity?.validatedAddress || {})[network || DEFAULT_NETWORK] || ''; + } + + public networkName(network: Network | null): string | undefined { + return Object.entries(this.networks).find(([_key, value]) => value === network)?.[0]; + } + + public getCurrentSequenceNum(): number { + switch (this.currentStep) { + case StepType.GENERATE: + return 0; + case StepType.TRANSACTION: + return 1; + case StepType.WAIT: + return 2; + case StepType.CONFIRMED: + return 3; + default: + return 0; + } + } + + public ngOnDestroy(): void { + this.transSubscription?.unsubscribe(); + } +} diff --git a/src/app/components/wallet-address/wallet-address.component.html b/src/app/components/wallet-address/wallet-address.component.html new file mode 100644 index 0000000..56a2358 --- /dev/null +++ b/src/app/components/wallet-address/wallet-address.component.html @@ -0,0 +1,98 @@ +
    +
    + + Address is not verified +
    +
    +
    +
    + +
    +
    + + +
    + {{ networkName(network) }} wallet +
    +
    + +
    +
    +
    +
    + + + + + + +
    +
    + Verify your {{ networkName(verifyAddressOpen) }} address +
    + +
    + + +
    +
    + + +
    +
    + Verify your {{ networkName(verifyAddressOpen) }} address +
    + + + +
    +
    diff --git a/src/app/components/wallet-address/wallet-address.component.less b/src/app/components/wallet-address/wallet-address.component.less new file mode 100644 index 0000000..a3cd661 --- /dev/null +++ b/src/app/components/wallet-address/wallet-address.component.less @@ -0,0 +1,3 @@ +:host { + @apply block space-y-4; +} diff --git a/src/app/components/wallet-address/wallet-address.component.ts b/src/app/components/wallet-address/wallet-address.component.ts new file mode 100644 index 0000000..0b5de2d --- /dev/null +++ b/src/app/components/wallet-address/wallet-address.component.ts @@ -0,0 +1,105 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { MODAL_WIDTH } from '@core/utils/modal.util'; +import { copyToClipboard } from '@core/utils/tools.utils'; +import { environment } from '@env/environment'; +import { + DEFAULT_NETWORK, + Member, + Network, + PROD_NETWORKS, + Space, + TEST_NETWORKS, +} from '@soonaverse/interfaces'; + +export enum EntityType { + SPACE = 'SPACE', + MEMBER = 'MEMBER', +} + +@Component({ + selector: 'wen-wallet-address', + templateUrl: './wallet-address.component.html', + styleUrls: ['./wallet-address.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class WalletAddressComponent { + @Input() entityType?: EntityType; + @Input() entity?: Space | Member | null; + @Input() enableVerification = false; + @Input() isManageAddressesOpen = false; + @Output() wenOnManageAddressClose = new EventEmitter(); + + public verifyAddressOpen: Network | null = null; + public networks = Network; + public modalWidth = MODAL_WIDTH; + public defaultNetwork = DEFAULT_NETWORK; + public environment = environment; + public isCopied: { [key in Network]?: boolean } = {}; + + constructor(public deviceService: DeviceService, private cd: ChangeDetectorRef) {} + + public address(network?: Network): string | undefined { + return (this.entity?.validatedAddress || {})[network || DEFAULT_NETWORK] || ''; + } + + public copyAddress(network: Network) { + const address = this.address(network); + if (!this.isCopied[network] && address) { + copyToClipboard(address); + this.isCopied[network] = true as never; + setTimeout(() => { + this.isCopied[network] = false; + this.cd.markForCheck(); + }, 3000); + } + } + + public close(): void { + this.verifyAddressOpen = null; + this.cd.markForCheck(); + } + + public manageAddressClose(): void { + this.isManageAddressesOpen = false; + this.wenOnManageAddressClose.emit(); + this.cd.markForCheck(); + } + + public networkName(network: Network | null): string | undefined { + return Object.entries(this.networks).find(([_key, value]) => value === network)?.[0]; + } + + public openVerification(n: Network): void { + if (!this.isNetworkEnabled(n)) { + alert($localize`This network is currently not enabled.`); + return; + } + + this.verifyAddressOpen = n; + this.cd.markForCheck(); + } + + public isNetworkEnabled(n?: Network): boolean { + if (!n) { + return false; + } + + if (environment.production) { + return PROD_NETWORKS.includes(n); + } else { + return [...PROD_NETWORKS, ...TEST_NETWORKS].includes(n); + } + } + + public verifiedAddresses(): Network[] { + return Object.keys(this.entity?.validatedAddress || {}) as Network[]; + } +} diff --git a/src/app/components/wallet-address/wallet-address.module.ts b/src/app/components/wallet-address/wallet-address.module.ts new file mode 100644 index 0000000..2089b1f --- /dev/null +++ b/src/app/components/wallet-address/wallet-address.module.ts @@ -0,0 +1,44 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NetworkModule } from '@components/network/network.module'; +import { TransactionStepsModule } from '@components/transaction-steps/transaction-steps.module'; +import { WalletDeeplinkModule } from '@components/wallet-deeplink/wallet-deeplink.module'; +import { CountdownTimeModule } from '@core/pipes/countdown-time/countdown-time.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { TimeModule } from '@core/pipes/time/time.module'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { ManageAddressesComponent } from './manage-addresses/manage-addresses.component'; +import { VerifyAddressComponent } from './verify-address/verify-address.component'; +import { WalletAddressComponent } from './wallet-address.component'; + +@NgModule({ + declarations: [WalletAddressComponent, VerifyAddressComponent, ManageAddressesComponent], + imports: [ + CommonModule, + NzDrawerModule, + NzModalModule, + NetworkModule, + IconModule, + CountdownTimeModule, + NzButtonModule, + TimeModule, + FormatTokenModule, + NzAlertModule, + TruncateModule, + WalletDeeplinkModule, + TransactionStepsModule, + ModalDrawerModule, + NzTableModule, + NzIconModule, + ], + exports: [WalletAddressComponent], +}) +export class WalletAddressModule {} diff --git a/src/app/components/wallet-deeplink/wallet-deeplink.component.html b/src/app/components/wallet-deeplink/wallet-deeplink.component.html new file mode 100644 index 0000000..43bc2f3 --- /dev/null +++ b/src/app/components/wallet-deeplink/wallet-deeplink.component.html @@ -0,0 +1,26 @@ + diff --git a/src/app/components/wallet-deeplink/wallet-deeplink.component.less b/src/app/components/wallet-deeplink/wallet-deeplink.component.less new file mode 100644 index 0000000..95fa223 --- /dev/null +++ b/src/app/components/wallet-deeplink/wallet-deeplink.component.less @@ -0,0 +1,8 @@ +:host { + @apply block; +} + +.deep-link { + @apply flex items-center justify-center w-full mb-6 lg:mb-0 lg:mr-4 lg:w-auto border-inputs-border dark:border-inputs-border-dark px-5 py-3; + padding-top: 12px !important; +} diff --git a/src/app/components/wallet-deeplink/wallet-deeplink.component.ts b/src/app/components/wallet-deeplink/wallet-deeplink.component.ts new file mode 100644 index 0000000..aa6ffa8 --- /dev/null +++ b/src/app/components/wallet-deeplink/wallet-deeplink.component.ts @@ -0,0 +1,180 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; +import { DEFAULT_NETWORK, NETWORK_DETAIL, Network, WEN_NAME } from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-wallet-deeplink', + templateUrl: './wallet-deeplink.component.html', + styleUrls: ['./wallet-deeplink.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class WalletDeeplinkComponent { + @Input() + set network(value: Network | undefined | null) { + this._network = value || undefined; + this.setLinks(); + } + + get network(): Network | undefined { + return this._network; + } + + @Input() + set targetAddress(value: string | undefined) { + this._targetAddress = value; + this.setLinks(); + } + + get targetAddress(): string | undefined { + return this._targetAddress; + } + + @Input() + set targetAmount(value: string | undefined) { + this._targetAmount = value; + this.setLinks(); + } + + get targetAmount(): string | undefined { + return this._targetAmount; + } + + @Input() + set tokenId(value: string | undefined) { + this._tokenId = value; + this.setLinks(); + } + + get tokenId(): string | undefined { + return this._tokenId; + } + + @Input() + set surplus(value: boolean) { + this._surplus = value || false; + this.setLinks(); + } + + get surplus(): boolean { + return this._surplus; + } + + @Input() + set tokenAmount(value: number | undefined) { + this._tokenAmount = value; + this.setLinks(); + } + + get tokenAmount(): number | undefined { + return this._tokenAmount; + } + + @Input() public showTanglePay = true; + + public fireflyDeepLink?: SafeUrl; + public tanglePayDeepLink?: SafeUrl; + private _targetAddress?: string; + private _network?: Network; + private _targetAmount?: string; + private _surplus = false; + private _tokenId?: string; + private _tokenAmount?: number; + + constructor(private sanitizer: DomSanitizer, private cd: ChangeDetectorRef) {} + + private setLinks(): void { + this.fireflyDeepLink = this.getFireflyDeepLink(); + this.tanglePayDeepLink = this.getTanglePayDeepLink(); + } + + private getFireflyDeepLink(): SafeUrl { + if (!this.targetAddress || !this.targetAmount) { + return ''; + } + + // We want to round to maximum 6 digits. + if (this.network === Network.RMS || this.network === Network.SMR) { + const walletType = this.network === Network.SMR ? 'firefly' : 'firefly-alpha'; + if (this.tokenId && this.tokenAmount) { + return this.sanitizer.bypassSecurityTrustUrl( + walletType + + '://wallet/sendConfirmation?address=' + + this.targetAddress + + '&assetId=' + + this.tokenId + + '&disableToggleGift=true&disableChangeExpiration=true' + + '&amount=' + + Number(this.tokenAmount).toFixed(0) + + '&tag=soonaverse&giftStorageDeposit=true' + + (this.surplus ? '&surplus=' + Number(this.targetAmount).toFixed(0) : ''), + ); + } else { + return this.sanitizer.bypassSecurityTrustUrl( + walletType + + '://wallet/sendConfirmation?address=' + + this.targetAddress + + '&disableToggleGift=true&disableChangeExpiration=true' + + '&amount=' + + Number(this.targetAmount).toFixed(0) + + '&tag=soonaverse&giftStorageDeposit=true', + ); + } + } else { + return this.sanitizer.bypassSecurityTrustUrl( + 'iota://wallet/send/' + + this.targetAddress + + '?amount=' + + +(Number(this.targetAmount) / NETWORK_DETAIL[this.network || DEFAULT_NETWORK].divideBy) + .toFixed(6) + .replace(/,/g, '.') + + '&unit=Mi', + ); + } + } + + private getTanglePayDeepLink(): SafeUrl { + if (!this.targetAddress || !this.targetAmount) { + return ''; + } + + // We want to round to maximum 6 digits. + if (this.network === Network.RMS || this.network === Network.SMR) { + if (this.tokenId && this.tokenAmount) { + return this.sanitizer.bypassSecurityTrustUrl( + 'tanglepay://iota_sendTransaction/' + + this.targetAddress + + '?value=' + + Number(this.tokenAmount).toFixed(0) + + '&network=shimmer&assetId=' + + this.tokenId + + '&tag=' + + WEN_NAME.toLowerCase(), + ); + } else { + return this.sanitizer.bypassSecurityTrustUrl( + 'tanglepay://send/' + + this.targetAddress + + '?value=' + + +(Number(this.targetAmount) / NETWORK_DETAIL[this.network].divideBy) + .toFixed(6) + .replace(/,/g, '.') + + '&unit=SMR' + + '&tag=' + + WEN_NAME.toLowerCase(), + ); + } + } else { + return this.sanitizer.bypassSecurityTrustUrl( + 'tanglepay://send/' + + this.targetAddress + + '?value=' + + +(Number(this.targetAmount) / NETWORK_DETAIL[this.network || DEFAULT_NETWORK].divideBy) + .toFixed(6) + .replace(/,/g, '.') + + '&unit=Mi' + + '&tag=' + + WEN_NAME.toLowerCase(), + ); + } + } +} diff --git a/src/app/components/wallet-deeplink/wallet-deeplink.module.ts b/src/app/components/wallet-deeplink/wallet-deeplink.module.ts new file mode 100644 index 0000000..8efbbf4 --- /dev/null +++ b/src/app/components/wallet-deeplink/wallet-deeplink.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { WalletDeeplinkComponent } from './wallet-deeplink.component'; + +@NgModule({ + declarations: [WalletDeeplinkComponent], + imports: [CommonModule, NzButtonModule], + exports: [WalletDeeplinkComponent], +}) +export class WalletDeeplinkModule {} diff --git a/src/app/pages/auth/auth-routing.module.ts b/src/app/pages/auth/auth-routing.module.ts new file mode 100644 index 0000000..3a0f964 --- /dev/null +++ b/src/app/pages/auth/auth-routing.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { SignInPage } from './pages/sign-in/sign-in.page'; + +const routes: Routes = [ + { + path: ROUTER_UTILS.config.auth.signIn, + component: SignInPage, + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class AuthRoutingModule {} diff --git a/src/app/pages/auth/auth.module.ts b/src/app/pages/auth/auth.module.ts new file mode 100644 index 0000000..060b50b --- /dev/null +++ b/src/app/pages/auth/auth.module.ts @@ -0,0 +1,10 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { AuthRoutingModule } from './auth-routing.module'; +import { SignInPage } from './pages/sign-in/sign-in.page'; + +@NgModule({ + declarations: [SignInPage], + imports: [CommonModule, AuthRoutingModule], +}) +export class AuthModule {} diff --git a/src/app/pages/auth/pages/sign-in/sign-in.page.html b/src/app/pages/auth/pages/sign-in/sign-in.page.html new file mode 100644 index 0000000..3ee5b19 --- /dev/null +++ b/src/app/pages/auth/pages/sign-in/sign-in.page.html @@ -0,0 +1,10 @@ +
    +

    You're not logged in!

    + +
    diff --git a/src/app/pages/auth/pages/sign-in/sign-in.page.less b/src/app/pages/auth/pages/sign-in/sign-in.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/auth/pages/sign-in/sign-in.page.ts b/src/app/pages/auth/pages/sign-in/sign-in.page.ts new file mode 100644 index 0000000..74ba81b --- /dev/null +++ b/src/app/pages/auth/pages/sign-in/sign-in.page.ts @@ -0,0 +1,28 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AuthService } from '@components/auth/services/auth.service'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; + +@Component({ + templateUrl: './sign-in.page.html', + styleUrls: ['./sign-in.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SignInPage { + returnUrl: string; + + constructor( + private router: Router, + private activatedRoute: ActivatedRoute, + private authService: AuthService, + ) { + this.returnUrl = + this.activatedRoute.snapshot.queryParamMap.get('returnUrl') || + `/${ROUTER_UTILS.config.base.home}`; + } + + onClickSignIn(): void { + this.authService.signIn(); + this.router.navigate([this.returnUrl]); + } +} diff --git a/src/app/pages/award/award-routing.module.ts b/src/app/pages/award/award-routing.module.ts new file mode 100644 index 0000000..646aab1 --- /dev/null +++ b/src/app/pages/award/award-routing.module.ts @@ -0,0 +1,38 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ROUTER_UTILS } from '../../@core/utils/router.utils'; +import { AwardPage } from './pages/award/award.page'; +import { NewPage } from './pages/new/new.page'; +import { OverviewPage } from './pages/overview/overview.page'; +import { ParticipantsPage } from './pages/participants/participants.page'; + +const routes: Routes = [ + { + path: ROUTER_UTILS.config.award.newAward, + component: NewPage, + }, + { + path: ROUTER_UTILS.config.award.award, + component: AwardPage, + children: [ + { + path: '', + redirectTo: ROUTER_UTILS.config.award.overview, + pathMatch: 'full', + }, + { path: ROUTER_UTILS.config.award.overview, component: OverviewPage }, + { path: ROUTER_UTILS.config.award.participants, component: ParticipantsPage }, + ], + }, + { + path: '', + redirectTo: '/' + ROUTER_UTILS.config.discover.root + '/' + ROUTER_UTILS.config.discover.awards, + pathMatch: 'full', + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class AwardRoutingModule {} diff --git a/src/app/pages/award/award.module.ts b/src/app/pages/award/award.module.ts new file mode 100644 index 0000000..f3f038c --- /dev/null +++ b/src/app/pages/award/award.module.ts @@ -0,0 +1,99 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { AwardAwardsModule } from '@components/award/components/award-awards/award-awards.module'; +import { AwardMintModule } from '@components/award/components/award-mint/award-mint.module'; +import { DrawerToggleModule } from '@components/drawer-toggle/drawer-toggle.module'; +import { IconModule } from '@components/icon/icon.module'; +import { MemberCardModule } from '@components/member/components/member-card/member-card.module'; +import { MobileSearchModule } from '@components/mobile-search/mobile-search.module'; +import { RadioModule } from '@components/radio/radio.module'; +import { ShareModule } from '@components/share/share.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { AwardInfoModule } from '@pages/award/pages/award/award-info/award-info.module'; +import { LayoutModule } from '@shell/ui/layout/layout.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzDropDownModule } from 'ng-zorro-antd/dropdown'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzGridModule } from 'ng-zorro-antd/grid'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzInputNumberModule } from 'ng-zorro-antd/input-number'; +import { NzMenuModule } from 'ng-zorro-antd/menu'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzRadioModule } from 'ng-zorro-antd/radio'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NzTypographyModule } from 'ng-zorro-antd/typography'; +import { NzUploadModule } from 'ng-zorro-antd/upload'; +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; +import { IpfsBadgeModule } from './../../@core/pipes/ipfs-badge/ipfs-badge.module'; +import { MarkDownModule } from './../../@core/pipes/markdown/markdown.module'; +import { TruncateModule } from './../../@core/pipes/truncate/truncate.module'; +import { AwardStatusModule } from './../../components/award/components/award-status/award-status.module'; +import { TabsModule } from './../../components/tabs/tabs.module'; +import { AwardRoutingModule } from './award-routing.module'; +import { AwardPage } from './pages/award/award.page'; +import { NewPage } from './pages/new/new.page'; +import { OverviewPage } from './pages/overview/overview.page'; +import { ParticipantsPage } from './pages/participants/participants.page'; +import { DataService } from './services/data.service'; + +@NgModule({ + declarations: [NewPage, AwardPage, OverviewPage, ParticipantsPage], + providers: [DataService], + imports: [ + CommonModule, + TabsModule, + TruncateModule, + LayoutModule, + InfiniteScrollModule, + FormatTokenModule, + IpfsBadgeModule, + AwardRoutingModule, + MarkDownModule, + ResizeAvatarModule, + ReactiveFormsModule, + MemberCardModule, + NzButtonModule, + NzSelectModule, + NzRadioModule, + RadioModule, + NzCardModule, + NzIconModule, + NzInputModule, + NzAvatarModule, + NzGridModule, + NzMenuModule, + NzTypographyModule, + NzTagModule, + NzFormModule, + AwardStatusModule, + NzModalModule, + NzSkeletonModule, + NzUploadModule, + NzDropDownModule, + NzAlertModule, + NzInputNumberModule, + NzToolTipModule, + NzDatePickerModule, + IconModule, + DrawerToggleModule, + NzDrawerModule, + AwardInfoModule, + AwardAwardsModule, + AwardMintModule, + MobileSearchModule, + FormsModule, + ShareModule, + ], +}) +export class AwardModule {} diff --git a/src/app/pages/award/pages/award/award-info/award-info.component.html b/src/app/pages/award/pages/award/award-info/award-info.component.html new file mode 100644 index 0000000..52d226d --- /dev/null +++ b/src/app/pages/award/pages/award/award-info/award-info.component.html @@ -0,0 +1,30 @@ + + + + + +
    + + + @{{ g.name || g.uid | truncate : [16] }} +
    +
    diff --git a/src/app/pages/award/pages/award/award-info/award-info.component.less b/src/app/pages/award/pages/award/award-info/award-info.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/award/pages/award/award-info/award-info.component.ts b/src/app/pages/award/pages/award/award-info/award-info.component.ts new file mode 100644 index 0000000..b6ecd31 --- /dev/null +++ b/src/app/pages/award/pages/award/award-info/award-info.component.ts @@ -0,0 +1,36 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { DataService } from '@pages/award/services/data.service'; +import { FILE_SIZES } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import duration from 'dayjs/plugin/duration'; +import * as relativeTime from 'dayjs/plugin/relativeTime'; +dayjs.extend(duration); +dayjs.extend(relativeTime); + +@Component({ + selector: 'wen-award-info', + templateUrl: './award-info.component.html', + styleUrls: ['./award-info.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AwardInfoComponent { + public descriptionTitles: string[] = [ + $localize`Badges used / available`, + $localize`End Date`, + $localize`Badge lock period`, + ]; + + constructor(public data: DataService) {} + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + public getDuration(ms: number): string { + return dayjs.duration(ms, 'millisecond').humanize(); + } +} diff --git a/src/app/pages/award/pages/award/award-info/award-info.module.ts b/src/app/pages/award/pages/award/award-info/award-info.module.ts new file mode 100644 index 0000000..995d9f1 --- /dev/null +++ b/src/app/pages/award/pages/award/award-info/award-info.module.ts @@ -0,0 +1,26 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { DescriptionModule } from '@components/description/description.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { AwardInfoComponent } from './award-info.component'; + +@NgModule({ + declarations: [AwardInfoComponent], + imports: [ + CommonModule, + NzButtonModule, + NzAvatarModule, + NzCardModule, + RouterModule, + TruncateModule, + ResizeAvatarModule, + DescriptionModule, + ], + exports: [AwardInfoComponent], +}) +export class AwardInfoModule {} diff --git a/src/app/pages/award/pages/award/award.page.html b/src/app/pages/award/pages/award/award.page.html new file mode 100644 index 0000000..3849497 --- /dev/null +++ b/src/app/pages/award/pages/award/award.page.html @@ -0,0 +1,228 @@ + + + + + + +
    +
    + + +

    {{(data.award$ | async)?.name}}

    + +
    +
    + + {{(data.award$ | async)?.createdOn?.toDate() | date:'short'}} +
    +
    + + + +
    + +
    + +
    +
    +
    + + + + +
    + +
    + +
    + +
    + + + + + + + + +
    + +
    +
    +
    + + + +

    + The whole communication is now handled outside the platform, let the award creator know how + to contact you. +

    + +
    + + +
    + + +
    +
    +
    + + +
    + + +

    {{(data.award$ | async)?.name}}

    + + + + + + + +
    +
    +
    + + diff --git a/src/app/pages/award/pages/award/award.page.less b/src/app/pages/award/pages/award/award.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/award/pages/award/award.page.ts b/src/app/pages/award/pages/award/award.page.ts new file mode 100644 index 0000000..f3565ac --- /dev/null +++ b/src/app/pages/award/pages/award/award.page.ts @@ -0,0 +1,239 @@ +import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { TokenApi } from '@api/token.api'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { SeoService } from '@core/services/seo'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/award/services/helper.service'; +import { Award, FILE_SIZES, GLOBAL_DEBOUNCE_TIME, Network } from '@soonaverse/interfaces'; +import { BehaviorSubject, debounceTime, first, skip, Subscription } from 'rxjs'; +import { AwardApi } from './../../../../@api/award.api'; +import { SpaceApi } from './../../../../@api/space.api'; +import { NavigationService } from './../../../../@core/services/navigation/navigation.service'; +import { NotificationService } from './../../../../@core/services/notification/notification.service'; +import { AuthService } from './../../../../components/auth/services/auth.service'; +import { DataService } from './../../services/data.service'; + +@UntilDestroy() +@Component({ + selector: 'wen-award', + changeDetection: ChangeDetectionStrategy.OnPush, + templateUrl: './award.page.html', + styleUrls: ['./award.page.less'], +}) +export class AwardPage implements OnInit, OnDestroy { + public sections = [ + { route: [ROUTER_UTILS.config.award.overview], label: $localize`Overview` }, + { route: [ROUTER_UTILS.config.award.participants], label: $localize`Participants` }, + ]; + public isSubmitParticipationModalVisible = false; + public commentControl: FormControl = new FormControl(''); + public isAwardInfoVisible = false; + public openAwardFund = false; + private subscriptions$: Subscription[] = []; + private memberSubscriptions$: Subscription[] = []; + + constructor( + private auth: AuthService, + private router: Router, + private notification: NotificationService, + private spaceApi: SpaceApi, + private route: ActivatedRoute, + private awardApi: AwardApi, + private tokenApi: TokenApi, + private seo: SeoService, + public data: DataService, + public helper: HelperService, + public previewImageService: PreviewImageService, + public nav: NavigationService, + public deviceService: DeviceService, + ) { + // none. + } + + public ngOnInit(): void { + this.deviceService.viewWithSearch$.next(false); + this.route.params?.pipe(untilDestroyed(this)).subscribe((obj) => { + const id: string | undefined = obj?.[ROUTER_UTILS.config.award.award.replace(':', '')]; + if (id) { + this.listenToAward(id); + } else { + this.notFound(); + } + }); + + // If we're unable to find the space we take the user out as well. + this.data.award$ + .pipe(skip(1), untilDestroyed(this), debounceTime(GLOBAL_DEBOUNCE_TIME)) + .subscribe((obj: Award | undefined) => { + if (!obj) { + this.notFound(); + return; + } + + // Once we load proposal let's load guardians for the space. + this.memberSubscriptions$.forEach((s) => { + s.unsubscribe(); + }); + if (this.auth.member$.value?.uid) { + this.memberSubscriptions$.push( + this.spaceApi + .isGuardianWithinSpace(obj.space, this.auth.member$.value.uid) + .pipe(untilDestroyed(this)) + .subscribe(this.data.isGuardianWithinSpace$), + ); + + this.memberSubscriptions$.push( + this.awardApi + .isMemberParticipant(obj.uid, this.auth.member$.value.uid) + .pipe(untilDestroyed(this)) + .subscribe(this.data.isParticipantWithinAward$), + ); + } + }); + + this.data.award$.pipe(skip(1), first()).subscribe((a) => { + if (a) { + this.seo.setTags($localize`Award` + ' - ' + a.name, a.description); + this.subscriptions$.push( + this.spaceApi.listen(a.space).pipe(untilDestroyed(this)).subscribe(this.data.space$), + ); + this.subscriptions$.push( + this.tokenApi + .listen(a.badge.tokenUid!) + .pipe(untilDestroyed(this)) + .subscribe(this.data.token$), + ); + } + }); + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + public get networkTypes(): typeof Network { + return Network; + } + + public get isLoggedIn$(): BehaviorSubject { + return this.auth.isLoggedIn$; + } + + public isMintingInProgress(award?: Award | null): boolean { + return !!(award && award.funded && (!award.aliasId || !award.collectionId)); + } + + private notFound(): void { + this.router.navigate([ROUTER_UTILS.config.errorResponse.notFound]); + } + + private listenToAward(id: string): void { + this.cancelSubscriptions(); + this.subscriptions$.push( + this.awardApi.listen(id).pipe(untilDestroyed(this)).subscribe(this.data.award$), + ); + this.subscriptions$.push( + this.awardApi.listenOwners(id).pipe(untilDestroyed(this)).subscribe(this.data.owners$), + ); + } + + public showParticipateModal(): void { + this.isSubmitParticipationModalVisible = true; + } + + public handleParticipateCancel(): void { + this.isSubmitParticipationModalVisible = false; + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public async approve(): Promise { + if (!this.data.award$.value?.uid) { + return; + } + + await this.auth.sign( + { + uid: this.data.award$.value.uid, + }, + (sc, finish) => { + this.notification + .processRequest(this.awardApi.approve(sc), 'Approved.', finish) + .subscribe(() => { + // none. + }); + }, + ); + } + + public async reject(): Promise { + if (!this.data.award$.value?.uid) { + return; + } + + await this.auth.sign( + { + uid: this.data.award$.value.uid, + }, + (sc, finish) => { + this.notification + .processRequest(this.awardApi.reject(sc), 'Rejected.', finish) + .subscribe(() => { + // none. + }); + }, + ); + } + + public async participate(): Promise { + this.isSubmitParticipationModalVisible = false; + if (!this.data.award$.value?.uid) { + return; + } + + await this.auth.sign( + { + uid: this.data.award$.value.uid, + comment: this.commentControl.value || undefined, + }, + (sc, finish) => { + this.notification + .processRequest(this.awardApi.participate(sc), 'Participated.', finish) + .subscribe(() => { + // Let's reset form field back to empty. + this.commentControl.setValue(''); + }); + }, + ); + } + + public getExplorerUrl(award?: Award | null): string { + if (award?.network === Network.RMS) { + return 'https://explorer.shimmer.network/testnet/block/' + award.collectionBlockId; + } else if (award?.network === Network.IOTA) { + return 'https://thetangle.org/search/' + award.collectionBlockId; + } else if (award?.network === Network.SMR) { + return 'https://explorer.shimmer.network/shimmer/block/' + award.collectionBlockId; + } else if (award?.network === Network.ATOI) { + return 'https://explorer.iota.org/devnet/search/' + award.collectionBlockId; + } else { + return ''; + } + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + this.data.resetSubjects(); + this.memberSubscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } +} diff --git a/src/app/pages/award/pages/new/new.page.html b/src/app/pages/award/pages/new/new.page.html new file mode 100644 index 0000000..a278e22 --- /dev/null +++ b/src/app/pages/award/pages/new/new.page.html @@ -0,0 +1,372 @@ + +

    New Award

    + +
    +
    +
    + + + + + Title + + + + +
    + + End + + + + +
    + + Description + + + + +
    + + + + +
    + + Title + + + + + + Description + + + + +
    +
    +
    + +
    + + + + + + + + + + {{s.name || s.uid}} + + + +
    + + Select a space +
    +
    + +
    + + {{ s.nzLabel }} +
    +
    +
    +
    +
    + + + + + + + + + + + {{t.name || t.uid}} + + + +
    + + Select a token +
    +
    + +
    + + {{ s.nzLabel }} +
    +
    +
    +
    + +

    + Defines the amount of tokens for each badge and the number of badges available. +

    + + + + + + + + + + + + +
    + + + + + + + + + + + +
    + +
    +
    + Total to be funded +
    +
    + {{ getCurrentToken() ? (( {value: getTotalTokens(), exponents: + getCurrentToken()?.decimals} | formatToken: getCurrentToken()?.uid: true: false | + async ) + ' ' + getCurrentToken()?.symbol) : ' - ' }} +
    +
    +
    + + + + + +
    + + + + + + jpeg/png/webp + + +
    + Badge is required. +
    +
    +
    + +

    + Set the duration for which the badge will be locked in the Firefly wallet. +

    + + + + + + + + + + + +
    +
    +
    +
    + + +
    +
    diff --git a/src/app/pages/award/pages/new/new.page.less b/src/app/pages/award/pages/new/new.page.less new file mode 100644 index 0000000..3bd89b7 --- /dev/null +++ b/src/app/pages/award/pages/new/new.page.less @@ -0,0 +1,7 @@ +.wen-radio-group { + display: grid; + input { + width: 100px; + margin-left: 10px; + } +} diff --git a/src/app/pages/award/pages/new/new.page.ts b/src/app/pages/award/pages/new/new.page.ts new file mode 100644 index 0000000..e60c6f5 --- /dev/null +++ b/src/app/pages/award/pages/new/new.page.ts @@ -0,0 +1,279 @@ +import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { SpaceApi } from '@api/space.api'; +import { TokenApi } from '@api/token.api'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { SeoService } from '@core/services/seo'; +import { UnitsService } from '@core/services/units'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { + FILE_SIZES, + PROD_AVAILABLE_MINTABLE_NETWORKS, + Space, + TEST_AVAILABLE_MINTABLE_NETWORKS, + Token, + TokenStatus, +} from '@soonaverse/interfaces'; +import { BehaviorSubject, of, Subscription, switchMap } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { AwardApi } from './../../../../@api/award.api'; +import { MemberApi } from './../../../../@api/member.api'; +import { NavigationService } from './../../../../@core/services/navigation/navigation.service'; +import { NotificationService } from './../../../../@core/services/notification/notification.service'; +import { AuthService } from './../../../../components/auth/services/auth.service'; + +import { FileApi } from '@api/file.api'; +import { getDefDecimalIfNotSet, Network } from '@soonaverse/interfaces'; +import { NzNotificationService } from 'ng-zorro-antd/notification'; +import { NzUploadChangeParam, NzUploadFile, NzUploadXHRArgs } from 'ng-zorro-antd/upload'; + +@UntilDestroy() +@Component({ + selector: 'wen-new', + changeDetection: ChangeDetectionStrategy.OnPush, + templateUrl: './new.page.html', + styleUrls: ['./new.page.less'], +}) +export class NewPage implements OnInit, OnDestroy { + public tokenControl: FormControl = new FormControl('', Validators.required); + public spaceControl: FormControl = new FormControl('', Validators.required); + public nameControl: FormControl = new FormControl('', Validators.required); + public endControl: FormControl = new FormControl('', Validators.required); + public descriptionControl: FormControl = new FormControl(''); + public imageControl: FormControl = new FormControl('', Validators.required); + public uploadedImage?: NzUploadFile | null; + // Badge + public badgeDescriptionControl: FormControl = new FormControl(''); + public badgeNameControl: FormControl = new FormControl('', Validators.required); + public badgeTokenControl: FormControl = new FormControl('', [ + Validators.min(0), + Validators.max(10000), + Validators.required, + ]); + public badgeCountControl: FormControl = new FormControl('', [ + Validators.min(0), + Validators.max(10000), + Validators.required, + ]); + public badgeLockPeriodControl: FormControl = new FormControl('', [ + Validators.min(0), + Validators.max(80 * 12), // 80 years. + Validators.required, + ]); + + public availableBaseTokens = environment.production + ? [...PROD_AVAILABLE_MINTABLE_NETWORKS] + : [...TEST_AVAILABLE_MINTABLE_NETWORKS]; + public awardForm: FormGroup; + public spaces$: BehaviorSubject = new BehaviorSubject([]); + public tokens$: BehaviorSubject = new BehaviorSubject([]); + private subscriptions$: Subscription[] = []; + + constructor( + private auth: AuthService, + private awardApi: AwardApi, + private tokenApi: TokenApi, + private notification: NotificationService, + private memberApi: MemberApi, + private route: ActivatedRoute, + private router: Router, + private seo: SeoService, + private spaceApi: SpaceApi, + public unitsService: UnitsService, + private nzNotification: NzNotificationService, + public nav: NavigationService, + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + private fileApi: FileApi, + ) { + this.awardForm = new FormGroup({ + space: this.spaceControl, + name: this.nameControl, + endDate: this.endControl, + description: this.descriptionControl, + badgeDescription: this.badgeDescriptionControl, + badgeName: this.badgeNameControl, + badgeToken: this.badgeTokenControl, + badgeCount: this.badgeCountControl, + badgeLockPeriod: this.badgeLockPeriodControl, + image: this.imageControl, + token: this.tokenControl, + }); + } + + public ngOnInit(): void { + if ( + this.nav.getLastUrl() && + this.nav.getLastUrl()[1] === ROUTER_UTILS.config.space.root && + this.nav.getLastUrl()[2] + ) { + this.spaceControl.setValue(this.nav.getLastUrl()[2]); + } + + this.seo.setTags( + $localize`Award - New`, + $localize`Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today.`, + ); + + this.route.params + ?.pipe( + filter((p) => p.space), + switchMap((p) => this.spaceApi.listen(p.space)), + filter((space) => !!space), + untilDestroyed(this), + ) + .subscribe((space) => { + this.spaceControl.setValue(space?.uid); + + this.seo.setTags( + $localize`Award - New`, + $localize`Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today.`, + space?.bannerUrl, + ); + }); + + this.auth.member$?.pipe(untilDestroyed(this)).subscribe((o) => { + if (o?.uid) { + this.subscriptions$.push(this.memberApi.allSpacesAsMember(o.uid).subscribe(this.spaces$)); + } + }); + + this.subscriptions$.push( + this.tokenApi + .top(undefined, 1) + .pipe( + map((tokens) => { + return tokens?.filter((t) => { + return ( + TEST_AVAILABLE_MINTABLE_NETWORKS.indexOf(t.mintingData?.network) > -1 || + t.status === TokenStatus.BASE + ); + }); + }), + ) + .subscribe(this.tokens$), + ); + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + public getTotalTokens(): number { + return Number(this.badgeCountControl.value) * Number(this.badgeTokenControl.value); + } + + public isBaseToken(token?: Token): boolean { + return token?.status === TokenStatus.BASE; + } + + public getCurrentToken(): Token | undefined { + const obj: any = this.tokens$.value.find((t) => { + return this.tokenControl.value === t.uid; + }); + + return obj; + } + + private memberIsLoggedOut(item: NzUploadXHRArgs): Subscription { + const err = $localize`Member seems to log out during the file upload request.`; + this.nzNotification.error(err, ''); + if (item.onError) { + item.onError(err, item.file); + } + + return of(undefined).subscribe(); + } + + public uploadFileBadge(item: NzUploadXHRArgs): Subscription { + if (!this.auth.member$.value) { + return this.memberIsLoggedOut(item); + } + + return this.fileApi.upload(this.auth.member$.value.uid, item); + } + + public uploadChangeBadge(event: NzUploadChangeParam): void { + if (event.type === 'success') { + this.imageControl.setValue(event.file.response); + this.uploadedImage = event.file; + } else { + this.imageControl.setValue(''); + } + } + + public get networkTypes(): typeof Network { + return Network; + } + + private formatSubmitObj(obj: any): any { + obj.badge = { + description: obj.badgeDescription, + name: obj.badgeName, + tokenReward: + obj.badgeToken * Math.pow(10, getDefDecimalIfNotSet(this.getCurrentToken()?.decimals)), + total: obj.badgeCount, + image: obj.image, + tokenSymbol: this.getCurrentToken()?.symbol, + lockTime: Math.floor(obj.badgeLockPeriod * (365.2425 / 12) * 24 * 60 * 60 * 1000), + }; + + obj.network = this.getCurrentToken()?.mintingData?.network; + delete obj.image; + delete obj.badgeDescription; + delete obj.badgeName; + delete obj.badgeToken; + delete obj.badgeCount; + delete obj.badgeLockPeriod; + delete obj.token; + return obj; + } + + private validateForm(): boolean { + this.awardForm.updateValueAndValidity(); + if (!this.awardForm.valid) { + Object.values(this.awardForm.controls).forEach((control) => { + if (control.invalid) { + control.markAsDirty(); + control.updateValueAndValidity({ onlySelf: true }); + } + }); + + return false; + } + + return true; + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + public async create(): Promise { + if (!this.validateForm()) { + return; + } + + await this.auth.sign(this.formatSubmitObj(this.awardForm.value), (sc, finish) => { + this.notification + .processRequest(this.awardApi.create(sc), 'Created.', finish) + .subscribe((val) => { + this.router.navigate([ROUTER_UTILS.config.award.root, val?.uid]); + }); + }); + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/award/pages/overview/overview.page.html b/src/app/pages/award/pages/overview/overview.page.html new file mode 100644 index 0000000..4ae09ef --- /dev/null +++ b/src/app/pages/award/pages/overview/overview.page.html @@ -0,0 +1,13 @@ +
    + +

    +
    + + +

    +
    +
    diff --git a/src/app/pages/award/pages/overview/overview.page.less b/src/app/pages/award/pages/overview/overview.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/award/pages/overview/overview.page.ts b/src/app/pages/award/pages/overview/overview.page.ts new file mode 100644 index 0000000..4a01ccc --- /dev/null +++ b/src/app/pages/award/pages/overview/overview.page.ts @@ -0,0 +1,19 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { SeoService } from '@core/services/seo'; +import { DataService } from './../../services/data.service'; + +@Component({ + selector: 'wen-overview', + changeDetection: ChangeDetectionStrategy.OnPush, + templateUrl: './overview.page.html', + styleUrls: ['./overview.page.less'], +}) +export class OverviewPage implements OnInit { + constructor(public data: DataService, private seo: SeoService) { + // none. + } + + public ngOnInit(): void { + this.seo.setTags($localize`Award -`, undefined, this.data.space$.value?.bannerUrl); + } +} diff --git a/src/app/pages/award/pages/participants/participants.page.html b/src/app/pages/award/pages/participants/participants.page.html new file mode 100644 index 0000000..5150dc2 --- /dev/null +++ b/src/app/pages/award/pages/participants/participants.page.html @@ -0,0 +1,145 @@ +
    +
    +
    +
    + + + {{ tag.label }} + + + + + + + + +
    + + + + + + + + + + +
    + + + + + + + +
    + + No Participants + +
    +
    + + + + + + + + +
      +
    • + Reward again +
    • +
    +
    +
    +
    +
    +
    diff --git a/src/app/pages/award/pages/participants/participants.page.less b/src/app/pages/award/pages/participants/participants.page.less new file mode 100644 index 0000000..b19e90e --- /dev/null +++ b/src/app/pages/award/pages/participants/participants.page.less @@ -0,0 +1,29 @@ +@input-radius: 2.125rem; + +// Note: Haven't find better (and working) way of overriding these nested styles than +// using deprecated ::ng-deep. Change it if you know better approach. +nz-input-group ::ng-deep { + .ant-input-group-addon:last-child { + @apply bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark; + border-top-right-radius: @input-radius; + border-bottom-right-radius: @input-radius; + } + + .ant-input-group .ant-input-affix-wrapper { + .ant-input-prefix { + @apply mr-3; + } + + &:not(:last-child) { + @apply border-0 h-14 pl-4; + border-top-left-radius: @input-radius; + border-bottom-left-radius: @input-radius; + } + + &:hover { + // there is a `border-right-width: 1px !important` style inside ng-zorro, + // thus we need important too :/ + border-right-width: 0 !important; + } + } +} diff --git a/src/app/pages/award/pages/participants/participants.page.ts b/src/app/pages/award/pages/participants/participants.page.ts new file mode 100644 index 0000000..d8e279c --- /dev/null +++ b/src/app/pages/award/pages/participants/participants.page.ts @@ -0,0 +1,282 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { SeoService } from '@core/services/seo'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/award/services/helper.service'; +import { COL, GLOBAL_DEBOUNCE_TIME, Member } from '@soonaverse/interfaces'; +import { BehaviorSubject, debounceTime, first, from, skip, Subscription } from 'rxjs'; +import { DataService } from '../../services/data.service'; +import { AwardApi, AwardParticipantWithMember } from './../../../../@api/award.api'; +import { DEFAULT_LIST_SIZE } from './../../../../@api/base.api'; +import { NotificationService } from './../../../../@core/services/notification/notification.service'; +import { AuthService } from './../../../../components/auth/services/auth.service'; + +enum FilterOptions { + PENDING = 'pending', + ISSUED = 'issued', +} + +@UntilDestroy() +@Component({ + selector: 'wen-participants', + changeDetection: ChangeDetectionStrategy.OnPush, + templateUrl: './participants.page.html', + styleUrls: ['./participants.page.less'], +}) +export class ParticipantsPage implements OnInit, OnDestroy { + public awardId?: string; + public selectedListControl: FormControl = new FormControl(FilterOptions.PENDING); + public pendingParticipants$: BehaviorSubject = + new BehaviorSubject(undefined); + public issuedParticipants$: BehaviorSubject = + new BehaviorSubject(undefined); + public search$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public filterControl: FormControl = new FormControl(undefined); + public overTenRecords = false; + public hotTags: { value: FilterOptions; label: string }[] = [ + { value: FilterOptions.PENDING, label: $localize`Pending` }, + { value: FilterOptions.ISSUED, label: $localize`Issued` }, + ]; + public static DEBOUNCE_TIME = GLOBAL_DEBOUNCE_TIME; + private subscriptions$: Subscription[] = []; + private dataStorePending: AwardParticipantWithMember[][] = []; + private dataStoreIssued: AwardParticipantWithMember[][] = []; + + constructor( + private auth: AuthService, + private awardApi: AwardApi, + public readonly algoliaService: AlgoliaService, + private router: Router, + private route: ActivatedRoute, + private notification: NotificationService, + private cd: ChangeDetectorRef, + private seo: SeoService, + public data: DataService, + public helper: HelperService, + public deviceService: DeviceService, + public cache: CacheService, + ) { + // none. + } + + public ngOnInit(): void { + this.route.parent?.params.subscribe((obj) => { + const id: string | undefined = obj?.[ROUTER_UTILS.config.award.award.replace(':', '')]; + if (id) { + this.cancelSubscriptions(); + this.awardId = id; + + this.seo.setTags( + $localize`Award -`, + $localize`See all participants within the award.`, + this.data.space$.value?.bannerUrl, + ); + } else { + this.router.navigate([ROUTER_UTILS.config.errorResponse.notFound]); + } + }); + + this.selectedListControl.valueChanges.pipe(untilDestroyed(this)).subscribe(() => { + if (this.search$.value && this.search$.value.length > 0) { + this.search$.next(this.search$.value); + } else { + this.onScroll(); + } + this.cd.markForCheck(); + }); + + this.search$.pipe(skip(1), untilDestroyed(this)).subscribe((val) => { + // We need reset old values. + this.resetParticipantsList(); + this.overTenRecords = false; + if (val && val.length > 0) { + from( + this.algoliaService.searchClient + .initIndex(COL.MEMBER) + .search(val || '', { length: 5, offset: 0 }), + ) + .pipe(first()) + .subscribe((r) => { + const ids: string[] = r.hits.map((r) => { + const member = r as unknown as Member; + return member.uid; + }); + + // Top 10 records only supported + this.overTenRecords = ids.length > 10; + this.onScroll(ids.slice(0, 10)); + }); + } else { + // Show normal list again. + this.onScroll(); + } + }); + + this.filterControl.valueChanges + .pipe(debounceTime(ParticipantsPage.DEBOUNCE_TIME)) + .subscribe(this.search$); + + // Load initial list. + this.onScroll(); + } + + public onScroll(searchIds?: string[]): void { + if (!this.awardId) { + return; + } + + this.onParticipantScroll(this.awardId, this.selectedListControl.value, searchIds); + } + + public onParticipantScroll(awardId: string, list: FilterOptions, searchIds?: string[]): void { + let store; + let handler; + let stream; + if (list === FilterOptions.PENDING) { + store = this.dataStorePending; + stream = this.pendingParticipants$.value; + handler = this.listenPendingParticipant; + } else { + store = this.dataStoreIssued; + stream = this.issuedParticipants$.value; + handler = this.listenIssuedParticipant; + } + + // Make sure we allow initial load store[0] + if ( + store[0] && + (!store[store.length - 1] || store[store.length - 1]?.length < DEFAULT_LIST_SIZE) + ) { + // Finished paging. + return; + } + + // For initial load stream will not be defiend. + const lastValue = stream ? stream[stream.length - 1].participatedOn : undefined; + handler.call(this, awardId, lastValue, searchIds); + } + + public listenPendingParticipant(awardId: string, lastValue?: any, searchIds?: string[]): void { + this.subscriptions$.push( + this.awardApi + .listenPendingParticipants(awardId, lastValue, searchIds) + .subscribe( + this.store.bind( + this, + this.pendingParticipants$, + this.dataStorePending, + this.dataStorePending.length, + ), + ), + ); + } + + public listenIssuedParticipant(awardId: string, lastValue?: any, searchIds?: string[]): void { + this.subscriptions$.push( + this.awardApi + .listenIssuedParticipants(awardId, lastValue, searchIds) + .subscribe( + this.store.bind( + this, + this.issuedParticipants$, + this.dataStoreIssued, + this.dataStoreIssued.length, + ), + ), + ); + } + + protected store( + stream$: BehaviorSubject, + store: any[][], + page: number, + a: any, + ): void { + if (store[page]) { + store[page] = a; + } else { + store.push(a); + } + + // Merge arrays. + stream$.next(Array.prototype.concat.apply([], store)); + } + + public async approve(memberId: string): Promise { + const id: string | undefined = this.data.award$?.value?.uid; + if (!id) { + return; + } + + await this.auth.sign( + { + award: id, + members: [memberId], + }, + (sc, finish) => { + this.notification + .processRequest(this.awardApi.approveParticipant(sc), 'Approve.', finish) + .subscribe(() => { + // none. + }); + }, + ); + } + + public handleFilterChange(filter: FilterOptions): void { + this.selectedListControl.setValue(filter); + this.cd.markForCheck(); + } + + public get filterOptions(): typeof FilterOptions { + return FilterOptions; + } + + public getList(): BehaviorSubject { + if (this.selectedListControl.value === this.filterOptions.PENDING) { + return this.pendingParticipants$; + } else { + return this.issuedParticipants$; + } + } + + public getMemberCreatedOnLabel(): string { + return $localize`applied on`; + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + private resetParticipantsList(): void { + this.dataStorePending = []; + this.dataStoreIssued = []; + this.pendingParticipants$.next(undefined); + this.issuedParticipants$.next(undefined); + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + + this.resetParticipantsList(); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/award/services/data.service.ts b/src/app/pages/award/services/data.service.ts new file mode 100644 index 0000000..5246dec --- /dev/null +++ b/src/app/pages/award/services/data.service.ts @@ -0,0 +1,41 @@ +import { Injectable } from '@angular/core'; +import { AwardParticipantWithMember } from '@api/award.api'; +import { Award, Member, Space, Token } from '@soonaverse/interfaces'; +import { BehaviorSubject } from 'rxjs'; + +@Injectable({ + providedIn: 'any', +}) +export class DataService { + public award$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public space$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public token$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public owners$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public isGuardianWithinSpace$: BehaviorSubject = new BehaviorSubject(false); + public isParticipantWithinAward$: BehaviorSubject = new BehaviorSubject(false); + + public isLoading(arr: AwardParticipantWithMember[] | null | undefined): boolean { + return arr === undefined; + } + + public isEmpty(arr: AwardParticipantWithMember[] | null | undefined): boolean { + return Array.isArray(arr) && arr.length === 0; + } + + public resetSubjects(): void { + // Clean up all streams. + this.award$.next(undefined); + this.space$.next(undefined); + this.owners$.next(undefined); + this.isGuardianWithinSpace$.next(false); + this.isParticipantWithinAward$.next(false); + } +} diff --git a/src/app/pages/award/services/helper.service.ts b/src/app/pages/award/services/helper.service.ts new file mode 100644 index 0000000..ad08b88 --- /dev/null +++ b/src/app/pages/award/services/helper.service.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core'; +import { Award } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; + +@Injectable({ + providedIn: 'root', +}) +export class HelperService { + public getExperiencePointsPerBadge(award: Award | undefined | null): number { + if (award?.badge?.tokenReward && award.badge.tokenReward > 0 && award?.badge?.total > 1) { + return (award.badge.tokenReward || 0) / (award.badge.total || 0); + } else { + return award?.badge?.tokenReward || 0; + } + } + + public isCompleted(award: Award | undefined | null): boolean { + if (!award) { + return false; + } + + return ( + award.issued >= award.badge.total || + (dayjs(award?.endDate.toDate()).isBefore(dayjs()) && award.approved) + ); + } + + public getShareUrl(award?: Award | null): string { + return award?.wenUrl || window?.location.href; + } +} diff --git a/src/app/pages/collection/collection-routing.module.ts b/src/app/pages/collection/collection-routing.module.ts new file mode 100644 index 0000000..55d3363 --- /dev/null +++ b/src/app/pages/collection/collection-routing.module.ts @@ -0,0 +1,26 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { CollectionPage } from './pages/collection/collection.page'; +import { UpsertPage } from './pages/upsert/upsert.page'; + +const routes: Routes = [ + { + path: ROUTER_UTILS.config.collection.new, + component: UpsertPage, + }, + { + path: ROUTER_UTILS.config.collection.edit, + component: UpsertPage, + }, + { + path: ROUTER_UTILS.config.collection.collection, + component: CollectionPage, + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class CollectionRoutingModule {} diff --git a/src/app/pages/collection/collection.module.ts b/src/app/pages/collection/collection.module.ts new file mode 100644 index 0000000..c79cc5b --- /dev/null +++ b/src/app/pages/collection/collection.module.ts @@ -0,0 +1,103 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { AlgoliaModule } from '@components/algolia/algolia.module'; +import { BadgeModule } from '@components/badge/badge.module'; +import { CollapseModule } from '@components/collapse/collapse.module'; +import { CollectionMintNetworkModule } from '@components/collection/components/collection-mint-network/collection-mint-network.module'; +import { CollectionStatusModule } from '@components/collection/components/collection-status/collection-status.module'; +import { DrawerToggleModule } from '@components/drawer-toggle/drawer-toggle.module'; +import { DrawerModule } from '@components/drawer/drawer.module'; +import { IconModule } from '@components/icon/icon.module'; +import { IotaInputModule } from '@components/iota-input/iota-input.module'; +import { NftCardModule } from '@components/nft/components/nft-card/nft-card.module'; +import { RadioModule } from '@components/radio/radio.module'; +import { SelectSpaceModule } from '@components/space/components/select-space/select-space.module'; +import { OnVisibleModule } from '@core/directives/on-visible/on-visible.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { IpfsBadgeModule } from '@core/pipes/ipfs-badge/ipfs-badge.module'; +import { MarkDownModule } from '@core/pipes/markdown/markdown.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { FilterService } from '@pages/market/services/filter.service'; +import { LayoutModule } from '@shell/ui/layout/layout.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzGridModule } from 'ng-zorro-antd/grid'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzInputNumberModule } from 'ng-zorro-antd/input-number'; +import { NzRadioModule } from 'ng-zorro-antd/radio'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NzTypographyModule } from 'ng-zorro-antd/typography'; +import { NzUploadModule } from 'ng-zorro-antd/upload'; +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; +import { AuditOneModule } from 'src/app/service-modules/audit-one/audit-one.module'; +import { CollectionRoutingModule } from './collection-routing.module'; +import { CollectionAboutComponent } from './pages/collection/collection-about/collection-about.component'; +import { CollectionPage } from './pages/collection/collection.page'; +import { CollectionNFTsPage } from './pages/collection/nfts/nfts.page'; +import { UpsertPage } from './pages/upsert/upsert.page'; +import { DataService } from './services/data.service'; + +@NgModule({ + declarations: [CollectionPage, UpsertPage, CollectionAboutComponent, CollectionNFTsPage], + imports: [ + AlgoliaModule, + InfiniteScrollModule, + CommonModule, + CollectionRoutingModule, + LayoutModule, + NzDatePickerModule, + ResizeAvatarModule, + CollectionStatusModule, + NzButtonModule, + FormsModule, + CollapseModule, + DrawerModule, + NzDrawerModule, + FormatTokenModule, + NzInputNumberModule, + SelectSpaceModule, + ReactiveFormsModule, + NzCardModule, + MarkDownModule, + NzFormModule, + NzGridModule, + NzInputModule, + TruncateModule, + IconModule, + NzTypographyModule, + NzUploadModule, + NzSelectModule, + RadioModule, + NzRadioModule, + NzIconModule, + NzAvatarModule, + BadgeModule, + NzDrawerModule, + IconModule, + DrawerToggleModule, + NzTagModule, + NzSkeletonModule, + NftCardModule, + OnVisibleModule, + InfiniteScrollModule, + NzToolTipModule, + AuditOneModule, + NzCheckboxModule, + IpfsBadgeModule, + IotaInputModule, + CollectionMintNetworkModule, + ], + providers: [DataService, FilterService], +}) +export class CollectionModule {} diff --git a/src/app/pages/collection/pages/collection/collection-about/collection-about.component.html b/src/app/pages/collection/pages/collection/collection-about/collection-about.component.html new file mode 100644 index 0000000..4cf058f --- /dev/null +++ b/src/app/pages/collection/pages/collection/collection-about/collection-about.component.html @@ -0,0 +1,213 @@ + +
    + Make NFT’s from this collection available on decentralised network. +
    + + + +
    + Collection is not yet migrated to the decentralized network. +
    +
    + + +
    +
    + + +
    + Open sale +
    +
    +
    + + +
    + Space Members Only +
    +
    +
    + + +
    + Space Guardians Only +
    +
    +
    + + +
    + Space Members with Badge Only +
    +
    +
    + + +
    + Must hold at least one NFT from each selected Collections +
    +
    +
    + (One NFT per member) +
    + +
    +
    + + +
    {{ (cache.getCollection(collection) | async)?.name }}
    +
    +
    +
    + +
    + + +
    +
    + + + + +
    +
    + + +
    + {{ item.amount * 100 }}% + discount for members with rewards from this space in total value of {{ item.tokenReward | formatToken : item.tokenUid : true : false | async }} + {{ + item.tokenSymbol | uppercase + }} +
    +
    +
    +
    + + + + + +
    +
    diff --git a/src/app/pages/collection/pages/collection/collection-about/collection-about.component.less b/src/app/pages/collection/pages/collection/collection-about/collection-about.component.less new file mode 100644 index 0000000..5696877 --- /dev/null +++ b/src/app/pages/collection/pages/collection/collection-about/collection-about.component.less @@ -0,0 +1,3 @@ +.wen-link-padding { + @apply py-2 !important; +} diff --git a/src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts b/src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts new file mode 100644 index 0000000..15cb6af --- /dev/null +++ b/src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts @@ -0,0 +1,71 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { SpaceApi } from '@api/space.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/collection/services/helper.service'; +import { Access, FILE_SIZES, Network } from '@soonaverse/interfaces'; +import { BehaviorSubject, combineLatest, of, switchMap } from 'rxjs'; +import { DataService } from '../../../services/data.service'; + +@UntilDestroy() +@Component({ + selector: 'wen-collection-about', + templateUrl: './collection-about.component.html', + styleUrls: ['./collection-about.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CollectionAboutComponent implements OnInit { + public isMintOnNetorkVisible = false; + public isGuardianWithinSpace$: BehaviorSubject = new BehaviorSubject(false); + + constructor( + public data: DataService, + public helper: HelperService, + public deviceService: DeviceService, + public cache: CacheService, + public previewImageService: PreviewImageService, + public unitService: UnitsService, + private auth: AuthService, + private spaceApi: SpaceApi, + ) { + // none. + } + + public ngOnInit(): void { + combineLatest([this.auth.member$, this.data.collection$]) + .pipe( + switchMap(([member, collection]) => { + if (member && collection?.space) { + return this.spaceApi.isGuardianWithinSpace(collection?.space, member?.uid); + } + return of(null); + }), + untilDestroyed(this), + ) + .subscribe((isGuardianWithinSpace) => { + if (isGuardianWithinSpace !== null) { + this.isGuardianWithinSpace$.next(isGuardianWithinSpace); + } + }); + } + + public get access(): typeof Access { + return Access; + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + public get networkTypes(): typeof Network { + return Network; + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } +} diff --git a/src/app/pages/collection/pages/collection/collection.page.html b/src/app/pages/collection/pages/collection/collection.page.html new file mode 100644 index 0000000..b6d0c39 --- /dev/null +++ b/src/app/pages/collection/pages/collection/collection.page.html @@ -0,0 +1,424 @@ + + + + + + +
    + + +
    + Limited edition +
    +
    + +
    +
    + + +

    {{ (data.collection$ | async)?.name }}

    + +
    + + + +
    + +
    + + + +
    +
    Space
    +
    {{ (data.space$ | async)?.name | truncate:[12] }}
    +
    +
    + + + + +
    +
    Royalties goes to
    +
    + {{ (data.royaltySpace$ | async)?.name | truncate:[12] }} +
    +
    +
    + +
    + +
    + {{ helper.getCategory((data.collection$ | async)?.category) }} +
    +
    + +
    + + + +
    + {{(data.collectionStats$ | async)?.votes?.upvotes || 0 | number: '1.0-2'}} +
    + + + + +
    + {{(data.collectionStats$ | async)?.votes?.downvotes || 0 | number: '1.0-2'}} +
    +
    + + + +
    + Rank +
    +
    +
    + {{(data.collectionStats$ | async)?.ranks?.avg || 0 | number: '1.0-2'}} + ({{(data.collectionStats$ | async)?.ranks?.count || 0 | number: '1.0-2'}}) +
    +
    +
    +
    + +
    + +
    + Starts at + + {{ (data.collection$ | async)?.availableFrom?.toDate() | date:'medium' }} +
    +
    + +
    +
    +
    Deposited
    +
    {{ (data.collection$ | async)?.total || 0}}
    +
    + +
    +
    Floor Price
    +
    + {{ (data.collection$ | async)?.floorPrice ? ((data.collection$ | async)?.floorPrice | + formatToken: (data.collection$ | async)?.mintingData?.network: false: true: 2 | async) : + '-'}} +
    +
    + +
    +
    Staked
    +
    + {{ (data.collection$ | async)?.stakedNft || 0 }} +
    +
    + +
    +
    Links
    + +
    +
    + +
    + {{ (data.collection$ | async)?.description }} +
    + See more + +
    +
    + See less +
    +
    +
    + +
    + + + + + + +
    + +
    +
    + +
    +
    +
    + + +
    + + + +
    + +
    +
    + +
    +
    +
    + +
    + +
    + + +
    + +
    + + + +
    diff --git a/src/app/pages/collection/pages/collection/collection.page.less b/src/app/pages/collection/pages/collection/collection.page.less new file mode 100644 index 0000000..1667c07 --- /dev/null +++ b/src/app/pages/collection/pages/collection/collection.page.less @@ -0,0 +1,21 @@ +// .wen-nft-card { +// width: 47%; +// @apply outline-none lg:w-auto; +// } + +.text-concat { + position: relative; + display: inline-block; + word-wrap: break-word; + overflow: hidden; + max-height: 3.6em; /* (Number of lines you want visible) * (line-height) */ + line-height: 1.2em; + text-align: justify; +} + +.text.ellipsis::after { + content: '...'; + position: absolute; + right: -12px; + bottom: 4px; +} diff --git a/src/app/pages/collection/pages/collection/collection.page.ts b/src/app/pages/collection/pages/collection/collection.page.ts new file mode 100644 index 0000000..e6e0c9e --- /dev/null +++ b/src/app/pages/collection/pages/collection/collection.page.ts @@ -0,0 +1,339 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AwardApi } from '@api/award.api'; +import { CollectionApi } from '@api/collection.api'; +import { MemberApi } from '@api/member.api'; +import { NftApi } from '@api/nft.api'; +import { SpaceApi } from '@api/space.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { SeoService } from '@core/services/seo'; +import { UnitsService } from '@core/services/units'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/collection/services/helper.service'; +import { + Award, + COL, + Collection, + CollectionType, + FILE_SIZES, + GLOBAL_DEBOUNCE_TIME, + Network, + RANKING, + RANKING_TEST, +} from '@soonaverse/interfaces'; +import { NzNotificationService } from 'ng-zorro-antd/notification'; +import { BehaviorSubject, first, firstValueFrom, skip, Subscription } from 'rxjs'; +import { DataService } from '../../services/data.service'; +import { NotificationService } from './../../../../@core/services/notification/notification.service'; + +@UntilDestroy() +@Component({ + selector: 'wen-collection', + templateUrl: './collection.page.html', + styleUrls: ['./collection.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CollectionPage implements OnInit, OnDestroy { + public isAboutCollectionVisible = false; + public seeMore = false; + public rankingConfig = environment.production === true ? RANKING : RANKING_TEST; + public showNfts$ = new BehaviorSubject(false); + private guardiansSubscription$?: Subscription; + private guardiansRankModeratorSubscription$?: Subscription; + private subscriptions$: Subscription[] = []; + + constructor( + public deviceService: DeviceService, + public data: DataService, + public helper: HelperService, + public previewImageService: PreviewImageService, + public auth: AuthService, + public unitsService: UnitsService, + private notification: NotificationService, + private nzNotification: NzNotificationService, + private spaceApi: SpaceApi, + private awardApi: AwardApi, + private memberApi: MemberApi, + private collectionApi: CollectionApi, + private nftApi: NftApi, + private cd: ChangeDetectorRef, + private route: ActivatedRoute, + private router: Router, + private seo: SeoService, + ) {} + + public ngOnInit(): void { + this.deviceService.viewWithSearch$.next(true); + this.route.params?.pipe(untilDestroyed(this)).subscribe((obj) => { + const id: string | undefined = + obj?.[ROUTER_UTILS.config.collection.collection.replace(':', '')]; + if (id) { + this.listenToCollection(id); + } else { + this.notFound(); + } + }); + + this.auth.member$.pipe(untilDestroyed(this)).subscribe(() => { + // Once we load proposal let's load guardians for the space. + if (this.guardiansRankModeratorSubscription$) { + this.guardiansRankModeratorSubscription$.unsubscribe(); + } + + if (this.auth.member$.value?.uid) { + this.guardiansRankModeratorSubscription$ = this.spaceApi + .isGuardianWithinSpace(this.rankingConfig.collectionSpace, this.auth.member$.value.uid) + .pipe(untilDestroyed(this)) + .subscribe((v) => { + this.data.isGuardianInRankModeratorSpace$.next(v); + }); + } + }); + + this.data.collection$ + .pipe(skip(1), untilDestroyed(this)) + .subscribe(async (obj: Collection | undefined) => { + if (!obj) { + this.notFound(); + return; + } + + this.seo.setTags('Collection - ' + obj.name, obj.description, obj.bannerUrl); + + // Once we load proposal let's load guardians for the space. + if (this.guardiansSubscription$) { + this.guardiansSubscription$.unsubscribe(); + } + + if (this.auth.member$.value?.uid) { + this.guardiansSubscription$ = this.spaceApi + .isGuardianWithinSpace(obj.space, this.auth.member$.value.uid) + .pipe(untilDestroyed(this)) + .subscribe(this.data.isGuardianWithinSpace$); + } + + // Get badges to show. + const awards: Award[] = []; + if (obj.accessAwards?.length) { + for (const a of obj.accessAwards) { + const award: Award | undefined = await firstValueFrom(this.awardApi.listen(a)); + if (award) { + awards.push(award); + } + } + } + + this.data.accessBadges$.next(awards); + if (obj.accessCollections?.length) { + this.data.accessCollections$.next(obj.accessCollections); + } + }); + + this.data.collection$.pipe(skip(1), first()).subscribe(async (p) => { + if (p) { + this.subscriptions$.push( + this.spaceApi.listen(p.space).pipe(untilDestroyed(this)).subscribe(this.data.space$), + ); + if (p.royaltiesSpace) { + this.subscriptions$.push( + this.spaceApi + .listen(p.royaltiesSpace) + .pipe(untilDestroyed(this)) + .subscribe(this.data.royaltySpace$), + ); + } + if (p.createdBy) { + this.subscriptions$.push( + this.memberApi + .listen(p.createdBy) + .pipe(untilDestroyed(this)) + .subscribe(this.data.creator$), + ); + } + } + }); + const t = setInterval(() => { + if (this.data.collection$.value?.uid) { + this.showNfts$.next(true); + clearInterval(t); + } + }, GLOBAL_DEBOUNCE_TIME); + } + + public createNft(): void { + this.router.navigate([ + '/' + ROUTER_UTILS.config.nft.root, + ROUTER_UTILS.config.nft.newNft, + { collection: this.data.collectionId }, + ]); + } + + private notFound(): void { + this.router.navigate([ROUTER_UTILS.config.errorResponse.notFound]); + } + + private listenToCollection(id: string): void { + this.cancelSubscriptions(); + this.data.collectionId = id; + this.data.loadServiceModuleData(id); + this.subscriptions$.push( + this.collectionApi.listen(id)?.pipe(untilDestroyed(this)).subscribe(this.data.collection$), + ); + this.subscriptions$.push(this.collectionApi.stats(id).subscribe(this.data.collectionStats$)); + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + public get collectionTypes(): typeof CollectionType { + return CollectionType; + } + + public async approve(): Promise { + if (!this.data.collection$.value?.uid) { + return; + } + + await this.auth.sign( + { + uid: this.data.collection$.value.uid, + }, + (sc, finish) => { + this.notification + .processRequest(this.collectionApi.approve(sc), 'Approved.', finish) + .subscribe(() => { + // none. + }); + }, + ); + } + + public async reject(): Promise { + if (!this.data.collection$.value?.uid) { + return; + } + + await this.auth.sign( + { + uid: this.data.collection$.value.uid, + }, + (sc, finish) => { + this.notification + .processRequest(this.collectionApi.reject(sc), 'Rejected.', finish) + .subscribe(() => { + // none. + }); + }, + ); + } + + public edit(): void { + if (!this.data.space$.value?.uid) { + return; + } + + this.router.navigate([ + ROUTER_UTILS.config.collection.root, + ROUTER_UTILS.config.collection.edit, + { + collectionId: this.data.collection$.value?.uid, + }, + ]); + } + + public async vote(direction: -1 | 0 | 1): Promise { + if (!this.data.collection$?.value?.uid) { + return; + } + + await this.auth.sign( + { collection: COL.COLLECTION, uid: this.data.collection$.value.uid, direction }, + (sc, finish) => { + this.notification + .processRequest(this.collectionApi.vote(sc), 'Voted', finish) + .subscribe(() => { + // none. + }); + }, + ); + } + + public async rank(): Promise { + if (!this.data.collection$?.value?.uid) { + return; + } + + const rankUnparsed: string | null = prompt('Enter your rank!\nEither OK or Cancel.'); + if (!rankUnparsed) { + return; + } + + const rank = parseInt(rankUnparsed); + if (!(rank >= this.rankingConfig.MIN_RANK && rank <= this.rankingConfig.MAX_RANK)) { + this.nzNotification.error( + $localize`Rank amount must be between ` + + this.rankingConfig.MIN_RANK + + ' -> ' + + this.rankingConfig.MAX_RANK, + '', + ); + return; + } + + await this.auth.sign( + { collection: COL.COLLECTION, uid: this.data.collection$.value.uid, rank }, + (sc, finish) => { + this.notification + .processRequest(this.collectionApi.rank(sc), 'Ranked', finish) + .subscribe(() => { + // none. + }); + }, + ); + } + + public isLoading(arr: any): boolean { + return arr === undefined; + } + + public isEmpty(arr: any): boolean { + return Array.isArray(arr) && arr.length === 0; + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + + this.data.reset(); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + this.guardiansSubscription$?.unsubscribe(); + } + + public get networkTypes(): typeof Network { + return Network; + } + + public collapseInfo() { + this.seeMore = !this.seeMore; + this.cd.markForCheck(); + } +} diff --git a/src/app/pages/collection/pages/collection/nfts/nfts.page.html b/src/app/pages/collection/pages/collection/nfts/nfts.page.html new file mode 100644 index 0000000..3ce717a --- /dev/null +++ b/src/app/pages/collection/pages/collection/nfts/nfts.page.html @@ -0,0 +1,159 @@ + + +
    + + + + {{ state.nbHits | number }} records + + + + +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    + +
    +
    + + +
    + + +
    Filters&sort
    + + + +
    + + +
    + + + + + + + + + + + + + +
    +
    +
    +
    +
    diff --git a/src/app/pages/collection/pages/collection/nfts/nfts.page.less b/src/app/pages/collection/pages/collection/nfts/nfts.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/collection/pages/collection/nfts/nfts.page.ts b/src/app/pages/collection/pages/collection/nfts/nfts.page.ts new file mode 100644 index 0000000..9c66146 --- /dev/null +++ b/src/app/pages/collection/pages/collection/nfts/nfts.page.ts @@ -0,0 +1,112 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input, + OnChanges, + OnInit, +} from '@angular/core'; +import { NftApi } from '@api/nft.api'; +import { AlgoliaCheckboxFilterType } from '@components/algolia/algolia-checkbox/algolia-checkbox.component'; +import { defaultPaginationItems } from '@components/algolia/algolia.options'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { CollapseType } from '@components/collapse/collapse.component'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { FilterStorageService } from '@core/services/filter-storage'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { marketSections } from '@pages/market/pages/market/market.page'; +import { FilterService } from '@pages/market/services/filter.service'; +import { COL, Timestamp } from '@soonaverse/interfaces'; +import { InstantSearchConfig } from 'angular-instantsearch/instantsearch/instantsearch'; +import { Subject } from 'rxjs'; + +// used in src/app/pages/collection/pages/collection/collection.page.ts +export enum HOT_TAGS { + ALL = 'All', + PENDING = 'Pending', + AVAILABLE = 'Available', + AUCTION = 'On Auction', + OWNED = 'Owned', + SPACE = 'SPACE', +} + +@UntilDestroy() +@Component({ + selector: 'wen-collection-nfts', + templateUrl: './nfts.page.html', + styleUrls: ['./nfts.page.less'], + // changeDetection: ChangeDetectionStrategy.OnPush + // TODO investigate how to bypass this.... + // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection + changeDetection: ChangeDetectionStrategy.Default, +}) +export class CollectionNFTsPage implements OnInit, OnChanges { + @Input() public collectionId?: string | null; + config?: InstantSearchConfig; + sections = marketSections; + paginationItems = defaultPaginationItems; + reset$ = new Subject(); + sortOpen = true; + statusFilterOpen = true; + spaceFilterOpen = true; + collectionFilterOpen = true; + priceFilterOpen = false; + + constructor( + public filter: FilterService, + public deviceService: DeviceService, + public nftApi: NftApi, + public cd: ChangeDetectorRef, + public filterStorageService: FilterStorageService, + public cacheService: CacheService, + public readonly algoliaService: AlgoliaService, + ) {} + + public ngOnInit(): void { + // Algolia change detection bug fix + setInterval(() => this.cd.markForCheck(), 500); + } + + public ngOnChanges(): void { + // TODO comeup with better process. + setTimeout(() => { + if (this.collectionId) { + this.filterStorageService.marketNftsFilters$.next({ + ...this.filterStorageService.marketNftsFilters$.value, + refinementList: { + ...this.filterStorageService.marketNftsFilters$.value.refinementList, + collection: [this.collectionId], + }, + }); + + this.config = { + indexName: COL.NFT, + searchClient: this.algoliaService.searchClient, + initialUiState: { + nft: this.filterStorageService.marketNftsFilters$.value, + }, + }; + } + }, 500); + } + + public trackByUid(_index: number, item: any): number { + return item.uid; + } + + public convertAllToSoonaverseModel(algoliaItems: any[]) { + return algoliaItems.map((algolia) => ({ + ...algolia, + availableFrom: Timestamp.fromMillis(+algolia.availableFrom), + })); + } + + public get collapseTypes(): typeof CollapseType { + return CollapseType; + } + + public get algoliaCheckboxFilterTypes(): typeof AlgoliaCheckboxFilterType { + return AlgoliaCheckboxFilterType; + } +} diff --git a/src/app/pages/collection/pages/upsert/upsert.page.html b/src/app/pages/collection/pages/upsert/upsert.page.html new file mode 100644 index 0000000..6c7f10a --- /dev/null +++ b/src/app/pages/collection/pages/upsert/upsert.page.html @@ -0,0 +1,706 @@ + +

    Create new collection

    +

    Edit collection

    + +
    +
    +
    + + + +
    + + Name + + + + + + Description + + + + +
    +
    + + + + +
    + + + + Available on + + + + + + + Royalty + + This royalty % will be applied on the initial mint of the NFTs and all secondary + sales. The IOTA address that will be receiving royalties must always have a minimum + balance of 1 Mi due to the dust protection mechanism of the IOTA protocol.
    + + + + +
    + + + + + + + + + +
    +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + +
    + +
    + + Token amount higher than + + + + + + + + + + + + + + + + + + Discount % + + + + + + + +
    +
    + + +
    +
    +
    Discount #0{{ i + 1 }}
    +
    + +
    +
    + +
    + +
    Discount XP
    + + + +
    Token
    + + + + + + + +
    + Discount Amount +
    + + +
    +
    +
    + + +
    +
    + +
    + + + + + + + + + + + + + + + + + + {{ type.key }} + + + + + + + + + + + + + +
    + + + + + + jpeg/png/webp + + +
    + Banner is required. +
    +
    +
    +
    +
    + + + + +
    + + + + + + jpg/jpeg/png/webp/mp4 + + +
    + Placeholder is required. +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + Open Sale + + Space Guardians Only + + + Space Members Only + + + Space Members with Badge Only + + At least one NFT from Collections + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + +
    diff --git a/src/app/pages/collection/pages/upsert/upsert.page.less b/src/app/pages/collection/pages/upsert/upsert.page.less new file mode 100644 index 0000000..31805c2 --- /dev/null +++ b/src/app/pages/collection/pages/upsert/upsert.page.less @@ -0,0 +1,11 @@ +.wen-radio-group { + display: grid; + input { + width: 100px; + margin-left: 10px; + } +} + +.separator { + @apply w-full h-px bg-foregrounds-separator dark:bg-foregrounds-separator-dark; +} diff --git a/src/app/pages/collection/pages/upsert/upsert.page.ts b/src/app/pages/collection/pages/upsert/upsert.page.ts new file mode 100644 index 0000000..e8eddea --- /dev/null +++ b/src/app/pages/collection/pages/upsert/upsert.page.ts @@ -0,0 +1,694 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AwardApi } from '@api/award.api'; +import { CollectionApi } from '@api/collection.api'; +import { FileApi } from '@api/file.api'; +import { MemberApi } from '@api/member.api'; +import { TokenApi } from '@api/token.api'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { AuthService } from '@components/auth/services/auth.service'; +import { SelectCollectionOption } from '@components/collection/components/select-collection/select-collection.component'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { NavigationService } from '@core/services/navigation/navigation.service'; +import { NotificationService } from '@core/services/notification'; +import { enumToArray } from '@core/utils/manipulations.utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { + Access, + Award, + COL, + Categories, + Collection, + CollectionType, + DEFAULT_NETWORK, + DISCORD_REGEXP, + DiscountLine, + Space, + TWITTER_REGEXP, + Token, + URL_REGEXP, + getDefDecimalIfNotSet, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { DisabledTimeConfig } from 'ng-zorro-antd/date-picker'; +import { NzNotificationService } from 'ng-zorro-antd/notification'; +import { NzSelectOptionInterface } from 'ng-zorro-antd/select'; +import { NzUploadChangeParam, NzUploadFile, NzUploadXHRArgs } from 'ng-zorro-antd/upload'; +import { BehaviorSubject, Observable, Subscription, firstValueFrom, from, of } from 'rxjs'; +import { first } from 'rxjs/operators'; +import { SelectSpaceOption } from '../../../../components/space/components/select-space/select-space.component'; + +const MAX_DISCOUNT_COUNT = 3; + +@UntilDestroy() +@Component({ + selector: 'wen-upsert', + templateUrl: './upsert.page.html', + styleUrls: ['./upsert.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class UpsertPage implements OnInit, OnDestroy { + public nameControl: FormControl = new FormControl('', Validators.required); + public descriptionControl: FormControl = new FormControl('', Validators.required); + public royaltiesFeeControl: FormControl = new FormControl('', Validators.required); + public urlControl: FormControl = new FormControl('', Validators.pattern(URL_REGEXP)); + public twitterControl: FormControl = new FormControl('', Validators.pattern(TWITTER_REGEXP)); + public discordControl: FormControl = new FormControl('', Validators.pattern(DISCORD_REGEXP)); + public placeholderUrlControl: FormControl = new FormControl(''); + public accessAwardsControl: FormControl = new FormControl([]); + public accessCollectionsControl: FormControl = new FormControl([]); + public bannerUrlControl: FormControl = new FormControl('', Validators.required); + public categoryControl: FormControl = new FormControl('', Validators.required); + public selectedAccessControl: FormControl = new FormControl(Access.OPEN, Validators.required); + public spaceControl: FormControl = new FormControl('', Validators.required); + public royaltiesSpaceControl: FormControl = new FormControl('', Validators.required); + public royaltiesSpaceDifferentControl: FormControl = new FormControl(false, Validators.required); + public onePerMemberOnlyControl: FormControl = new FormControl(false); + public limitedEditionControl: FormControl = new FormControl(false); + public typeControl: FormControl = new FormControl(CollectionType.CLASSIC, Validators.required); + public priceControl: FormControl = new FormControl(null, Validators.required); + public availableFromControl: FormControl = new FormControl('', Validators.required); + public discounts: FormArray; + public collectionForm: FormGroup; + public editMode = false; + public collectionId?: number; + public collectionMinted = false; + public collectionTypes = enumToArray(CollectionType); + public collectionCategories = enumToArray(Categories); + public formatterPercent = (value: number): string => `${value} %`; + public parserPercent = (value: string): string => value.replace(' %', ''); + public uploadedBanner?: NzUploadFile | null; + public uploadedPlaceholder?: NzUploadFile | null; + public awards$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public spaces$: BehaviorSubject = new BehaviorSubject([]); + public filteredCollections$: BehaviorSubject = new BehaviorSubject< + NzSelectOptionInterface[] + >([]); + public filteredAwards$: BehaviorSubject = new BehaviorSubject< + NzSelectOptionInterface[] + >([]); + public filteredTokens$: BehaviorSubject = new BehaviorSubject< + NzSelectOptionInterface[] + >([]); + private collectionsSubscription?: Subscription; + private awardsSubscription?: Subscription; + private tokensSubscription?: Subscription; + // Improve + private tokenCache: { + [propName: string]: { + symbol: string; + decimals: number; + }; + } = {}; + + constructor( + public cache: CacheService, + public deviceService: DeviceService, + public nav: NavigationService, + private route: ActivatedRoute, + private collectionApi: CollectionApi, + private awardApi: AwardApi, + private tokenApi: TokenApi, + private cd: ChangeDetectorRef, + private memberApi: MemberApi, + public readonly algoliaService: AlgoliaService, + private notification: NotificationService, + private auth: AuthService, + private router: Router, + private nzNotification: NzNotificationService, + private fileApi: FileApi, + ) { + this.discounts = new FormArray([] as FormGroup[]); + this.collectionForm = new FormGroup({ + name: this.nameControl, + description: this.descriptionControl, + space: this.spaceControl, + type: this.typeControl, + access: this.selectedAccessControl, + accessAwards: this.accessAwardsControl, + accessCollections: this.accessCollectionsControl, + price: this.priceControl, + availableFrom: this.availableFromControl, + royaltiesFee: this.royaltiesFeeControl, + royaltiesSpace: this.royaltiesSpaceControl, + royaltiesSpaceDifferent: this.royaltiesSpaceDifferentControl, + url: this.urlControl, + twitter: this.twitterControl, + discord: this.discordControl, + bannerUrl: this.bannerUrlControl, + onePerMemberOnly: this.onePerMemberOnlyControl, + limitedEdition: this.limitedEditionControl, + placeholderUrl: this.placeholderUrlControl, + category: this.categoryControl, + discounts: this.discounts, + }); + } + + public ngOnInit(): void { + this.route.params?.pipe(untilDestroyed(this)).subscribe((p) => { + if (p.space) { + this.spaceControl.setValue(p.space); + this.royaltiesSpaceControl.setValue(p.space); + } + }); + + this.route.params?.pipe(untilDestroyed(this)).subscribe((o) => { + if (o?.collectionId) { + this.editMode = true; + this.collectionId = o.collectionId; + this.collectionApi + .listen(o.collectionId) + .pipe(first()) + .subscribe((o) => { + if (!o) { + this.nav.goBack(); + } else { + this.collectionMinted = false; + this.nameControl.setValue(o.name); + this.descriptionControl.setValue(o.description); + this.spaceControl.setValue(o.space); + this.descriptionControl.setValue(o.description); + this.typeControl.setValue(o.type); + this.priceControl.setValue(o.price); + this.availableFromControl.setValue(o.availableFrom.toDate()); + this.royaltiesFeeControl.setValue(o.royaltiesFee * 100); + this.royaltiesSpaceControl.setValue(o.royaltiesSpace); + this.royaltiesSpaceDifferentControl.setValue(o.royaltiesSpace !== o.space); + this.accessAwardsControl.setValue(o.accessAwards); + this.accessCollectionsControl.setValue(o.accessCollections); + this.placeholderUrlControl.setValue(o.placeholderUrl); + this.bannerUrlControl.setValue(o.bannerUrl); + this.urlControl.setValue(o.url); + this.twitterControl.setValue(o.twitter); + this.discordControl.setValue(o.discord); + this.categoryControl.setValue(o.category); + this.selectedAccessControl.setValue(o.access); + this.onePerMemberOnlyControl.setValue(o.onePerMemberOnly); + this.limitedEditionControl.setValue(o.limitedEdition); + + // Disable fields that are not editable. + this.spaceControl.disable(); + this.typeControl.disable(); + this.categoryControl.disable(); + this.limitedEditionControl.disable(); + + // If minted only Access / Discounts can be edited. + if (o.mintingData) { + this.collectionMinted = true; + this.nameControl.disable(); + this.descriptionControl.disable(); + // this.priceControl.disable(); + this.royaltiesFeeControl.disable(); + this.royaltiesSpaceControl.disable(); + this.royaltiesSpaceDifferentControl.disable(); + this.placeholderUrlControl.disable(); + this.bannerUrlControl.disable(); + this.urlControl.disable(); + this.twitterControl.disable(); + this.discordControl.disable(); + } + + // Discounts require async call so we do it at the end. + this.discounts.removeAt(0); + o.discounts + .sort((a, b) => { + return a.tokenReward - b.tokenReward; + }) + .forEach(async (v) => { + let token; + if (v.tokenUid) { + token = await firstValueFrom(this.tokenApi.listen(v.tokenUid)); + } + + this.addDiscount( + v.tokenReward + ? ( + v.tokenReward / Math.pow(10, getDefDecimalIfNotSet(token?.decimals)) + ).toString() + : '0', + token?.uid || '', + token?.symbol || '', + v.amount ? (v.amount * 100).toString() : '', + ); + + if (token) { + this.filteredTokens$.next([ + ...(this.filteredTokens$.value || []), + { + label: token.name + ' ( ' + token.symbol + ' )', + value: token.uid, + }, + ]); + } + }); + + // Load selected options for award/collections + o.accessAwards?.forEach(async (a) => { + const award = await firstValueFrom(this.awardApi.listen(a)); + if (award) { + this.filteredAwards$.next([ + ...(this.filteredAwards$.value || []), + { + label: + award.name + + ' (badge: ' + + award.badge.name + + ', id: ' + + award.uid.substring(0, 10) + + ')', + value: award.uid, + }, + ]); + } + }); + + o.accessCollections?.forEach(async (a) => { + const collection = await firstValueFrom(this.collectionApi.listen(a)); + if (collection) { + this.filteredCollections$.next([ + ...(this.filteredCollections$.value || []), + { + label: collection.name || collection.uid, + value: collection.uid, + }, + ]); + } + }); + + this.cd.markForCheck(); + } + }); + } + }); + + this.auth.member$?.pipe(untilDestroyed(this)).subscribe((o) => { + if (o?.uid) { + this.memberApi.allSpacesAsMember(o.uid).pipe(untilDestroyed(this)).subscribe(this.spaces$); + } + }); + + // Listen to main space and make sure we always set it as royalty spce. + this.spaceControl.valueChanges.pipe(untilDestroyed(this)).subscribe((val) => { + if (this.royaltiesSpaceDifferentControl.value === false) { + this.royaltiesSpaceControl.setValue(val); + } + }); + + this.typeControl.valueChanges.pipe(untilDestroyed(this)).subscribe((val) => { + if (val === CollectionType.CLASSIC) { + this.placeholderUrlControl.removeValidators(Validators.required); + } else { + this.placeholderUrlControl.addValidators(Validators.required); + } + this.placeholderUrlControl.updateValueAndValidity(); + }); + + this.royaltiesSpaceDifferentControl.valueChanges.pipe(untilDestroyed(this)).subscribe(() => { + if (!this.royaltiesSpaceDifferentControl.value) { + this.royaltiesSpaceControl.setValue(this.spaceControl.value); + } + }); + } + + public get maxDiscountCount(): number { + return MAX_DISCOUNT_COUNT; + } + + private subscribeAwardList(search?: string): void { + this.awardsSubscription?.unsubscribe(); + this.awardsSubscription = from( + this.algoliaService.searchClient + .initIndex(COL.AWARD) + .search(search || '', { length: 5, offset: 0 }), + ).subscribe((r) => { + this.filteredAwards$.next( + r.hits.map((r) => { + const award = r as unknown as Award; + return { + label: + award.name + + ' (badge: ' + + award.badge.name + + ', id: ' + + award.uid.substring(0, 10) + + ')', + value: award.uid, + }; + }), + ); + }); + } + + public searchAward(v: string): void { + if (v) { + this.subscribeAwardList(v); + } + } + + private subscribeTokenList(search?: string): void { + this.tokensSubscription?.unsubscribe(); + this.tokensSubscription = from( + this.algoliaService.searchClient + .initIndex(COL.TOKEN) + .search(search || '', { length: 5, offset: 0 }), + ).subscribe((r) => { + this.filteredTokens$.next( + r.hits.map((r) => { + const token = r as unknown as Token; + this.tokenCache[token.uid] = { + symbol: token.symbol, + decimals: getDefDecimalIfNotSet(token.decimals), + }; + return { + label: token.name + ' ( ' + token.symbol + ' )', + value: token.uid, + }; + }), + ); + }); + } + + public searchToken(v: string): void { + if (v) { + this.subscribeTokenList(v); + } + } + + private subscribeCollectionList(search?: string): void { + this.collectionsSubscription?.unsubscribe(); + this.collectionsSubscription = from( + this.algoliaService.searchClient + .initIndex(COL.COLLECTION) + .search(search || '', { length: 5, offset: 0 }), + ).subscribe((r) => { + this.filteredCollections$.next( + r.hits.map((r) => { + const collection = r as unknown as Collection; + return { + label: collection.name || collection.uid, + value: collection.uid, + }; + }), + ); + }); + } + + public searchCollection(v: string): void { + if (v) { + this.subscribeCollectionList(v); + } + } + + private memberIsLoggedOut(item: NzUploadXHRArgs): Subscription { + const err = $localize`Member seems to log out during the file upload request.`; + this.nzNotification.error(err, ''); + if (item.onError) { + item.onError(err, item.file); + } + + return of(undefined).subscribe(); + } + + public getCollectionListOptions(list?: Collection[] | null): SelectCollectionOption[] { + return (list || []) + .filter((o) => o.rejected !== true) + .map((o) => ({ + label: o.name || o.uid, + value: o.uid, + img: o.bannerUrl, + })); + } + + public uploadFilePlaceholder(item: NzUploadXHRArgs): Subscription { + if (!this.auth.member$.value) { + return this.memberIsLoggedOut(item); + } + + return this.fileApi.upload(this.auth.member$.value.uid, item); + } + + public uploadFileBanner(item: NzUploadXHRArgs): Subscription { + if (!this.auth.member$.value) { + return this.memberIsLoggedOut(item); + } + + return this.fileApi.upload(this.auth.member$.value.uid, item); + } + + public get targetAccess(): typeof Access { + return Access; + } + + public uploadChangePlaceholder(event: NzUploadChangeParam): void { + if (event.type === 'success') { + this.placeholderUrlControl.setValue(event.file.response); + this.uploadedPlaceholder = event.file; + } else { + this.placeholderUrlControl.setValue(''); + } + } + + public uploadChangeBanner(event: NzUploadChangeParam): void { + if (event.type === 'success') { + this.bannerUrlControl.setValue(event.file.response); + this.uploadedBanner = event.file; + } else { + this.bannerUrlControl.setValue(''); + } + } + + public showPlaceholder(): boolean { + return this.typeControl.value !== CollectionType.CLASSIC; + } + + public previewFile(file: NzUploadFile): Observable { + return of(file.response); + } + + public getSpaceListOptions(list?: Space[] | null): SelectSpaceOption[] { + return (list || []) + .filter((o) => { + return !!(o.validatedAddress || {})[DEFAULT_NETWORK]; + }) + .map((o) => ({ + label: o.name || o.uid, + value: o.uid, + img: o.avatarUrl, + })); + } + + private validateForm(): boolean { + this.collectionForm.updateValueAndValidity(); + if (!this.collectionForm.valid) { + Object.values(this.collectionForm.controls).forEach((control) => { + if (control.invalid) { + control.markAsDirty(); + control.updateValueAndValidity({ onlySelf: true }); + } + }); + + return false; + } + + return true; + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + public getTooltip(type: number, tooltip: string): string { + type === 0 + ? (tooltip = + 'Classic NFTs are the most straightforward in that you upload your images, they’re all visible right away, and people can browse through your collection and purchase what they like. Simply upload and sell!') + : type === 1 + ? (tooltip = + 'Generated NFTs add a little mystery into the mix. The buyer won’t know what their NFT looks like until they mint it. The owner of the collection has the ability to put in a placeholder image for the entire collection to give the buyer an idea of what the NFT may look like, but their mint will still be a surprise. This is the most common type of NFT (it’s what IOTABOTs did).') + : (tooltip = + 'SFTs (Semi-Fungible Tokens) are a hybrid between the two approaches above. The collection creator can create a classic NFT, but they have the option to multiply them. For example, they can upload 10 images, but each image will have a quantity of 100. This is a relatively new term in the space, but a good real world example of this approach would be baseball or football trading cards.'); + + return tooltip; + } + + public disabledStartDate(startValue: Date): boolean { + // Disable past dates & today + 1day startValue + if ( + startValue.getTime() < + dayjs() + .subtract(24 * 60 * 60 * 1000) + .toDate() + .getTime() + ) { + return true; + } + + return false; + } + + private range(start: number, end: number): number[] { + const result: number[] = []; + for (let i = start; i < end; i++) { + result.push(i); + } + return result; + } + + public disabledDateTime(startValue: Date | Date[]): DisabledTimeConfig { + if (!Array.isArray(startValue) && dayjs(startValue).isSame(dayjs(), 'day')) { + return { + nzDisabledHours: () => this.range(0, dayjs().hour()), + nzDisabledMinutes: () => this.range(0, dayjs().minute()), + nzDisabledSeconds: () => [], + }; + } else { + return { + nzDisabledHours: () => [], + nzDisabledMinutes: () => [], + nzDisabledSeconds: () => [], + }; + } + } + + public formatSubmitData(data: any, mode: 'create' | 'edit' = 'create'): any { + const discounts: any[] = []; + data.discounts.forEach((v: DiscountLine) => { + if (v.amount > 0) { + discounts.push({ + tokenReward: (v.tokenReward || 0) * Math.pow(10, this.tokenCache[v.tokenUid].decimals), + tokenSymbol: this.tokenCache[v.tokenUid].symbol, + amount: v.amount / 100, + }); + } + }); + data.discounts = discounts.sort((a, b) => { + return a.tokenReward - b.tokenReward; + }); + + // Convert royaltiesFee + if (data.royaltiesFee > 0) { + data.royaltiesFee = data.royaltiesFee / 100; + } else { + data.royaltiesFee = 0; + } + + if ( + !data.accessCollections?.length || + data.access !== Access.MEMBERS_WITH_NFT_FROM_COLLECTION + ) { + delete data.accessCollections; + } + + if (!data.accessAwards?.length || data.access !== Access.MEMBERS_WITH_BADGE) { + delete data.accessAwards; + } + + if (mode === 'edit') { + delete data.space; + delete data.type; + delete data.category; + if (!this.availableFromControl.touched) { + delete data.availableFrom; + } + delete data.limitedEdition; + + if (this.collectionMinted) { + delete data.name; + delete data.description; + delete data.royaltiesFee; + delete data.royaltiesSpace; + delete data.placeholderUrl; + delete data.bannerUrl; + delete data.url; + delete data.twitter; + delete data.discord; + } + } + + delete data.royaltiesSpaceDifferent; + delete data.unit; + return data; + } + + public async create(): Promise { + if (!this.validateForm()) { + return; + } + await this.auth.sign(this.formatSubmitData({ ...this.collectionForm.value }), (sc, finish) => { + this.notification + .processRequest(this.collectionApi.create(sc), 'Created.', finish) + .subscribe((val: any) => { + this.router.navigate([ROUTER_UTILS.config.collection.root, val?.uid]); + }); + }); + } + + public async save(): Promise { + if (!this.validateForm()) { + return; + } + await this.auth.sign( + { + ...this.formatSubmitData({ ...this.collectionForm.value }, 'edit'), + ...{ + uid: this.collectionId, + }, + }, + (sc, finish) => { + this.notification + .processRequest(this.collectionApi.update(sc), 'Saved.', finish) + .subscribe((val: any) => { + this.router.navigate([ROUTER_UTILS.config.collection.root, val?.uid]); + }); + }, + ); + } + + public trackByValue(index: number, item: any): number { + return item.value; + } + + private getDiscountForm( + tokenReward = '', + tokenUid = '', + tokenSymbol = '', + amount = '', + ): FormGroup { + return new FormGroup({ + tokenReward: new FormControl(tokenReward), + tokenUid: new FormControl(tokenUid), + tokenSymbol: new FormControl(tokenSymbol), + amount: new FormControl(amount, [Validators.required]), + }); + } + + public addDiscount(tokenReward = '', tokenUid = '', tokenSymbol = '', amount = ''): void { + if (this.discounts.controls.length < MAX_DISCOUNT_COUNT) { + this.discounts.push(this.getDiscountForm(tokenReward, tokenUid, tokenSymbol, amount)); + } + } + + public removeDiscount(index: number): void { + this.discounts.removeAt(index); + } + + public gForm(f: any, value: string): any { + return f.get(value); + } + + public ngOnDestroy(): void { + this.collectionsSubscription?.unsubscribe(); + this.awardsSubscription?.unsubscribe(); + this.tokensSubscription?.unsubscribe(); + } +} diff --git a/src/app/pages/collection/services/data.service.ts b/src/app/pages/collection/services/data.service.ts new file mode 100644 index 0000000..35dc348 --- /dev/null +++ b/src/app/pages/collection/services/data.service.ts @@ -0,0 +1,70 @@ +import { Injectable } from '@angular/core'; +import { Award, Collection, CollectionStats, Member, Nft, Space } from '@soonaverse/interfaces'; +import { BehaviorSubject } from 'rxjs'; +import { + AuditOneQueryService, + AuditOneResponseCollection, +} from 'src/app/service-modules/audit-one/services/query.service'; + +@Injectable({ + providedIn: 'any', +}) +export class DataService { + public collectionId?: string; + public collection$: BehaviorSubject = new BehaviorSubject< + Collection | undefined + >(undefined); + public accessBadges$: BehaviorSubject = new BehaviorSubject< + Award[] | undefined + >(undefined); + public accessCollections$: BehaviorSubject = new BehaviorSubject< + string[] | undefined + >(undefined); + public nft$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public isGuardianWithinSpace$: BehaviorSubject = new BehaviorSubject(false); + public isGuardianInRankModeratorSpace$: BehaviorSubject = new BehaviorSubject( + false, + ); + public space$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public royaltySpace$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public creator$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public collectionStats$: BehaviorSubject = new BehaviorSubject< + CollectionStats | undefined + >(undefined); + public auditOneStatus$: BehaviorSubject = + new BehaviorSubject(undefined); + + public isPending(collection?: Collection | null): boolean { + return collection?.approved !== true && collection?.rejected !== true; + } + + constructor(private auditOneModule: AuditOneQueryService) {} + + public async loadServiceModuleData(collectionId: string): Promise { + // Audit One widget. + if (collectionId) { + const space = await this.auditOneModule.getCollectionStatus(collectionId); + this.auditOneStatus$.next(space); + } + } + + public reset(): void { + this.collectionId = undefined; + this.auditOneStatus$.next(undefined); + // this.collection$.next(undefined); + // this.cheapestNft$.next(undefined); + // this.firstNft$.next(undefined); + // this.nft$.next(undefined); + // this.isGuardianWithinSpace$.next(false); + // this.space$.next(undefined); + // this.creator$.next(undefined); + } +} diff --git a/src/app/pages/collection/services/helper.service.ts b/src/app/pages/collection/services/helper.service.ts new file mode 100644 index 0000000..6695449 --- /dev/null +++ b/src/app/pages/collection/services/helper.service.ts @@ -0,0 +1,115 @@ +import { Injectable } from '@angular/core'; +import { enumToArray } from '@core/utils/manipulations.utils'; +import { + Categories, + Collection, + CollectionStatus, + DiscountLine, + Network, + Timestamp, + Transaction, + TransactionType, + TRANSACTION_AUTO_EXPIRY_MS, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; + +@Injectable({ + providedIn: 'root', +}) +export class HelperService { + public getDaysLeft(availableFrom?: Timestamp): number { + if (!availableFrom) return 0; + return dayjs(availableFrom.toDate()).diff(dayjs(new Date()), 'day'); + } + + public isAvailableForSale(col?: Collection | null): boolean { + if (!col) { + return false; + } + + return col.total - col.sold > 0 && this.isAvailable(col); + } + + public isAvailable(col?: Collection | null): boolean { + if (!col) { + return false; + } + + return col.approved === true && dayjs(col.availableFrom.toDate()).isBefore(dayjs()); + } + + public isLocked(col?: Collection | null): boolean { + if (!col) { + return true; + } + + return (col.approved == true && col.limitedEdition) || col.rejected == true; + } + + public isDateInFuture(date?: Timestamp | null): boolean { + if (!date) { + return false; + } + + return dayjs(date.toDate()).isAfter(dayjs()); + } + + public sortedDiscounts(discounts?: DiscountLine[] | null): DiscountLine[] { + if (!discounts?.length) { + return []; + } + + return discounts.sort((a, b) => { + return a.tokenReward - b.tokenReward; + }); + } + + public getShareUrl(col?: Collection | null): string { + const text = $localize`Check out collection`; + const url: string = col?.wenUrl || window?.location.href; + return 'https://twitter.com/share?text= ' + text + ' &url=' + url + '&hashtags=soonaverse'; + } + + public isExpired(val?: Transaction | null): boolean { + if (!val?.createdOn) { + return false; + } + + const expiresOn: dayjs.Dayjs = dayjs(val.createdOn.toDate()).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + return expiresOn.isBefore(dayjs()) && val.type === TransactionType.ORDER; + } + + public getCategory(category?: Categories): string { + if (!category) { + return ''; + } + + const categories = enumToArray(Categories); + return categories.find((c) => c.key === category).value; + } + + public isMinted(collection?: Collection | null): boolean { + return collection?.status === CollectionStatus.MINTED; + } + + public mintInProgress(collection?: Collection | null): boolean { + return collection?.status === CollectionStatus.MINTING; + } + + public getExplorerUrl(collection?: Collection | null): string { + if (collection?.mintingData?.network === Network.RMS) { + return 'https://explorer.shimmer.network/testnet/block/' + collection.mintingData.blockId; + } else if (collection?.mintingData?.network === Network.IOTA) { + return 'https://thetangle.org/search/' + collection.mintingData.blockId; + } else if (collection?.mintingData?.network === Network.SMR) { + return 'https://explorer.shimmer.network/shimmer/block/' + collection.mintingData.blockId; + } else if (collection?.mintingData?.network === Network.ATOI) { + return 'https://explorer.iota.org/devnet/search/' + collection.mintingData.blockId; + } else { + return ''; + } + } +} diff --git a/src/app/pages/dashboard/dashboard.module.ts b/src/app/pages/dashboard/dashboard.module.ts new file mode 100644 index 0000000..139c7ea --- /dev/null +++ b/src/app/pages/dashboard/dashboard.module.ts @@ -0,0 +1,38 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { ProposalCardModule } from '@components/proposal/components/proposal-card/proposal-card.module'; +import { SpaceModule } from '@components/space/space.module'; +import { LayoutModule } from '@shell/ui/layout/layout.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { AwardCardModule } from './../../components/award/components/award-card/award-card.module'; +import { DashboardPage } from './dashboard.page'; + +@NgModule({ + declarations: [DashboardPage], + imports: [ + CommonModule, + SpaceModule, + ProposalCardModule, + AwardCardModule, + RouterModule.forChild([ + { + path: '', + component: DashboardPage, + data: { + title: 'Dashboard', + robots: 'noindex, nofollow', + }, + }, + ]), + NzButtonModule, + NzIconModule, + LayoutModule, + NzSkeletonModule, + NzCardModule, + ], +}) +export class DashboardModule {} diff --git a/src/app/pages/dashboard/dashboard.page.html b/src/app/pages/dashboard/dashboard.page.html new file mode 100644 index 0000000..62bdd5d --- /dev/null +++ b/src/app/pages/dashboard/dashboard.page.html @@ -0,0 +1,79 @@ + +

    My Overview

    +
    +
    +

    Pending Membership Requests

    +
    + +
    +
    + +
    +

    Your spaces

    +
    + + + +
    + + No Spaces yet + + +
    +
    + + + +
    +
    + +
    +

    Active awards

    +
    + + +
    +
    + +
    +

    Active proposals

    +
    + + +
    +
    +
    +
    diff --git a/src/app/pages/dashboard/dashboard.page.less b/src/app/pages/dashboard/dashboard.page.less new file mode 100644 index 0000000..75683ad --- /dev/null +++ b/src/app/pages/dashboard/dashboard.page.less @@ -0,0 +1,10 @@ +/* Hide scrollbar for Chrome, Safari and Opera */ +.scroll-container::-webkit-scrollbar { + display: none; +} + +/* Hide scrollbar for IE, Edge and Firefox */ +.scroll-container { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} diff --git a/src/app/pages/dashboard/dashboard.page.ts b/src/app/pages/dashboard/dashboard.page.ts new file mode 100644 index 0000000..cc75c93 --- /dev/null +++ b/src/app/pages/dashboard/dashboard.page.ts @@ -0,0 +1,87 @@ +import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { ThemeList, ThemeService } from '@core/services/theme'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { Award, Proposal, Space } from '@soonaverse/interfaces'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { MemberApi } from './../../@api/member.api'; + +@UntilDestroy() +@Component({ + templateUrl: './dashboard.page.html', + styleUrls: ['./dashboard.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class DashboardPage implements OnInit, OnDestroy { + public spaces$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public pendingSpaces$: BehaviorSubject = new BehaviorSubject< + Space[] | undefined + >(undefined); + public proposals$: BehaviorSubject = new BehaviorSubject< + Proposal[] | undefined + >(undefined); + public awards$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + private subscriptions$: Subscription[] = []; + public theme = ThemeList; + path = ROUTER_UTILS.config.base; + + constructor( + private auth: AuthService, + private memberApi: MemberApi, + public themeService: ThemeService, + public deviceService: DeviceService, + ) { + // none. + } + + public ngOnInit(): void { + this.auth.member$?.pipe(untilDestroyed(this)).subscribe((o) => { + this.cancelSubscriptions(); + if (o?.uid) { + this.subscriptions$.push(this.memberApi.topSpaces(o.uid).subscribe(this.spaces$)); + this.subscriptions$.push( + this.memberApi.pendingSpaces(o.uid).subscribe(this.pendingSpaces$), + ); + this.subscriptions$.push(this.memberApi.topProposals(o.uid).subscribe(this.proposals$)); + this.subscriptions$.push(this.memberApi.topAwardsPending(o.uid).subscribe(this.awards$)); + } + }); + this.deviceService.viewWithSearch$.next(true); + } + + public onClickChangeTheme(theme: ThemeList): void { + this.themeService.setTheme(theme); + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + public isLoading(arr: any): boolean { + return arr === undefined; + } + + public isEmpty(arr: any): boolean { + return Array.isArray(arr) && arr.length === 0; + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + this.spaces$.next(undefined); + this.pendingSpaces$.next(undefined); + this.proposals$.next(undefined); + this.awards$.next(undefined); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/discover/discover-routing.module.ts b/src/app/pages/discover/discover-routing.module.ts new file mode 100644 index 0000000..2f46e12 --- /dev/null +++ b/src/app/pages/discover/discover-routing.module.ts @@ -0,0 +1,32 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { AwardsPage } from './pages/awards/awards.page'; +import { DiscoverPage } from './pages/discover/discover.page'; +import { MembersPage } from './pages/members/members.page'; +import { ProposalsPage } from './pages/proposals/proposals.page'; +import { SpacesPage } from './pages/spaces/spaces.page'; + +const routes: Routes = [ + { + path: '', + redirectTo: ROUTER_UTILS.config.discover.spaces, + pathMatch: 'full', + }, + { + path: '', + component: DiscoverPage, + children: [ + { path: ROUTER_UTILS.config.discover.spaces, component: SpacesPage }, + { path: ROUTER_UTILS.config.discover.awards, component: AwardsPage }, + { path: ROUTER_UTILS.config.discover.proposals, component: ProposalsPage }, + { path: ROUTER_UTILS.config.discover.members, component: MembersPage }, + ], + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class DiscoverRoutingModule {} diff --git a/src/app/pages/discover/discover.module.ts b/src/app/pages/discover/discover.module.ts new file mode 100644 index 0000000..dfa16d8 --- /dev/null +++ b/src/app/pages/discover/discover.module.ts @@ -0,0 +1,79 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; +import { AlgoliaModule } from '@components/algolia/algolia.module'; +import { CollapseModule } from '@components/collapse/collapse.module'; +import { CollectionCardModule } from '@components/collection/components/collection-card/collection-card.module'; +import { DrawerModule } from '@components/drawer/drawer.module'; +import { DropdownTabsModule } from '@components/dropdown-tabs/dropdown-tabs.module'; +import { IconModule } from '@components/icon/icon.module'; +import { MobileSearchModule } from '@components/mobile-search/mobile-search.module'; +import { SelectSpaceModule } from '@components/space/components/select-space/select-space.module'; +import { TabsModule } from '@components/tabs/tabs.module'; +import { OnVisibleModule } from '@core/directives/on-visible/on-visible.module'; +import { LayoutModule } from '@shell/ui/layout/layout.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NzTypographyModule } from 'ng-zorro-antd/typography'; +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; +import { AwardModule } from '../../components/award/award.module'; +import { MemberModule } from '../../components/member/member.module'; +import { ProposalModule } from '../../components/proposal/proposals.module'; +import { SpaceModule } from '../../components/space/space.module'; +import { DiscoverRoutingModule } from './discover-routing.module'; +import { AwardsPage } from './pages/awards/awards.page'; +import { DiscoverPage } from './pages/discover/discover.page'; +import { MembersPage } from './pages/members/members.page'; +import { ProposalsPage } from './pages/proposals/proposals.page'; +import { SpacesPage } from './pages/spaces/spaces.page'; +import { FilterService } from './services/filter.service'; + +@NgModule({ + declarations: [DiscoverPage, SpacesPage, MembersPage, AwardsPage, ProposalsPage], + exports: [], + providers: [FilterService], + imports: [ + CommonModule, + InfiniteScrollModule, + FormsModule, + ReactiveFormsModule, + TabsModule, + OnVisibleModule, + RouterModule, + NzTypographyModule, + DiscoverRoutingModule, + NzInputModule, + NzIconModule, + NzButtonModule, + SpaceModule, + NzCardModule, + NzSkeletonModule, + NzSelectModule, + NzToolTipModule, + NzTagModule, + MemberModule, + ProposalModule, + AwardModule, + LayoutModule, + DropdownTabsModule, + IconModule, + NzCheckboxModule, + MobileSearchModule, + SelectSpaceModule, + CollectionCardModule, + AlgoliaModule, + CollapseModule, + NzDrawerModule, + DrawerModule, + ], +}) +export class DiscoverModule {} diff --git a/src/app/pages/discover/pages/awards/awards.page.html b/src/app/pages/discover/pages/awards/awards.page.html new file mode 100644 index 0000000..eefcaa6 --- /dev/null +++ b/src/app/pages/discover/pages/awards/awards.page.html @@ -0,0 +1,175 @@ + + +
    + + + + {{ state.nbHits | number }} records + + + + +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + +
    Filters&sort
    + + + +
    + + +
    + + + > + + + + + + + + + +
    +
    +
    +
    +
    diff --git a/src/app/pages/discover/pages/awards/awards.page.less b/src/app/pages/discover/pages/awards/awards.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/discover/pages/awards/awards.page.ts b/src/app/pages/discover/pages/awards/awards.page.ts new file mode 100644 index 0000000..3a61dda --- /dev/null +++ b/src/app/pages/discover/pages/awards/awards.page.ts @@ -0,0 +1,83 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { AlgoliaCheckboxFilterType } from '@components/algolia/algolia-checkbox/algolia-checkbox.component'; +import { defaultPaginationItems } from '@components/algolia/algolia.options'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { CollapseType } from '@components/collapse/collapse.component'; +import { DeviceService } from '@core/services/device'; +import { FilterStorageService } from '@core/services/filter-storage'; +import { SeoService } from '@core/services/seo'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { discoverSections } from '@pages/discover/pages/discover/discover.page'; +import { COL, Timestamp } from '@soonaverse/interfaces'; +import { InstantSearchConfig } from 'angular-instantsearch/instantsearch/instantsearch'; +import { Subject } from 'rxjs'; +import { FilterService } from './../../services/filter.service'; + +export enum HOT_TAGS { + ALL = 'All', + ACTIVE = 'Active', + COMPLETED = 'Completed', +} + +@UntilDestroy() +@Component({ + templateUrl: './awards.page.html', + styleUrls: ['./awards.page.less'], + // changeDetection: ChangeDetectionStrategy.OnPush + // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection + changeDetection: ChangeDetectionStrategy.Default, +}) +export class AwardsPage implements OnInit { + config: InstantSearchConfig; + sections = discoverSections; + paginationItems = defaultPaginationItems; + reset$ = new Subject(); + sortOpen = true; + spaceFilterOpen = true; + tokenFilterOpen = true; + + constructor( + public filter: FilterService, + public deviceService: DeviceService, + public filterStorageService: FilterStorageService, + public readonly algoliaService: AlgoliaService, + private seo: SeoService, + ) { + this.config = { + indexName: COL.AWARD, + searchClient: this.algoliaService.searchClient, + initialUiState: { + award: this.filterStorageService.discoverAwardsFilters$.value, + }, + }; + } + + public ngOnInit(): void { + this.seo.setTags( + $localize`Discover - Awards`, + $localize`Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today.`, + ); + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + public get algoliaCheckboxFilterTypes(): typeof AlgoliaCheckboxFilterType { + return AlgoliaCheckboxFilterType; + } + + public convertAllToSoonaverseModel(algoliaItems: any[]) { + return algoliaItems.map((algolia) => ({ + ...algolia, + createdOn: Timestamp.fromMillis(+algolia.createdOn), + updatedOn: Timestamp.fromMillis(+algolia.updatedOn), + lastmodified: Timestamp.fromMillis(+algolia.lastmodified), + endDate: Timestamp.fromMillis(+algolia.endDate), + })); + } + + public get collapseTypes(): typeof CollapseType { + return CollapseType; + } +} diff --git a/src/app/pages/discover/pages/discover/discover.page.html b/src/app/pages/discover/pages/discover/discover.page.html new file mode 100644 index 0000000..44343d0 --- /dev/null +++ b/src/app/pages/discover/pages/discover/discover.page.html @@ -0,0 +1,6 @@ + +

    + Discover Soonaverse +

    + +
    diff --git a/src/app/pages/discover/pages/discover/discover.page.less b/src/app/pages/discover/pages/discover/discover.page.less new file mode 100644 index 0000000..b19e90e --- /dev/null +++ b/src/app/pages/discover/pages/discover/discover.page.less @@ -0,0 +1,29 @@ +@input-radius: 2.125rem; + +// Note: Haven't find better (and working) way of overriding these nested styles than +// using deprecated ::ng-deep. Change it if you know better approach. +nz-input-group ::ng-deep { + .ant-input-group-addon:last-child { + @apply bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark; + border-top-right-radius: @input-radius; + border-bottom-right-radius: @input-radius; + } + + .ant-input-group .ant-input-affix-wrapper { + .ant-input-prefix { + @apply mr-3; + } + + &:not(:last-child) { + @apply border-0 h-14 pl-4; + border-top-left-radius: @input-radius; + border-bottom-left-radius: @input-radius; + } + + &:hover { + // there is a `border-right-width: 1px !important` style inside ng-zorro, + // thus we need important too :/ + border-right-width: 0 !important; + } + } +} diff --git a/src/app/pages/discover/pages/discover/discover.page.ts b/src/app/pages/discover/pages/discover/discover.page.ts new file mode 100644 index 0000000..b1f6144 --- /dev/null +++ b/src/app/pages/discover/pages/discover/discover.page.ts @@ -0,0 +1,37 @@ +import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; +import { TabSection } from '@components/tabs/tabs.component'; +import { DeviceService } from '@core/services/device'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { FilterService } from './../../services/filter.service'; + +export const discoverSections: TabSection[] = [ + { route: [`../${ROUTER_UTILS.config.discover.spaces}`], label: $localize`Spaces` }, + { route: [`../${ROUTER_UTILS.config.discover.awards}`], label: $localize`Awards` }, + { route: [`../${ROUTER_UTILS.config.discover.proposals}`], label: $localize`Proposals` }, + { route: [`../${ROUTER_UTILS.config.discover.members}`], label: $localize`Members` }, +]; + +@UntilDestroy() +@Component({ + selector: 'wen-discover', + // changeDetection: ChangeDetectionStrategy.OnPush, + // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection + changeDetection: ChangeDetectionStrategy.Default, + + templateUrl: './discover.page.html', + styleUrls: ['./discover.page.less'], +}) +export class DiscoverPage implements OnDestroy, OnInit { + constructor(public filter: FilterService, public deviceService: DeviceService) { + // none; + } + + public ngOnInit(): void { + this.deviceService.viewWithSearch$.next(true); + } + + public ngOnDestroy(): void { + this.filter.resetSubjects(); + } +} diff --git a/src/app/pages/discover/pages/members/members.page.html b/src/app/pages/discover/pages/members/members.page.html new file mode 100644 index 0000000..b71f2ee --- /dev/null +++ b/src/app/pages/discover/pages/members/members.page.html @@ -0,0 +1,112 @@ + + +
    + + + + {{ state.nbHits | number }} records + + + + +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + +
    Filters&sort
    + + + +
    + + +
    + + + > + +
    +
    +
    +
    +
    diff --git a/src/app/pages/discover/pages/members/members.page.less b/src/app/pages/discover/pages/members/members.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/discover/pages/members/members.page.ts b/src/app/pages/discover/pages/members/members.page.ts new file mode 100644 index 0000000..2d995ec --- /dev/null +++ b/src/app/pages/discover/pages/members/members.page.ts @@ -0,0 +1,81 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { defaultPaginationItems } from '@components/algolia/algolia.options'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { CollapseType } from '@components/collapse/collapse.component'; +import { DeviceService } from '@core/services/device'; +import { FilterStorageService } from '@core/services/filter-storage'; +import { SeoService } from '@core/services/seo'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { discoverSections } from '@pages/discover/pages/discover/discover.page'; +import { COL, Timestamp } from '@soonaverse/interfaces'; +import { InstantSearchConfig } from 'angular-instantsearch/instantsearch/instantsearch'; +import { Subject } from 'rxjs'; +import { CacheService } from './../../../../@core/services/cache/cache.service'; +import { FilterService } from './../../services/filter.service'; + +@UntilDestroy() +@Component({ + templateUrl: './members.page.html', + styleUrls: ['./members.page.less'], + // changeDetection: ChangeDetectionStrategy.OnPush + // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection + changeDetection: ChangeDetectionStrategy.Default, +}) +export class MembersPage implements OnInit { + config: InstantSearchConfig; + sections = discoverSections; + paginationItems = defaultPaginationItems; + reset$ = new Subject(); + sortOpen = true; + + constructor( + public filter: FilterService, + public deviceService: DeviceService, + public cache: CacheService, + public filterStorageService: FilterStorageService, + public readonly algoliaService: AlgoliaService, + private seo: SeoService, + ) { + this.config = { + indexName: COL.MEMBER, + searchClient: this.algoliaService.searchClient, + initialUiState: { + member: this.filterStorageService.discoverMembersFilters$.value, + }, + }; + } + + public ngOnInit(): void { + this.seo.setTags( + $localize`Discover - Members`, + $localize`Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds.`, + ); + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + public convertAllToSoonaverseModel(algoliaItems: any[]) { + return algoliaItems.map((algolia) => ({ + ...algolia, + createdOn: Timestamp.fromMillis(+algolia.createdOn), + updatedOn: Timestamp.fromMillis(+algolia.updatedOn), + lastmodified: Timestamp.fromMillis(+algolia.lastmodified), + + spaces: !algolia.spaces + ? null + : Object.entries(algolia.spaces).forEach((key: any[]) => ({ + [key[0]]: { + ...key[1], + updateOn: Timestamp.fromMillis(+key[1].updateOn), + createOn: Timestamp.fromMillis(+key[1].createOn), + }, + })), + })); + } + + public get collapseTypes(): typeof CollapseType { + return CollapseType; + } +} diff --git a/src/app/pages/discover/pages/proposals/proposals.page.html b/src/app/pages/discover/pages/proposals/proposals.page.html new file mode 100644 index 0000000..665aaac --- /dev/null +++ b/src/app/pages/discover/pages/proposals/proposals.page.html @@ -0,0 +1,144 @@ + + +
    + + + + {{ state.nbHits | number }} records + + + + +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + +
    Filters&sort
    + + + +
    + + +
    + + + > + + + + + +
    +
    +
    +
    +
    diff --git a/src/app/pages/discover/pages/proposals/proposals.page.less b/src/app/pages/discover/pages/proposals/proposals.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/discover/pages/proposals/proposals.page.ts b/src/app/pages/discover/pages/proposals/proposals.page.ts new file mode 100644 index 0000000..0e5a811 --- /dev/null +++ b/src/app/pages/discover/pages/proposals/proposals.page.ts @@ -0,0 +1,86 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { AlgoliaCheckboxFilterType } from '@components/algolia/algolia-checkbox/algolia-checkbox.component'; +import { defaultPaginationItems } from '@components/algolia/algolia.options'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { CollapseType } from '@components/collapse/collapse.component'; +import { DeviceService } from '@core/services/device'; +import { FilterStorageService } from '@core/services/filter-storage'; +import { SeoService } from '@core/services/seo'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { discoverSections } from '@pages/discover/pages/discover/discover.page'; +import { COL, Timestamp } from '@soonaverse/interfaces'; +import { InstantSearchConfig } from 'angular-instantsearch/instantsearch/instantsearch'; +import { Subject } from 'rxjs'; +import { FilterService } from './../../services/filter.service'; + +export enum HOT_TAGS { + ALL = 'All', + ACTIVE = 'Active', + COMPLETED = 'Completed', +} + +@UntilDestroy() +@Component({ + templateUrl: './proposals.page.html', + styleUrls: ['./proposals.page.less'], + // changeDetection: ChangeDetectionStrategy.OnPush + // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection + changeDetection: ChangeDetectionStrategy.Default, +}) +export class ProposalsPage implements OnInit { + config: InstantSearchConfig; + sections = discoverSections; + paginationItems = defaultPaginationItems; + reset$ = new Subject(); + sortOpen = true; + spaceFilterOpen = true; + + constructor( + public filter: FilterService, + public deviceService: DeviceService, + public filterStorageService: FilterStorageService, + public readonly algoliaService: AlgoliaService, + private seo: SeoService, + ) { + this.config = { + indexName: COL.PROPOSAL, + searchClient: this.algoliaService.searchClient, + initialUiState: { + proposal: this.filterStorageService.discoverProposalsFilters$.value, + }, + }; + } + + public ngOnInit(): void { + this.seo.setTags( + $localize`Discover - Proposals`, + $localize`Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today.`, + ); + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + public convertAllToSoonaverseModel(algoliaItems: any[]) { + return algoliaItems.map((algolia) => ({ + ...algolia, + createdOn: Timestamp.fromMillis(+algolia.createdOn), + updatedOn: Timestamp.fromMillis(+algolia.updatedOn), + lastmodified: Timestamp.fromMillis(+algolia.lastmodified), + settings: { + ...algolia.settings, + startDate: Timestamp.fromMillis(+algolia.settings.startDate), + endDate: algolia.settings.endDate ? Timestamp.fromMillis(+algolia.settings.endDate) : null, + }, + })); + } + + public get collapseTypes(): typeof CollapseType { + return CollapseType; + } + + public get algoliaCheckboxFilterTypes(): typeof AlgoliaCheckboxFilterType { + return AlgoliaCheckboxFilterType; + } +} diff --git a/src/app/pages/discover/pages/spaces/spaces.page.html b/src/app/pages/discover/pages/spaces/spaces.page.html new file mode 100644 index 0000000..9682747 --- /dev/null +++ b/src/app/pages/discover/pages/spaces/spaces.page.html @@ -0,0 +1,112 @@ + + +
    + + + + {{ state.nbHits | number }} records + + + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + +
    Filters&sort
    + + + +
    + + +
    + + + > + +
    +
    +
    +
    diff --git a/src/app/pages/discover/pages/spaces/spaces.page.less b/src/app/pages/discover/pages/spaces/spaces.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/discover/pages/spaces/spaces.page.ts b/src/app/pages/discover/pages/spaces/spaces.page.ts new file mode 100644 index 0000000..0e08ccc --- /dev/null +++ b/src/app/pages/discover/pages/spaces/spaces.page.ts @@ -0,0 +1,75 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { defaultPaginationItems } from '@components/algolia/algolia.options'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { CollapseType } from '@components/collapse/collapse.component'; +import { DeviceService } from '@core/services/device'; +import { FilterStorageService } from '@core/services/filter-storage'; +import { SeoService } from '@core/services/seo'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { discoverSections } from '@pages/discover/pages/discover/discover.page'; +import { COL, Timestamp } from '@soonaverse/interfaces'; +import { InstantSearchConfig } from 'angular-instantsearch/instantsearch/instantsearch'; +import { Subject } from 'rxjs'; +import { FilterService } from './../../services/filter.service'; + +export enum HOT_TAGS { + ALL = 'All', + OPEN = 'Open', +} + +@UntilDestroy() +@Component({ + templateUrl: './spaces.page.html', + styleUrls: ['./spaces.page.less'], + // changeDetection: ChangeDetectionStrategy.OnPush + // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection + changeDetection: ChangeDetectionStrategy.Default, +}) +export class SpacesPage implements OnInit { + config: InstantSearchConfig; + sections = discoverSections; + paginationItems = defaultPaginationItems; + reset$ = new Subject(); + sortOpen = true; + + constructor( + public filter: FilterService, + public deviceService: DeviceService, + public filterStorageService: FilterStorageService, + public readonly algoliaService: AlgoliaService, + private seo: SeoService, + ) { + this.config = { + indexName: COL.SPACE, + searchClient: this.algoliaService.searchClient, + initialUiState: { + space: this.filterStorageService.discoverSpacesFilters$.value, + }, + }; + } + + public ngOnInit(): void { + this.seo.setTags( + $localize`Discover - Spaces`, + $localize`Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse.`, + ); + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + public convertAllToSoonaverseModel(algoliaItems: any[]) { + return algoliaItems.map((algolia) => ({ + ...algolia, + createdOn: Timestamp.fromMillis(+algolia.createdOn), + updatedOn: Timestamp.fromMillis(+algolia.updatedOn), + lastmodified: Timestamp.fromMillis(+algolia.lastmodified), + endDate: algolia.endDate ? Timestamp.fromMillis(+algolia.endDate) : null, + })); + } + + public get collapseTypes(): typeof CollapseType { + return CollapseType; + } +} diff --git a/src/app/pages/discover/services/filter.service.ts b/src/app/pages/discover/services/filter.service.ts new file mode 100644 index 0000000..3e1337e --- /dev/null +++ b/src/app/pages/discover/services/filter.service.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { GLOBAL_DEBOUNCE_TIME } from '@soonaverse/interfaces'; +import { BehaviorSubject } from 'rxjs'; +import { SortOptions } from './sort-options.interface'; + +@Injectable({ + providedIn: 'any', +}) +export class FilterService { + public selectedSort$: BehaviorSubject = new BehaviorSubject( + SortOptions.OLDEST, + ); + public search$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public filterControl: FormControl = new FormControl(undefined); + public static DEBOUNCE_TIME = GLOBAL_DEBOUNCE_TIME; + + public get sortOptions(): typeof SortOptions { + return SortOptions; + } + + public resetSubjects(): void { + // We actually wanna keep it when they go back. + // this.search$.next(undefined); + // this.selectedSort$.next(SortOptions.RECENT); + // this.selectedTags$.next(['All']); + } +} diff --git a/src/app/pages/discover/services/sort-options.interface.ts b/src/app/pages/discover/services/sort-options.interface.ts new file mode 100644 index 0000000..61ee68a --- /dev/null +++ b/src/app/pages/discover/services/sort-options.interface.ts @@ -0,0 +1,4 @@ +export enum SortOptions { + RECENT = 'desc', + OLDEST = 'asc', +} diff --git a/src/app/pages/market/market-routing.module.ts b/src/app/pages/market/market-routing.module.ts new file mode 100644 index 0000000..27a96aa --- /dev/null +++ b/src/app/pages/market/market-routing.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { CollectionsPage } from './pages/collections/collections.page'; +import { MarketPage } from './pages/market/market.page'; + +const routes: Routes = [ + { + path: '', + redirectTo: ROUTER_UTILS.config.market.collections, + pathMatch: 'full', + }, + { + path: '', + component: MarketPage, + children: [{ path: ROUTER_UTILS.config.market.collections, component: CollectionsPage }], + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class MarketRoutingModule {} diff --git a/src/app/pages/market/market.module.ts b/src/app/pages/market/market.module.ts new file mode 100644 index 0000000..7ae1edc --- /dev/null +++ b/src/app/pages/market/market.module.ts @@ -0,0 +1,69 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; +import { AlgoliaModule } from '@components/algolia/algolia.module'; +import { CollapseModule } from '@components/collapse/collapse.module'; +import { CollectionCardModule } from '@components/collection/components/collection-card/collection-card.module'; +import { CollectionHighlightCardModule } from '@components/collection/components/collection-highlight-card/collection-highlight-card.module'; +import { DrawerModule } from '@components/drawer/drawer.module'; +import { DropdownTabsModule } from '@components/dropdown-tabs/dropdown-tabs.module'; +import { IconModule } from '@components/icon/icon.module'; +import { MobileSearchModule } from '@components/mobile-search/mobile-search.module'; +import { NftCardModule } from '@components/nft/components/nft-card/nft-card.module'; +import { SelectSpaceModule } from '@components/space/components/select-space/select-space.module'; +import { TabsModule } from '@components/tabs/tabs.module'; +import { TokenRowModule } from '@components/token/components/token-row/token-row.module'; +import { OnVisibleModule } from '@core/directives/on-visible/on-visible.module'; +import { LayoutModule } from '@shell/ui/layout/layout.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { NzSliderModule } from 'ng-zorro-antd/slider'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; +import { MarketRoutingModule } from './market-routing.module'; +import { CollectionsPage } from './pages/collections/collections.page'; +import { MarketPage } from './pages/market/market.page'; +import { FilterService } from './services/filter.service'; + +@NgModule({ + declarations: [MarketPage, CollectionsPage], + imports: [ + CommonModule, + MarketRoutingModule, + NzCardModule, + LayoutModule, + OnVisibleModule, + NzInputModule, + DropdownTabsModule, + MobileSearchModule, + TabsModule, + RouterModule, + FormsModule, + ReactiveFormsModule, + NzIconModule, + NzTagModule, + NzSelectModule, + IconModule, + SelectSpaceModule, + CollectionCardModule, + InfiniteScrollModule, + NzSkeletonModule, + NftCardModule, + TokenRowModule, + AlgoliaModule, + NzButtonModule, + CollapseModule, + NzDrawerModule, + NzSliderModule, + DrawerModule, + CollectionHighlightCardModule, + ], + providers: [FilterService], +}) +export class MarketModule {} diff --git a/src/app/pages/market/pages/collections/collections.page.html b/src/app/pages/market/pages/collections/collections.page.html new file mode 100644 index 0000000..a8fa766 --- /dev/null +++ b/src/app/pages/market/pages/collections/collections.page.html @@ -0,0 +1,207 @@ + + +
    + + + + {{ state.nbHits | number }} records + + + + +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    + +
    + + +
    + + +
    + + +
    Filters&sort
    + + + +
    + + +
    + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    diff --git a/src/app/pages/market/pages/collections/collections.page.less b/src/app/pages/market/pages/collections/collections.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/market/pages/collections/collections.page.ts b/src/app/pages/market/pages/collections/collections.page.ts new file mode 100644 index 0000000..66f34de --- /dev/null +++ b/src/app/pages/market/pages/collections/collections.page.ts @@ -0,0 +1,93 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { CollectionApi } from '@api/collection.api'; +import { AlgoliaCheckboxFilterType } from '@components/algolia/algolia-checkbox/algolia-checkbox.component'; +import { defaultPaginationItems } from '@components/algolia/algolia.options'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { CollapseType } from '@components/collapse/collapse.component'; +import { DeviceService } from '@core/services/device'; +import { FilterStorageService } from '@core/services/filter-storage'; +import { SeoService } from '@core/services/seo'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { marketSections } from '@pages/market/pages/market/market.page'; +import { FilterService } from '@pages/market/services/filter.service'; +import { COL, Timestamp } from '@soonaverse/interfaces'; +import { InstantSearchConfig } from 'angular-instantsearch/instantsearch/instantsearch'; +import { Subject } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-collections', + templateUrl: './collections.page.html', + styleUrls: ['./collections.page.less'], + // changeDetection: ChangeDetectionStrategy.OnPush + // TODO investigate how to bypass this.... + // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection + changeDetection: ChangeDetectionStrategy.Default, +}) +export class CollectionsPage implements OnInit { + config: InstantSearchConfig; + sections = marketSections; + paginationItems = defaultPaginationItems; + reset$ = new Subject(); + sortOpen = true; + saleFilterOpen = true; + spaceFilterOpen = true; + categoryFilterOpen = false; + priceFilterOpen = false; + + constructor( + public filter: FilterService, + public collectionApi: CollectionApi, + public deviceService: DeviceService, + public filterStorageService: FilterStorageService, + public readonly algoliaService: AlgoliaService, + private seo: SeoService, + ) { + // this.filterStorageService.marketCollectionsFilters$.next({ + // ...this.filterStorageService.marketCollectionsFilters$.value, + // refinementList: { + // ...this.filterStorageService.marketCollectionsFilters$.value.refinementList + // }, + // availableFrom: { + // seconds: '0, 2000000000' + // } + // }); + + this.config = { + indexName: COL.COLLECTION, + searchClient: this.algoliaService.searchClient, + initialUiState: { + collection: this.filterStorageService.marketCollectionsFilters$.value, + }, + }; + } + + public ngOnInit(): void { + this.seo.setTags( + $localize`Collections - NFT`, + $localize`A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more.`, + ); + } + + public trackByUid(_index: number, item: any): number { + return item.uid; + } + + public convertAllToSoonaverseModel(algoliaItems: any[]) { + return algoliaItems.map((algolia) => ({ + ...algolia, + createdOn: Timestamp.fromMillis(+algolia.createdOn), + updatedOn: Timestamp.fromMillis(+algolia.updatedOn), + lastmodified: Timestamp.fromMillis(+algolia.lastmodified), + availableFrom: Timestamp.fromMillis(+algolia.availableFrom), + })); + } + + public get collapseTypes(): typeof CollapseType { + return CollapseType; + } + + public get algoliaCheckboxFilterTypes(): typeof AlgoliaCheckboxFilterType { + return AlgoliaCheckboxFilterType; + } +} diff --git a/src/app/pages/market/pages/market/market.page.html b/src/app/pages/market/pages/market/market.page.html new file mode 100644 index 0000000..0c50696 --- /dev/null +++ b/src/app/pages/market/pages/market/market.page.html @@ -0,0 +1,28 @@ + +

    NFT Collections

    + +
    +
    + +
    + Some collections may not yet be migrated to the decentralized network. Make sure you know + what you are buying. +
    +
    + +
    +
    + I understand +
    + +
    +
    + +
    diff --git a/src/app/pages/market/pages/market/market.page.less b/src/app/pages/market/pages/market/market.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/market/pages/market/market.page.ts b/src/app/pages/market/pages/market/market.page.ts new file mode 100644 index 0000000..88e0c64 --- /dev/null +++ b/src/app/pages/market/pages/market/market.page.ts @@ -0,0 +1,69 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core'; +import { CollectionHighlightCardType } from '@components/collection/components/collection-highlight-card/collection-highlight-card.component'; +import { TabSection } from '@components/tabs/tabs.component'; +import { DeviceService } from '@core/services/device'; +import { getItem, setItem, StorageItem } from '@core/utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { environment } from '@env/environment'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { FilterService } from '../../services/filter.service'; + +export const marketSections = [ + { route: `../${ROUTER_UTILS.config.market.collections}`, label: $localize`Collections` }, + { route: `../${ROUTER_UTILS.config.market.nfts}`, label: $localize`NFTs` }, +]; + +const HIGHLIGHT_COLLECTIONS = + environment.production === false + ? ['0x8fb5ee76d99fe3ac46311f4a021d7c12c3267754', '0x531b6bbb3d34655b3d842876fe6c8f444e8dd3f1'] + : ['0xcbe28532602d67eec7c937c0037509d426f38223', '0xdb47fa3d6cdc14910933d0074fba36a396771bfa']; + +@UntilDestroy() +@Component({ + selector: 'wen-market', + templateUrl: './market.page.html', + styleUrls: ['./market.page.less'], + // changeDetection: ChangeDetectionStrategy.OnPush + // TODO investigate how to bypass this.... + // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection + changeDetection: ChangeDetectionStrategy.Default, +}) +export class MarketPage implements OnInit { + public sections: TabSection[] = [ + { route: ROUTER_UTILS.config.market.collections, label: $localize`Collections` }, + { route: ROUTER_UTILS.config.market.nfts, label: $localize`NFTs` }, + ]; + public isSearchInputFocused = false; + public isMigrationWarningVisible = false; + + constructor( + public filter: FilterService, + public deviceService: DeviceService, + private cd: ChangeDetectorRef, + ) { + // none; + } + + public ngOnInit(): void { + this.handleMigrationWarning(); + this.deviceService.viewWithSearch$.next(true); + } + + public get collectionHighlightCardTypes(): typeof CollectionHighlightCardType { + return CollectionHighlightCardType; + } + + public understandMigrationWarning(): void { + setItem(StorageItem.CollectionMigrationWarningClosed, true); + this.isMigrationWarningVisible = false; + this.cd.markForCheck(); + } + + private handleMigrationWarning(): void { + const migrationWarningClosed = getItem(StorageItem.CollectionMigrationWarningClosed); + if (!migrationWarningClosed) { + this.isMigrationWarningVisible = true; + } + this.cd.markForCheck(); + } +} diff --git a/src/app/pages/market/services/filter.service.ts b/src/app/pages/market/services/filter.service.ts new file mode 100644 index 0000000..4c9014f --- /dev/null +++ b/src/app/pages/market/services/filter.service.ts @@ -0,0 +1,28 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; +import { SortOptions } from './sort-options.interface'; + +// Needs to be implemented +@Injectable({ + providedIn: 'any', +}) +export class FilterService { + public selectedSort$: BehaviorSubject = new BehaviorSubject( + SortOptions.RECENT, + ); + public search$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + + // public static DEBOUNCE_TIME = GLOBAL_DEBOUNCE_TIME; + public get sortOptions(): typeof SortOptions { + return SortOptions; + } + + public resetSubjects(): void { + // We actually wanna keep it when they go back. + // this.search$.next(undefined); + // this.selectedSort$.next(SortOptions.RECENT); + // this.selectedTags$.next(['All']); + } +} diff --git a/src/app/pages/market/services/sort-options.interface.ts b/src/app/pages/market/services/sort-options.interface.ts new file mode 100644 index 0000000..e1f66af --- /dev/null +++ b/src/app/pages/market/services/sort-options.interface.ts @@ -0,0 +1,5 @@ +export enum SortOptions { + RECENT = 'RECENT', + PRICE_LOW = 'PRICE_LOW', + PRICE_HIGH = 'PRICE_HIGH', +} diff --git a/src/app/pages/member/member-routing.module.ts b/src/app/pages/member/member-routing.module.ts new file mode 100644 index 0000000..52fcb3c --- /dev/null +++ b/src/app/pages/member/member-routing.module.ts @@ -0,0 +1,43 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { ActivityPage } from './pages/activity/activity.page'; +import { AwardsPage } from './pages/awards/awards.page'; +import { BadgesPage } from './pages/badges/badges.page'; +import { MemberPage } from './pages/member/member.page'; +import { NFTsPage } from './pages/nfts/nfts.page'; +import { MemberSpacesComponent } from './pages/spaces/member-spaces.component'; +import { TokensPage } from './pages/tokens/tokens.page'; +import { TransactionsPage } from './pages/transactions/transactions.page'; + +const routes: Routes = [ + { + path: ROUTER_UTILS.config.member.member, + component: MemberPage, + children: [ + { + path: '', + redirectTo: ROUTER_UTILS.config.member.badges, + pathMatch: 'full', + }, + { path: ROUTER_UTILS.config.member.activity, component: ActivityPage }, + { path: ROUTER_UTILS.config.member.awards, component: AwardsPage }, + { path: ROUTER_UTILS.config.member.badges, component: BadgesPage }, + { path: ROUTER_UTILS.config.member.spaces, component: MemberSpacesComponent }, + { path: ROUTER_UTILS.config.member.nfts, component: NFTsPage }, + { path: ROUTER_UTILS.config.member.tokens, component: TokensPage }, + { path: ROUTER_UTILS.config.member.transactions, component: TransactionsPage }, + ], + }, + { + path: '', + redirectTo: '/' + ROUTER_UTILS.config.discover.root + '/' + ROUTER_UTILS.config.discover.spaces, + pathMatch: 'full', + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class UserRoutingModule {} diff --git a/src/app/pages/member/member.module.ts b/src/app/pages/member/member.module.ts new file mode 100644 index 0000000..8fc6c08 --- /dev/null +++ b/src/app/pages/member/member.module.ts @@ -0,0 +1,133 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { AlgoliaModule } from '@components/algolia/algolia.module'; +import { SelectCollectionModule } from '@components/collection/components/select-collection/select-collection.module'; +import { DrawerToggleModule } from '@components/drawer-toggle/drawer-toggle.module'; +import { MemberAboutModule } from '@components/member/components/member-about/member-about.module'; +import { MemberSpaceRowModule } from '@components/member/components/member-space-row/member-space-row.module'; +import { MemberTileModule } from '@components/member/components/tile/member-tile.module'; +import { MobileSearchModule } from '@components/mobile-search/mobile-search.module'; +import { NftCardModule } from '@components/nft/components/nft-card/nft-card.module'; +import { NftDepositModule } from '@components/nft/components/nft-deposit/nft-deposit.module'; +import { NftStakeModule } from '@components/nft/components/nft-stake/nft-stake.module'; +import { SelectSpaceModule } from '@components/space/components/select-space/select-space.module'; +import { TimelineModule } from '@components/timeline/timeline.module'; +import { LockedTokenClaimModule } from '@components/token/components/locked-token-claim/locked-token-claim.module'; +import { TokenClaimModule } from '@components/token/components/token-claim/token-claim.module'; +import { TokenRefundModule } from '@components/token/components/token-refund/token-refund.module'; +import { TokenRowModule } from '@components/token/components/token-row/token-row.module'; +import { TokenStakeModule } from '@components/token/components/token-stake/token-stake.module'; +import { TokenTradingPairsTableModule } from '@components/token/components/token-trading-pairs-table/token-trading-pairs-table.module'; +import { TransactionCardModule } from '@components/transaction/components/transaction-card/transaction-card.module'; +import { OnVisibleModule } from '@core/directives/on-visible/on-visible.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { IpfsBadgeModule } from '@core/pipes/ipfs-badge/ipfs-badge.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { ResizeAvatarPipe } from '@core/pipes/resize-avatar/resize-avatar.pipe'; +import { LayoutModule } from '@shell/ui/layout/layout.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzDropDownModule } from 'ng-zorro-antd/dropdown'; +import { NzGridModule } from 'ng-zorro-antd/grid'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzListModule } from 'ng-zorro-antd/list'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzTimelineModule } from 'ng-zorro-antd/timeline'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NzTypographyModule } from 'ng-zorro-antd/typography'; +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; +import { AuditOneModule } from 'src/app/service-modules/audit-one/audit-one.module'; +import { AwardCardModule } from '../../components/award/components/award-card/award-card.module'; +import { TruncateModule } from './../../@core/pipes/truncate/truncate.module'; +import { BadgeModule } from './../../components/badge/badge.module'; +import { IconModule } from './../../components/icon/icon.module'; +import { TabsModule } from './../../components/tabs/tabs.module'; +import { UserRoutingModule } from './member-routing.module'; +import { ActivityPage } from './pages/activity/activity.page'; +import { AwardsPage } from './pages/awards/awards.page'; +import { BadgesPage } from './pages/badges/badges.page'; +import { MemberPage } from './pages/member/member.page'; +import { NFTsPage } from './pages/nfts/nfts.page'; +import { MemberSpacesComponent } from './pages/spaces/member-spaces.component'; +import { TokensPage } from './pages/tokens/tokens.page'; +import { TransactionsPage } from './pages/transactions/transactions.page'; +import { DataService } from './services/data.service'; + +@NgModule({ + declarations: [ + MemberPage, + ActivityPage, + AwardsPage, + BadgesPage, + MemberSpacesComponent, + NFTsPage, + TokensPage, + TransactionsPage, + ], + providers: [DataService, ResizeAvatarPipe], + imports: [ + CommonModule, + BadgeModule, + AwardCardModule, + TabsModule, + ResizeAvatarModule, + MemberAboutModule, + TruncateModule, + LockedTokenClaimModule, + UserRoutingModule, + NzTagModule, + NzButtonModule, + NzTimelineModule, + NzAvatarModule, + NzCardModule, + NzGridModule, + NzDropDownModule, + NzDrawerModule, + NzTypographyModule, + NzToolTipModule, + NzIconModule, + NzListModule, + IconModule, + LayoutModule, + FormatTokenModule, + NzModalModule, + DrawerToggleModule, + NzCheckboxModule, + FormsModule, + ReactiveFormsModule, + NzInputModule, + MemberSpaceRowModule, + MemberTileModule, + AuditOneModule, + MobileSearchModule, + IpfsBadgeModule, + SelectSpaceModule, + NftCardModule, + NzSkeletonModule, + InfiniteScrollModule, + NzSelectModule, + SelectCollectionModule, + NzTableModule, + TokenClaimModule, + TokenRefundModule, + TokenStakeModule, + TransactionCardModule, + TokenRowModule, + OnVisibleModule, + TimelineModule, + AlgoliaModule, + NftDepositModule, + NftStakeModule, + TokenTradingPairsTableModule, + ], +}) +export class MemberModule {} diff --git a/src/app/pages/member/pages/activity/activity.page.html b/src/app/pages/member/pages/activity/activity.page.html new file mode 100644 index 0000000..faf5505 --- /dev/null +++ b/src/app/pages/member/pages/activity/activity.page.html @@ -0,0 +1,263 @@ +
    +
    +
    + +
    + + + +
    + + + + + + +
    +
    + + +
    +

    My Staking

    +

    + until {{(getLevelExpiry() | async)?.toDate() | date: + 'shortDate'}} +

    +
    +
    + VIP LEVEL {{auth.memberLevel$ | async}} + +
    +
    +
    + + + + + +

    No Favourites yet.

    +
    +
    + + + + + + + + + + + + +
    +
    + + + + + + diff --git a/src/app/pages/member/pages/activity/activity.page.less b/src/app/pages/member/pages/activity/activity.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/member/pages/activity/activity.page.ts b/src/app/pages/member/pages/activity/activity.page.ts new file mode 100644 index 0000000..28f99de --- /dev/null +++ b/src/app/pages/member/pages/activity/activity.page.ts @@ -0,0 +1,200 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DEFAULT_SPACE } from '@components/space/components/select-space/select-space.component'; +import { TimelineItem, TimelineItemType } from '@components/timeline/timeline.component'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { getItem, StorageItem } from '@core/utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/member/services/helper.service'; +import { + Member, + Network, + SOON_SPACE, + SOON_SPACE_TEST, + SOON_TOKEN, + SOON_TOKEN_TEST, + StakeType, + Token, + Transaction, +} from '@soonaverse/interfaces'; +import { ChartConfiguration, ChartType } from 'chart.js'; +import dayjs from 'dayjs'; +import { BehaviorSubject, map, Observable } from 'rxjs'; +import { CacheService } from './../../../../@core/services/cache/cache.service'; +import { DataService, MemberAction } from './../../services/data.service'; + +@UntilDestroy() +@Component({ + selector: 'wen-activity', + templateUrl: './activity.page.html', + styleUrls: ['./activity.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ActivityPage implements OnInit { + public defaultSpace = DEFAULT_SPACE; + public lineChartType: ChartType = 'line'; + public lineChartData?: ChartConfiguration['data']; + public lineChartOptions?: ChartConfiguration['options'] = {}; + public soonTokenId = SOON_TOKEN; + public openTokenStake = false; + public openStakeNft = false; + public isAuditOneModalOpen = false; + public tokenFavourites: string[] = getItem(StorageItem.FavouriteTokens) as string[]; + public token$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + constructor( + private tokenApi: TokenApi, + public auth: AuthService, + public data: DataService, + public unitsService: UnitsService, + public helper: HelperService, + public cache: CacheService, + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + private cd: ChangeDetectorRef, + ) { + // Init empty. + } + + public ngOnInit(): void { + this.tokenApi + .listen(environment.production ? SOON_TOKEN : SOON_TOKEN_TEST) + .pipe(untilDestroyed(this)) + .subscribe(this.token$); + + let prev: string | undefined; + this.data.member$?.pipe(untilDestroyed(this)).subscribe((obj) => { + if (prev !== obj?.uid) { + this.data.refreshBadges(); + prev = obj?.uid; + } + }); + } + + public openAuditOneModal() { + this.isAuditOneModalOpen = true; + this.cd.markForCheck(); + } + + public closeAuditOneModal(): void { + this.isAuditOneModalOpen = false; + this.cd.markForCheck(); + } + + public getSoonSpaceId(): string { + return environment.production ? SOON_SPACE : SOON_SPACE_TEST; + } + + public getTotalStaked(): Observable { + return this.auth.memberSoonDistribution$.pipe( + map((v) => { + return v?.stakes?.[StakeType.DYNAMIC].amount || 0; + }), + ); + } + + public getTotalStakedValue(): Observable { + return this.auth.memberSoonDistribution$.pipe( + map((v) => { + return v?.stakes?.[StakeType.DYNAMIC].value || 0; + }), + ); + } + + public editProfile(): void { + this.data.triggerAction$.next(MemberAction.EDIT); + } + + public manageAddresses(): void { + this.data.triggerAction$.next(MemberAction.MANAGE_ADDRESSES); + } + + public getLevelExpiry(): Observable { + return this.auth.memberSoonDistribution$.pipe( + map((v) => { + const vals = v?.stakeExpiry?.[StakeType.DYNAMIC]; + if (!vals) { + return undefined; + } + + const maxKey = Object.keys(vals) + .map((v) => { + return parseInt(v); + }) + .sort((a, b) => { + return b - a; + }); + + return dayjs(maxKey[0]); + }), + ); + } + + public getTotalRewarded(): Observable { + return this.auth.memberSoonDistribution$.pipe( + map((v) => { + return v?.stakeRewards || 0; + }), + ); + } + + public getTotalUnclaimed(): Observable { + return this.auth.memberSoonDistribution$.pipe( + map((d) => { + if (!d) { + return 0; + } + + return d.tokenDrops?.length ? d.tokenDrops.reduce((pv, cv) => pv + cv.count, 0) : 0; + }), + ); + } + + public userHasStake$(): Observable { + return this.auth.memberSoonDistribution$.pipe( + map((v) => { + return !!(v?.stakes?.[StakeType.DYNAMIC]?.value || 0); + }), + ); + } + + public get networkTypes(): typeof Network { + return Network; + } + + public get loggedInMember$(): BehaviorSubject { + return this.auth.member$; + } + + public getBadgeRoute(): string[] { + return ['../', ROUTER_UTILS.config.member.badges]; + } + + public getSpaceRoute(spaceId: string): string[] { + return ['/', ROUTER_UTILS.config.space.root, spaceId]; + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + public getTimelineItems(badges?: Transaction[] | null): TimelineItem[] { + return ( + badges?.map((b) => ({ + type: TimelineItemType.BADGE, + payload: { + image: b.payload.image, + date: b.createdOn?.toDate(), + name: b.payload.name, + network: b.network, + }, + })) || [] + ); + } +} diff --git a/src/app/pages/member/pages/awards/awards.page.html b/src/app/pages/member/pages/awards/awards.page.html new file mode 100644 index 0000000..9fa63a3 --- /dev/null +++ b/src/app/pages/member/pages/awards/awards.page.html @@ -0,0 +1,49 @@ +
    +
    +
    + + Pending + + + Issued + +
    + + + +
    + + No Awards + + +
    +
    +
    +
    diff --git a/src/app/pages/member/pages/awards/awards.page.less b/src/app/pages/member/pages/awards/awards.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/member/pages/awards/awards.page.ts b/src/app/pages/member/pages/awards/awards.page.ts new file mode 100644 index 0000000..9165487 --- /dev/null +++ b/src/app/pages/member/pages/awards/awards.page.ts @@ -0,0 +1,56 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { AuthService } from '@components/auth/services/auth.service'; +import { Award } from '@soonaverse/interfaces'; +import { PreviewImageService } from '@core/services/preview-image'; +import { BehaviorSubject } from 'rxjs'; +import { DataService } from './../../services/data.service'; + +enum FilterOptions { + PENDING = 'pending', + ISSUED = 'issued', +} + +@Component({ + selector: 'wen-awards', + templateUrl: './awards.page.html', + styleUrls: ['./awards.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AwardsPage { + public selectedListControl: FormControl = new FormControl(FilterOptions.PENDING); + + constructor( + private auth: AuthService, + private cd: ChangeDetectorRef, + public data: DataService, + public previewImageService: PreviewImageService, + ) { + // none. + } + + public get filterOptions(): typeof FilterOptions { + return FilterOptions; + } + + public getList(): BehaviorSubject { + if (this.selectedListControl.value === this.filterOptions.ISSUED) { + return this.data.awardsCompleted$; + } else { + return this.data.awardsPending$; + } + } + + public handleFilterChange(filter: FilterOptions): void { + this.selectedListControl.setValue(filter); + this.cd.markForCheck(); + } + + public get isLoggedIn$(): BehaviorSubject { + return this.auth.isLoggedIn$; + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } +} diff --git a/src/app/pages/member/pages/badges/badges.page.html b/src/app/pages/member/pages/badges/badges.page.html new file mode 100644 index 0000000..1b1c29d --- /dev/null +++ b/src/app/pages/member/pages/badges/badges.page.html @@ -0,0 +1,143 @@ +
    + + + + + + Spaces + + + Awards + + + Total Rewards + + + + + + + + + + + +
    + {{ (cache.getSpace(r.spaceUid) | async)?.name }} +
    +
    + +   + {{ t.completedAwards }} + + {{ (t.totalTokenRewards | formatToken: t.uid: false: false: 0 | async) + ' ' + + (cache.getToken(t.uid) | async)?.symbol }} + + + + +
    +
    + +
    + +
    + +
    +
    Total reputation
    + + + + + + + {{ r.completedAwards }} + + + {{ (r.totalTokenRewards| formatToken: r.uid: false: false: 0 | async) + ' ' + + (cache.getToken(r.uid) | async)?.symbol }} + + + + + + + +
    +
    + +
    + +
    +
    +

    + {{ t.payload.name }} +

    +

    + {{t.payload.description}} +

    +
    + +
    +
    +
    +
    diff --git a/src/app/pages/member/pages/badges/badges.page.less b/src/app/pages/member/pages/badges/badges.page.less new file mode 100644 index 0000000..8fd52ab --- /dev/null +++ b/src/app/pages/member/pages/badges/badges.page.less @@ -0,0 +1,57 @@ +.table-light { + .ant-table-tbody > tr.ant-table-row:hover > td, + .ant-table-tbody > tr > td.ant-table-cell-row-hover { + background-color: transparent !important; + + &.selected-column, + &.selected-column-cur { + background-color: #f3ffee !important; + } + } + + .selected-column, + .selected-column-cur { + @apply bg-sale-ongoing; + } + + th { + &.selected-column::after { + color: white; + background: #8eceaf; + } + + &.selected-column-cur::after { + color: white; + background: #8eceaf; + } + } +} + +.table-dark { + .ant-table-tbody > tr.ant-table-row:hover > td, + .ant-table-tbody > tr > td.ant-table-cell-row-hover { + background-color: transparent !important; + + &.selected-column, + &.selected-column-cur { + background-color: #32302a !important; + } + } + + .selected-column, + .selected-column-cur { + @apply bg-foregrounds-placeholder-dark; + } + + th { + &.selected-column::after { + color: white; + background: #3a5430; + } + + &.selected-column-cur::after { + color: white; + background: #3a5430; + } + } +} diff --git a/src/app/pages/member/pages/badges/badges.page.ts b/src/app/pages/member/pages/badges/badges.page.ts new file mode 100644 index 0000000..f8588a8 --- /dev/null +++ b/src/app/pages/member/pages/badges/badges.page.ts @@ -0,0 +1,130 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { AuthService } from '@components/auth/services/auth.service'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { GLOBAL_DEBOUNCE_TIME, Transaction } from '@soonaverse/interfaces'; +import { BehaviorSubject, debounceTime, map } from 'rxjs'; +import { ThemeList, ThemeService } from '@core/services/theme'; +import { DataService } from './../../services/data.service'; + +interface TokensBreakdown { + uid: string; + totalTokenRewards: number; + completedAwards: number; +} + +interface DetailedList { + spaceUid: string; + rewards: TokensBreakdown[]; +} +@UntilDestroy() +@Component({ + selector: 'wen-badges', + templateUrl: './badges.page.html', + styleUrls: ['./badges.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class BadgesPage implements OnInit { + public detailedReputationList$: BehaviorSubject = new BehaviorSubject< + DetailedList[] + >([]); + public totalReputationList$: BehaviorSubject = new BehaviorSubject< + TokensBreakdown[] + >([]); + public theme = ThemeList; + constructor( + private auth: AuthService, + public cache: CacheService, + public data: DataService, + public unitsService: UnitsService, + public previewImageService: PreviewImageService, + public deviceService: DeviceService, + public themeService: ThemeService, + ) { + // none. + } + + public get themes(): typeof ThemeList { + return ThemeList; + } + + public ngOnInit(): void { + this.data.member$ + .pipe( + map((member) => { + const output: DetailedList[] = []; + for (const s in member?.spaces || {}) { + if (Object.prototype.hasOwnProperty.call(member!.spaces, s)) { + const rec = member!.spaces![s]; + const out: DetailedList = { + spaceUid: s, + rewards: [], + }; + + for (const t in rec.awardStat) { + if (Object.prototype.hasOwnProperty.call(rec.awardStat, t)) { + out.rewards.push({ + totalTokenRewards: rec.awardStat[t].totalReward || 0, + completedAwards: rec.awardStat[t].completed || 0, + uid: t, + }); + } + } + + output.push(out); + } + } + + return output; + }), + untilDestroyed(this), + debounceTime(GLOBAL_DEBOUNCE_TIME), + ) + .subscribe(this.detailedReputationList$); + + this.data.member$ + .pipe( + map((member) => { + const output: TokensBreakdown[] = []; + for (const s in member?.spaces || {}) { + if (Object.prototype.hasOwnProperty.call(member!.spaces, s)) { + const rec = member!.spaces![s]; + for (const t in rec.awardStat) { + if (Object.prototype.hasOwnProperty.call(rec.awardStat, t)) { + const recExists = output.find((tes) => { + return tes.uid === t; + }); + if (recExists) { + recExists.totalTokenRewards += rec.awardStat[t].totalReward || 0; + recExists.completedAwards += rec.awardStat[t].completed || 0; + } else { + output.push({ + totalTokenRewards: rec.awardStat[t].totalReward || 0, + completedAwards: rec.awardStat[t].completed || 0, + uid: t, + }); + } + } + } + } + } + + return output; + }), + untilDestroyed(this), + debounceTime(GLOBAL_DEBOUNCE_TIME), + ) + .subscribe(this.totalReputationList$); + } + + public get isLoggedIn$(): BehaviorSubject { + return this.auth.isLoggedIn$; + } + + public trackByUid(index: number, item: Transaction) { + return item.uid; + } +} diff --git a/src/app/pages/member/pages/member/member.page.html b/src/app/pages/member/pages/member/member.page.html new file mode 100644 index 0000000..e8ca9e3 --- /dev/null +++ b/src/app/pages/member/pages/member/member.page.html @@ -0,0 +1,133 @@ + +
    +
    +

    + My profile + Profile +

    + + +
    + +
    + + +

    + @{{ (data.member$ | async)?.name || ((data.member$ | async)?.uid | truncate:[12]) }} +

    +
    + {{(data.member$ | async)!.about}} +
    + +
    + + Joined {{ ((data.member$ | async)?.createdOn)?.toDate() | + date:"longDate" }} +
    + + +
    + + + +
    + +
    + +
    +
    + + + + +
    + + + +
    +
    +
    diff --git a/src/app/pages/member/pages/member/member.page.less b/src/app/pages/member/pages/member/member.page.less new file mode 100644 index 0000000..759a7a4 --- /dev/null +++ b/src/app/pages/member/pages/member/member.page.less @@ -0,0 +1,3 @@ +.rotate-180 { + transform: rotate(180deg); +} diff --git a/src/app/pages/member/pages/member/member.page.ts b/src/app/pages/member/pages/member/member.page.ts new file mode 100644 index 0000000..5b75609 --- /dev/null +++ b/src/app/pages/member/pages/member/member.page.ts @@ -0,0 +1,158 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + ElementRef, + HostListener, + OnDestroy, + OnInit, + ViewChild, +} from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AuthService } from '@components/auth/services/auth.service'; +import { ResizeAvatarPipe } from '@core/pipes/resize-avatar/resize-avatar.pipe'; +import { DeviceService } from '@core/services/device'; +import { SeoService } from '@core/services/seo'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { FILE_SIZES, Member } from '@soonaverse/interfaces'; +import { BehaviorSubject, Subscription, skip } from 'rxjs'; +import { MemberApi } from './../../../../@api/member.api'; +import { NavigationService } from './../../../../@core/services/navigation/navigation.service'; +import { DataService } from './../../services/data.service'; + +@UntilDestroy() +@Component({ + templateUrl: './member.page.html', + styleUrls: ['./member.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MemberPage implements OnInit, OnDestroy { + public memberId = ''; + public sections: Array<{ route: string; label: string }> = []; + public isAboutMemberVisible = false; + public height$: BehaviorSubject = new BehaviorSubject(0); + @ViewChild('sidebar') private sidebar?: ElementRef; + private subscriptions$: Subscription[] = []; + + constructor( + private route: ActivatedRoute, + private memberApi: MemberApi, + private auth: AuthService, + private router: Router, + private cd: ChangeDetectorRef, + private seo: SeoService, + private resizeAvatar: ResizeAvatarPipe, + public nav: NavigationService, + public data: DataService, + public deviceService: DeviceService, + ) { + // none. + } + + ngOnInit() { + this.deviceService.viewWithSearch$.next(false); + this.route.params.subscribe((params) => { + this.cancelSubscriptions(); + if (params?.memberId) { + this.listenMember(params.memberId); + this.sections = [ + { route: 'badges', label: $localize`Reputation` }, + { route: 'awards', label: $localize`Awards` }, + { route: 'spaces', label: $localize`Spaces` }, + { route: 'tokens', label: $localize`Tokens` }, + { route: 'nfts', label: $localize`NFTs` }, + ]; + this.checkLoggedInTabs(); + this.cd.markForCheck(); + } else { + this.notFound(); + } + }); + + // If we're unable to find the space we take the user out as well. + this.data.member$.pipe(skip(1), untilDestroyed(this)).subscribe((obj) => { + if (!obj) { + this.notFound(); + } + + this.seo.setTags( + $localize`Member -`, + undefined, + this.resizeAvatar.transform(obj?.avatar, FILE_SIZES.large), + ); + + this.data.loadServiceModuleData(); + }); + + this.auth.member$.pipe(untilDestroyed(this)).subscribe(() => { + this.checkLoggedInTabs(); + }); + } + + @HostListener('window:scroll', ['$event']) + public track() { + this.height$.next(this.sidebar?.nativeElement.scrollHeight || 0); + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + private notFound(): void { + this.router.navigate([ROUTER_UTILS.config.errorResponse.notFound]); + } + + public listenMember(memberId: string): void { + this.subscriptions$.push( + this.memberApi + .topAwardsCompleted(memberId) + .pipe(untilDestroyed(this)) + .subscribe(this.data.awardsCompleted$), + ); + this.subscriptions$.push( + this.memberApi + .topAwardsPending(memberId) + .pipe(untilDestroyed(this)) + .subscribe(this.data.awardsPending$), + ); + // TODO Implement search. This is parked since we will be implementing new search here. + this.subscriptions$.push( + this.memberApi.topSpaces(memberId).pipe(untilDestroyed(this)).subscribe(this.data.space$), + ); + this.subscriptions$.push( + this.memberApi.listen(memberId).pipe(untilDestroyed(this)).subscribe(this.data.member$), + ); + + // Badges. + this.data.refreshBadges(); + } + + public get loggedInMember$(): BehaviorSubject { + return this.auth.member$; + } + + private checkLoggedInTabs() { + if (this.auth.member$.getValue()?.uid === this.route.snapshot.params.memberId) { + if (!this.sections.find((s) => s.route === 'transactions')) { + this.sections = [ + { route: 'activity', label: $localize`Activity` }, + ...this.sections, + { route: 'transactions', label: $localize`Transactions` }, + ]; + } + this.cd.markForCheck(); + } + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + this.data.resetSubjects(); + } +} diff --git a/src/app/pages/member/pages/nfts/nfts.page.html b/src/app/pages/member/pages/nfts/nfts.page.html new file mode 100644 index 0000000..793acf4 --- /dev/null +++ b/src/app/pages/member/pages/nfts/nfts.page.html @@ -0,0 +1,85 @@ + + +
    + + + + {{ state.nbHits | number }} records + + + +
    + +
    +
    + +
    + Bring NFT from other network to Soonaverse and unlock it’s trading options. +
    +
    + +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    + + No NFTs + +
    +
    +
    +
    +
    +
    + + + +
    + + diff --git a/src/app/pages/member/pages/nfts/nfts.page.less b/src/app/pages/member/pages/nfts/nfts.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/member/pages/nfts/nfts.page.ts b/src/app/pages/member/pages/nfts/nfts.page.ts new file mode 100644 index 0000000..4ce97ab --- /dev/null +++ b/src/app/pages/member/pages/nfts/nfts.page.ts @@ -0,0 +1,88 @@ +import { ChangeDetectorRef, Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { NftApi } from '@api/nft.api'; +import { defaultPaginationItems } from '@components/algolia/algolia.options'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { AuthService } from '@components/auth/services/auth.service'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { FilterStorageService } from '@core/services/filter-storage'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/member/services/data.service'; +import { COL, Member, Timestamp } from '@soonaverse/interfaces'; +import { InstantSearchConfig } from 'angular-instantsearch/instantsearch/instantsearch'; +import { BehaviorSubject } from 'rxjs'; + +@UntilDestroy() +// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection +@Component({ + selector: 'wen-nfts', + templateUrl: './nfts.page.html', + styleUrls: ['./nfts.page.less'], + // changeDetection: ChangeDetectionStrategy.OnPush +}) +export class NFTsPage implements OnInit { + public config?: InstantSearchConfig; + public paginationItems = defaultPaginationItems; + public isDepositNftVisible = false; + + constructor( + public deviceService: DeviceService, + public cache: CacheService, + public nftApi: NftApi, + public filterStorageService: FilterStorageService, + public cacheService: CacheService, + public data: DataService, + public readonly algoliaService: AlgoliaService, + private cd: ChangeDetectorRef, + private auth: AuthService, + private route: ActivatedRoute, + ) {} + + public ngOnInit(): void { + this.route.params.subscribe((params) => { + if (params?.depositNft === 'true' || params?.depositNft === true) { + this.isDepositNftVisible = true; + this.cd.markForCheck(); + } + }); + + this.data.member$.pipe(untilDestroyed(this)).subscribe((m) => { + if (m) { + this.filterStorageService.memberNftsFitlers$.next({ + sortBy: 'nft_soldOn_desc', + refinementList: { + ...this.filterStorageService.memberNftsFitlers$.value.refinementList, + owner: [m.uid], + }, + }); + + this.config = { + indexName: COL.NFT, + searchClient: this.algoliaService.searchClient, + initialUiState: { + nft: this.filterStorageService.memberNftsFitlers$.value, + }, + }; + + // Algolia change detection bug fix + setInterval(() => this.cd.markForCheck(), 200); + } + }); + } + + public get loggedInMember$(): BehaviorSubject { + return this.auth.member$; + } + + public trackByUid(_index: number, item: any): number { + return item.uid; + } + + public convertAllToSoonaverseModel(algoliaItems: any[]) { + return algoliaItems.map((algolia) => ({ + ...algolia, + availableFrom: Timestamp.fromMillis(+algolia.availableFrom), + })); + } +} diff --git a/src/app/pages/member/pages/spaces/member-spaces.component.html b/src/app/pages/member/pages/spaces/member-spaces.component.html new file mode 100644 index 0000000..19f8de3 --- /dev/null +++ b/src/app/pages/member/pages/spaces/member-spaces.component.html @@ -0,0 +1,9 @@ +
    + + +
    diff --git a/src/app/pages/member/pages/spaces/member-spaces.component.less b/src/app/pages/member/pages/spaces/member-spaces.component.less new file mode 100644 index 0000000..5c60a87 --- /dev/null +++ b/src/app/pages/member/pages/spaces/member-spaces.component.less @@ -0,0 +1,3 @@ +.wen-xp-tag { + @apply font-medium text-sm px-3 py-2 rounded-3xl border-foregrounds-tertiary dark:border-foregrounds-tertiary-dark border-2; +} diff --git a/src/app/pages/member/pages/spaces/member-spaces.component.ts b/src/app/pages/member/pages/spaces/member-spaces.component.ts new file mode 100644 index 0000000..ceef00a --- /dev/null +++ b/src/app/pages/member/pages/spaces/member-spaces.component.ts @@ -0,0 +1,49 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { FormControl, FormGroup } from '@angular/forms'; +import { DeviceService } from '@core/services/device'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/member/services/data.service'; +import { HelperService } from '@pages/member/services/helper.service'; +import { Space } from '@soonaverse/interfaces'; + +@UntilDestroy() +@Component({ + selector: 'wen-member-spaces', + templateUrl: './member-spaces.component.html', + styleUrls: ['./member-spaces.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MemberSpacesComponent implements OnInit { + public spaceForm: FormGroup; + public spacesList: Space[] = []; + public shownSpaces: Space[] = []; + public isSearchInputFocused = false; + + constructor( + public data: DataService, + public helper: HelperService, + public deviceService: DeviceService, + ) { + this.spaceForm = new FormGroup({ + space: new FormControl(''), + }); + this.shownSpaces = this.spacesList; + } + + ngOnInit(): void { + this.spaceForm.controls.space.valueChanges + .pipe(untilDestroyed(this)) + .subscribe(this.onSearchValueChange.bind(this)); + } + + public onSearchValueChange(): void { + const searchValue = this.spaceForm.controls.space.value; + this.shownSpaces = this.spacesList.filter((space) => + (space.name || '').toLowerCase().includes(searchValue.toLowerCase()), + ); + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } +} diff --git a/src/app/pages/member/pages/tokens/tokens.page.html b/src/app/pages/member/pages/tokens/tokens.page.html new file mode 100644 index 0000000..0f25ecf --- /dev/null +++ b/src/app/pages/member/pages/tokens/tokens.page.html @@ -0,0 +1,474 @@ +
    +
    +
    + + Tokens + + + Staking + +
    + + +
    +
    + +
    + Here you will only find tokens that are available to claim or that have not been minted. + Minted tokens will always appear in your associated Firefly or TanglePay wallet. +
    +
    + +
    +
    + I understand +
    + +
    +
    + + +
    + + + + Item + Type + Total + + + + + + + + + +
    + + +
    + {{ t.name }} +
    +
    + + Owned + + {{ (t.distribution.tokenOwned | formatToken: t.uid:false:false | async) + ' ' + + (t?.symbol === 'IOTA' ? 'M' : '') + t.symbol }} + + + + + + + +
    + + +
    + {{ t.name }} +
    +
    + + +
    + Airdropped + + (from {{ drop.vestingAt.toDate() | + date: 'shortDate' }}) + +
    + + + {{ (drop.count | formatToken: t.uid: false: false | async) + ' ' + + (t?.symbol === 'IOTA' ? 'M' : '') + t.symbol }} + + + + + +
    +
    + + + + +
    + + +
    + {{ t.name }} +
    +
    + + +
    + Owned + Airdropped +
    + + + {{ ( (!t.distribution.mintedClaimedOn ? (t.distribution.tokenOwned || 0) : 0) + + (t.distribution.tokenDrops?.[0]?.count || 0) | formatToken: + t?.uid:false:false | async) + ' ' + (t?.symbol === 'IOTA' ? 'M' : '') + + t.symbol }} + + + + + +
    + + + +
    + + +
    + {{ t.name }} +
    +
    + + Deposit for purchase + {{ t.distribution.totalDeposit | formatToken }} + + + + +
    + +
    +
    +
    + +
    +

    + {{ ((tokens$ | async)?.length || 0) + ((maxRecords$ | async) === false ? '+' : '') }} + Tokens +

    +
    + + + +
    + + No tokens + +
    +
    + + + +
    +
    + + + +
    + + + + +
    + Active Staking + Expired Staking + + + +
      +
    • + Active Staking +
    • +
    • + Expired Staking +
    • +
    +
    +
    +
    + +
    + + + + Item + Type + Staked From + Staked Until + Amount + Multiplier + Staked Value + + + + + +
    + + +
    + {{ t.tokenRec.name }} +
    +
    + + {{ t.type | uppercase }} + {{ t.createdOn?.toDate() | date:'short' }} + {{ t.expiresAt?.toDate() | date:'short' }} + + {{ (t.amount | formatToken: t.tokenRec.uid:true:false | async) + ' ' + + t.tokenRec.symbol }} + + {{ calcMult(t.weeks) | number: '1.0-2'}} + + {{ (t.value | formatToken: t.tokenRec.uid:true:false | async) + ' ' + + t.tokenRec.symbol }} + + + +
    +
    +
    + + +
    +

    + {{ ((filteredStakes$ | async)?.length || 0) + ((maxRecords$ | async) === false ? '+' : '') + }} + Stakes +

    +
    + + + +
    + + No Stakes + +
    +
    + +
    +
    + + + {{ t.tokenRec.name }} +
    + +
    + +
    +
    + Staked from - to +
    +
    + {{ t.createdOn?.toDate() | date:'short' }} + - {{ t.expiresAt?.toDate() | date:'short' }} +
    +
    + +
    +
    + Amount (Multiplier) +
    +
    + {{ (t.amount | formatToken: t.tokenRec.uid:true:false | async) + ' ' + + t.tokenRec.symbol }} ({{ calcMult(t.weeks) | number: '1.0-2'}}x) +
    +
    +
    +
    + Staked Value +
    +
    + {{ (t.value | formatToken: t.tokenRec.uid:true:false | async) + ' ' + + t.tokenRec.symbol }} +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/src/app/pages/member/pages/tokens/tokens.page.less b/src/app/pages/member/pages/tokens/tokens.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/member/pages/tokens/tokens.page.ts b/src/app/pages/member/pages/tokens/tokens.page.ts new file mode 100644 index 0000000..a7e6ce9 --- /dev/null +++ b/src/app/pages/member/pages/tokens/tokens.page.ts @@ -0,0 +1,320 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { ActivatedRoute } from '@angular/router'; +import { DEFAULT_LIST_SIZE } from '@api/base.api'; +import { MemberApi, StakeWithTokenRec, TokenWithMemberDistribution } from '@api/member.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { StorageItem, getItem, setItem } from '@core/utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/member/services/data.service'; +import { HelperService } from '@pages/member/services/helper.service'; +import { Member, Stake, Token, TokenDrop, calcStakedMultiplier } from '@soonaverse/interfaces'; +import { BehaviorSubject, Observable, Subscription, combineLatest, map, of } from 'rxjs'; + +export enum TokenItemType { + CLAIM = 'Claim', + REFUND = 'Refund', +} + +enum FilterOptions { + TOKENS = 'tokens', + STAKING = 'staking', +} + +enum StakingFilterOptions { + ACTIVE = 'active', + EXPIRED = 'expired', +} + +@UntilDestroy() +@Component({ + selector: 'wen-tokens', + templateUrl: './tokens.page.html', + styleUrls: ['./tokens.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokensPage implements OnInit, OnDestroy { + public selectedListControl: FormControl = new FormControl(FilterOptions.TOKENS); + public tokens$: BehaviorSubject = new BehaviorSubject< + TokenWithMemberDistribution[] | undefined + >(undefined); + public stakes$: BehaviorSubject = new BehaviorSubject< + StakeWithTokenRec[] | undefined + >(undefined); + public modifiedTokens$: Observable; + public openTokenRefund?: TokenWithMemberDistribution | null; + public openTokenClaim?: TokenWithMemberDistribution | null; + public tokenActionTypeLabels = { + [TokenItemType.CLAIM]: $localize`Claim`, + [TokenItemType.REFUND]: $localize`Refund`, + }; + public isNotMintedWarningVisible = false; + public stakingFilter$: BehaviorSubject = + new BehaviorSubject(StakingFilterOptions.ACTIVE); + private dataStoreTokens: TokenWithMemberDistribution[][] = []; + private dataStoreStakes: Stake[][] = []; + private subscriptions$: Subscription[] = []; + + constructor( + public previewImageService: PreviewImageService, + public deviceService: DeviceService, + public data: DataService, + private route: ActivatedRoute, + public helper: HelperService, + public unitsService: UnitsService, + private auth: AuthService, + private memberApi: MemberApi, + private cd: ChangeDetectorRef, + ) { + this.modifiedTokens$ = this.tokens$.pipe( + map((tokens) => { + if (!tokens) { + return []; + } + + return tokens + .sort((a, b) => { + if (a.createdOn && b.createdOn) { + return b.createdOn.toMillis() - a.createdOn.toMillis(); + } + return 0; + }) + .map((token) => { + return { + ...token, + distribution: { + ...token.distribution, + tokenDrops: token.distribution?.tokenDrops?.length + ? [ + token.distribution.tokenDrops.reduce((acc: TokenDrop, cur: TokenDrop) => ({ + ...cur, + count: acc.count + cur.count, + })), + ] + : [], + }, + }; + }); + }), + map((tokens) => + tokens.filter( + (t) => + (!this.helper.isMinted(t) && + (t.distribution.tokenOwned || t.distribution.tokenDrops?.length)) || + (this.helper.isMinted(t) && + !t.distribution.mintedClaimedOn && + (t.distribution.tokenOwned || 0) > 0) || + (this.helper.isMinted(t) && (t.distribution.tokenDrops?.[0]?.count || 0) > 0) || + (this.helper.salesInProgressOrUpcoming(t) && + t.distribution.totalDeposit && + !helper.isMinted(t)), + ), + ), + ); + } + + public calcMult(weeks: number): number { + return calcStakedMultiplier(weeks); + } + + public ngOnInit(): void { + this.route.params?.pipe(untilDestroyed(this)).subscribe((obj) => { + if (obj?.tab === 'staking') { + this.handleFilterChange(FilterOptions.STAKING); + } + }); + + this.data.member$?.pipe(untilDestroyed(this)).subscribe((obj) => { + if (obj) { + this.listen(); + } + }); + this.handleNotMintedWarning(); + } + + public handleFilterChange(filter: FilterOptions): void { + this.selectedListControl.setValue(filter); + this.cd.markForCheck(); + } + + public get loggedInMember$(): BehaviorSubject { + return this.auth.member$; + } + + public claim(token: TokenWithMemberDistribution): void { + this.openTokenClaim = this.tokens$.getValue()?.find((t) => t.uid === token.uid); + this.cd.markForCheck(); + } + + public get filterOptions(): typeof FilterOptions { + return FilterOptions; + } + + private listen(): void { + this.cancelSubscriptions(); + this.tokens$.next(undefined); + this.stakes$.next(undefined); + this.subscriptions$.push( + this.getHandlerTokens(undefined).subscribe(this.store.bind(this, 0, FilterOptions.TOKENS)), + ); + this.subscriptions$.push( + this.getHandlerStaked(undefined).subscribe(this.store.bind(this, 0, FilterOptions.STAKING)), + ); + } + + public get stakingFilters(): typeof StakingFilterOptions { + return StakingFilterOptions; + } + + public isLoading(arr: any): boolean { + return arr === undefined; + } + + public isEmpty(arr: any): boolean { + return Array.isArray(arr) && arr.length === 0; + } + + public getHandlerTokens(last?: any): Observable { + if (this.data.member$.value?.uid) { + return this.memberApi.topTokens(this.data.member$.value.uid); + } else { + return of([]); + } + } + + public getHandlerStaked(last?: any): Observable { + if (this.data.member$.value?.uid) { + return this.memberApi.topStakes(this.data.member$.value.uid, last); + } else { + return of([]); + } + } + + public get tokenItemTypes(): typeof TokenItemType { + return TokenItemType; + } + + public get dataStore(): any { + return this.selectedListControl.value === FilterOptions.TOKENS + ? this.dataStoreTokens + : this.dataStoreStakes; + } + + public set dataStore(obj: any) { + if (this.selectedListControl.value === FilterOptions.TOKENS) { + this.dataStoreTokens = obj; + } else { + this.dataStoreStakes = obj; + } + } + + public get currentList$(): any { + return this.selectedListControl.value === FilterOptions.TOKENS ? this.tokens$ : this.stakes$; + } + + public get filteredStakes$(): Observable { + return combineLatest([this.stakes$, this.stakingFilter$]).pipe( + map(([stakes, f]) => { + return stakes?.filter((s) => { + return f === StakingFilterOptions.EXPIRED + ? s.expirationProcessed + : !s.expirationProcessed; + }); + }), + ); + } + + public onScroll(): void { + // In this case there is no value, no need to infinite scroll. + if (!this.currentList$.value) { + return; + } + + if ( + !this.dataStore[this.dataStore.length - 1] || + this.dataStore[this.dataStore.length - 1]?.length < DEFAULT_LIST_SIZE + ) { + return; + } + + // Def order field. + const lastValue = this.currentList$.value[this.currentList$.value.length - 1]._doc; + this.subscriptions$.push( + this.getHandlerTokens(lastValue).subscribe( + this.store.bind(this, this.dataStore.length, this.selectedListControl.value), + ), + ); + } + + protected store(page: number, filter: FilterOptions, a: any): void { + // Merge arrays. + if (filter === FilterOptions.TOKENS) { + if (this.dataStoreTokens[page]) { + this.dataStoreTokens[page] = a; + } else { + this.dataStoreTokens.push(a); + } + this.tokens$.next(Array.prototype.concat.apply([], this.dataStoreTokens)); + } else { + if (this.dataStoreStakes[page]) { + this.dataStoreStakes[page] = a; + } else { + this.dataStoreStakes.push(a); + } + this.stakes$.next(Array.prototype.concat.apply([], this.dataStoreStakes)); + } + } + + public get maxRecords$(): BehaviorSubject { + return >this.currentList$.pipe( + map(() => { + if (!this.dataStore[this.dataStore.length - 1]) { + return true; + } + + return ( + !this.dataStore[this.dataStore.length - 1] || + this.dataStore[this.dataStore.length - 1]?.length < DEFAULT_LIST_SIZE + ); + }), + ); + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + public understandNotMintedWarning(): void { + setItem(StorageItem.NotMintedTokensWarningClosed, true); + this.isNotMintedWarningVisible = false; + } + + private handleNotMintedWarning(): void { + const notMintedWarningClosed = getItem(StorageItem.NotMintedTokensWarningClosed); + if (!notMintedWarningClosed) { + this.isNotMintedWarningVisible = true; + } + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + + this.dataStoreStakes = []; + this.dataStoreTokens = []; + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/member/pages/transactions/transactions.page.html b/src/app/pages/member/pages/transactions/transactions.page.html new file mode 100644 index 0000000..e3ea625 --- /dev/null +++ b/src/app/pages/member/pages/transactions/transactions.page.html @@ -0,0 +1,141 @@ +
    + + + +
    + + +
    + + + + Date + Item + Type + Amount + + + + + + + {{ t.createdOn?.toDate() | date: 'short' }} + + + NFT + Token + Collection + + {{ transactionService.getTitle(t) }} + + {{ t.payload.nativeTokens[0].amount| formatToken: t.payload.token:false:false | async }} +  {{ t.payload.tokenSymbol || 'Tokens' }} + + + {{ t.payload.amount | formatToken: t.network | async }} + + + Transaction + +
    Non Transferable
    +
    + +
    +
    Processing...
    +
    + + + +
    +
    +
    + +
    +

    + {{ ((transactions$ | async)?.length || 0) + ((maxRecords$ | async) === false ? '+' : '') }} NFTs +

    +
    + + + +
    + + No transactions + +
    +
    + + + +
    +
    + + diff --git a/src/app/pages/member/pages/transactions/transactions.page.less b/src/app/pages/member/pages/transactions/transactions.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/member/pages/transactions/transactions.page.ts b/src/app/pages/member/pages/transactions/transactions.page.ts new file mode 100644 index 0000000..bb1bb28 --- /dev/null +++ b/src/app/pages/member/pages/transactions/transactions.page.ts @@ -0,0 +1,219 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { DEFAULT_LIST_SIZE } from '@api/base.api'; +import { MemberApi } from '@api/member.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { download } from '@core/utils/tools.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/member/services/data.service'; +import { HelperService } from '@pages/member/services/helper.service'; +import { Member, Transaction, TransactionType } from '@soonaverse/interfaces'; +import Papa from 'papaparse'; +import { BehaviorSubject, Observable, Subscription, first, map, of } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-transactions', + templateUrl: './transactions.page.html', + styleUrls: ['./transactions.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TransactionsPage implements OnInit, OnDestroy { + public transactions$: BehaviorSubject = new BehaviorSubject< + Transaction[] | undefined + >(undefined); + public exportingTransactions = false; + public openLockedTokenClaim?: Transaction | null; + private dataStore: Transaction[][] = []; + private subscriptions$: Subscription[] = []; + + constructor( + public deviceService: DeviceService, + public transactionService: TransactionService, + public helper: HelperService, + public unitsService: UnitsService, + public data: DataService, + private auth: AuthService, + private memberApi: MemberApi, + private cd: ChangeDetectorRef, + private route: ActivatedRoute, + ) {} + + public ngOnInit(): void { + this.route.params.subscribe((params) => { + if (params?.export === 'true' || params?.export === true) { + this.exportTransactions(); + this.cd.markForCheck(); + } + }); + + this.data.member$?.pipe(untilDestroyed(this)).subscribe((obj) => { + if (obj) { + this.listen(); + } + }); + } + + public getDebugInfo(tran: Transaction | undefined | null): string { + let msg = `uid: ${tran?.uid}, tries: ${tran?.payload?.walletReference?.count || 0}`; + if (tran?.payload?.walletReference?.error) { + msg += `, error: "${tran?.payload?.walletReference?.error}"`; + } + + return msg; + } + + private listen(): void { + this.cancelSubscriptions(); + this.transactions$.next(undefined); + this.subscriptions$.push(this.getHandler(undefined).subscribe(this.store.bind(this, 0))); + } + + public isLoading(arr: any): boolean { + return arr === undefined; + } + + public get loggedInMember$(): BehaviorSubject { + return this.auth.member$; + } + + public isEmpty(arr: any): boolean { + return Array.isArray(arr) && arr.length === 0; + } + + public isNotVote(type: TransactionType): boolean { + return type !== TransactionType.VOTE; + } + + public claimLocked(transaction: Transaction): void { + this.openLockedTokenClaim = transaction; + this.cd.markForCheck(); + } + + public getHandler(last?: any): Observable { + if (this.data.member$.value) { + return this.memberApi.topTransactions(this.data.member$.value.uid, undefined, last); + } else { + return of([]); + } + } + + public onScroll(): void { + // In this case there is no value, no need to infinite scroll. + if (!this.transactions$.value) { + return; + } + + // We reached maximum. + if ( + !this.dataStore[this.dataStore.length - 1] || + this.dataStore[this.dataStore.length - 1]?.length < DEFAULT_LIST_SIZE + ) { + return; + } + + // Def order field. + const lastValue = this.transactions$.value[this.transactions$.value.length - 1]._doc; + this.subscriptions$.push( + this.getHandler(lastValue).subscribe(this.store.bind(this, this.dataStore.length)), + ); + } + + protected store(page: number, a: any): void { + if (this.dataStore[page]) { + this.dataStore[page] = a; + } else { + this.dataStore.push(a); + } + + // Merge arrays. + this.transactions$.next(Array.prototype.concat.apply([], this.dataStore)); + } + + public get maxRecords$(): BehaviorSubject { + return >this.transactions$.pipe( + map(() => { + if (!this.dataStore[this.dataStore.length - 1]) { + return true; + } + + return ( + !this.dataStore[this.dataStore.length - 1] || + this.dataStore[this.dataStore.length - 1]?.length < DEFAULT_LIST_SIZE + ); + }), + ); + } + + public exportTransactions(): void { + if (!this.data.member$.value?.uid) return; + this.exportingTransactions = true; + this.memberApi + .topTransactions(this.data.member$.value?.uid, undefined, undefined) + .pipe(first(), untilDestroyed(this)) + .subscribe((transactions: Transaction[]) => { + this.exportingTransactions = false; + const fields = [ + '', + 'tranUid', + 'network', + 'type', + 'date', + 'amount', + 'tokenAmount', + 'tokenId', + 'tokenUid', + 'nftUid', + 'collectionUid', + 'tangle', + ]; + const csv = Papa.unparse({ + fields, + data: transactions.map((t) => [ + t.uid, + t.network, + this.transactionService.getTitle(t), + t.createdOn?.toDate(), + t.payload.amount, + t.payload.nativeTokens?.[0]?.amount || '', + t.payload.nativeTokens?.[0]?.id || '', + t.payload.token, + t.payload.nft, + t.payload.collection, + this.transactionService.getExplorerLink(t), + ]), + }); + + download( + `data:text/csv;charset=utf-8${csv}`, + `soonaverse_${this.data.member$.value?.uid}_transactions.csv`, + ); + this.cd.markForCheck(); + }); + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + + this.dataStore = []; + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/member/services/data.service.ts b/src/app/pages/member/services/data.service.ts new file mode 100644 index 0000000..1c5f59b --- /dev/null +++ b/src/app/pages/member/services/data.service.ts @@ -0,0 +1,97 @@ +import { Injectable } from '@angular/core'; +import { MemberApi } from '@api/member.api'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { Award, Member, Space, Transaction } from '@soonaverse/interfaces'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { + AuditOneQueryService, + AuditOneResponseMember, +} from 'src/app/service-modules/audit-one/services/query.service'; +import { TransactionApi } from './../../../@api/transaction.api'; + +export enum MemberAction { + EDIT = 'edit', + MANAGE_ADDRESSES = 'manage_addresses', +} + +@UntilDestroy() +@Injectable({ + providedIn: 'any', +}) +export class DataService { + public member$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public awardsCompleted$: BehaviorSubject = new BehaviorSubject< + Award[] | undefined + >(undefined); + public awardsPending$: BehaviorSubject = new BehaviorSubject< + Award[] | undefined + >(undefined); + public badges$: BehaviorSubject = new BehaviorSubject< + Transaction[] | undefined + >(undefined); + public space$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public triggerAction$: BehaviorSubject = new BehaviorSubject< + MemberAction | undefined + >(undefined); + + public auditOneStatus$: BehaviorSubject = new BehaviorSubject< + AuditOneResponseMember | undefined + >(undefined); + + public lastLoadedMemberId?: string; + public subscriptions$: Subscription[] = []; + + constructor( + private memberApi: MemberApi, + private tranApi: TransactionApi, + private auditOneModule: AuditOneQueryService, + ) { + // none. + } + + public async loadServiceModuleData(): Promise { + // Audit One widget. + if (this.member$.value?.uid) { + const member = await this.auditOneModule.getMemberStatus(this.member$.value?.uid); + this.auditOneStatus$.next(member); + } + } + + public async refreshBadges(): Promise { + this.cancelSubscriptions(); + if (this.member$.value?.uid) { + // Already loaded. Do nothing. Reduce network requests. + if (this.lastLoadedMemberId === this.member$.value.uid) { + return; + } + + this.lastLoadedMemberId = this.member$.value.uid; + this.subscriptions$.push( + this.memberApi + .topBadges(this.member$.value.uid, 'createdOn', undefined) + .pipe(untilDestroyed(this)) + .subscribe(this.badges$), + ); + } + } + + public resetSubjects(): void { + // Clean up all streams. + this.member$.next(undefined); + this.awardsCompleted$.next(undefined); + this.awardsPending$.next(undefined); + this.badges$.next(undefined); + this.space$.next(undefined); + this.auditOneStatus$.next(undefined); + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } +} diff --git a/src/app/pages/member/services/helper.service.ts b/src/app/pages/member/services/helper.service.ts new file mode 100644 index 0000000..471beff --- /dev/null +++ b/src/app/pages/member/services/helper.service.ts @@ -0,0 +1,60 @@ +import { Injectable } from '@angular/core'; +import { SelectCollectionOption } from '@components/collection/components/select-collection/select-collection.component'; +import { SelectSpaceOption } from '@components/space/components/select-space/select-space.component'; +import { Collection, Space, Token, TokenDrop, TokenStatus } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; + +@Injectable({ + providedIn: 'root', +}) +export class HelperService { + public preMinted(token: Token): boolean { + return token.status === TokenStatus.PRE_MINTED; + } + + public isMinted(token: Token): boolean { + return token.status === TokenStatus.MINTED || token.status === TokenStatus.BASE; + } + + public salesInProgressOrUpcoming(token: Token): boolean { + return ( + !!token.saleStartDate && + dayjs(token.saleStartDate?.toDate()).isBefore(dayjs()) && + token?.status !== TokenStatus.PRE_MINTED && + token?.approved + ); + } + + public vestingInFuture(drop: TokenDrop): boolean { + return dayjs(drop.vestingAt.toDate()).isAfter(dayjs()); + } + + public isInCooldown(token?: Token): boolean { + return ( + !!token?.approved && + (token?.status === TokenStatus.AVAILABLE || token?.status === TokenStatus.PROCESSING) && + dayjs(token?.coolDownEnd?.toDate()).isAfter(dayjs()) && + dayjs(token?.saleStartDate?.toDate()) + .add(token?.saleLength || 0, 'ms') + .isBefore(dayjs()) + ); + } + + public getCollectionListOptions(list?: Collection[] | null): SelectCollectionOption[] { + return (list || []) + .filter((o) => o.rejected !== true) + .map((o) => ({ + label: o.name || o.uid, + value: o.uid, + img: o.bannerUrl, + })); + } + + public getSpaceListOptions(list?: Space[] | null): SelectSpaceOption[] { + return (list || []).map((o) => ({ + label: o.name || o.uid, + value: o.uid, + img: o.avatarUrl, + })); + } +} diff --git a/src/app/pages/nft/nft-routing.module.ts b/src/app/pages/nft/nft-routing.module.ts new file mode 100644 index 0000000..81185af --- /dev/null +++ b/src/app/pages/nft/nft-routing.module.ts @@ -0,0 +1,31 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { MultiplePage } from './pages/new/multiple/multiple.page'; +import { NewPage } from './pages/new/new.page'; +import { SinglePage } from './pages/new/single/single.page'; +import { NFTPage } from './pages/nft/nft.page'; +import { NotFoundPage } from './pages/not-found/not-found.page'; + +const routes: Routes = [ + { + path: ROUTER_UTILS.config.nft.newNft, + component: NewPage, + children: [ + { path: '', redirectTo: ROUTER_UTILS.config.nft.single, pathMatch: 'full' }, + { path: ROUTER_UTILS.config.nft.single, component: SinglePage }, + { path: ROUTER_UTILS.config.nft.multiple, component: MultiplePage }, + ], + }, + { path: ROUTER_UTILS.config.nft.notFound, component: NotFoundPage }, + { + path: ROUTER_UTILS.config.nft.nft, + component: NFTPage, + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class NftRoutingModule {} diff --git a/src/app/pages/nft/nft.module.ts b/src/app/pages/nft/nft.module.ts new file mode 100644 index 0000000..8811e61 --- /dev/null +++ b/src/app/pages/nft/nft.module.ts @@ -0,0 +1,104 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { CollapseModule } from '@components/collapse/collapse.module'; +import { CollectionStatusModule } from '@components/collection/components/collection-status/collection-status.module'; +import { ConfirmModalModule } from '@components/confirm-modal/confirm-modal.module'; +import { ConnectWalletModule } from '@components/connect-wallet/connect-wallet.module'; +import { CountdownModule } from '@components/countdown/countdown.module'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { IotaInputModule } from '@components/iota-input/iota-input.module'; +import { NftBidModule } from '@components/nft/components/nft-bid/nft-bid.module'; +import { NftCardModule } from '@components/nft/components/nft-card/nft-card.module'; +import { NftCheckoutModule } from '@components/nft/components/nft-checkout/nft-checkout.module'; +import { NftPreviewModule } from '@components/nft/components/nft-preview/nft-preview.module'; +import { NftSaleModule } from '@components/nft/components/nft-sale/nft-sale.module'; +import { RadioModule } from '@components/radio/radio.module'; +import { ShareModule } from '@components/share/share.module'; +import { TabsModule } from '@components/tabs/tabs.module'; +import { TimelineModule } from '@components/timeline/timeline.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { MarkDownModule } from '@core/pipes/markdown/markdown.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { StripMarkDownModule } from '@core/pipes/strip-markdown/strip-markdown.module'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { LayoutModule } from '@shell/ui/layout/layout.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzInputNumberModule } from 'ng-zorro-antd/input-number'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzRadioModule } from 'ng-zorro-antd/radio'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NzUploadModule } from 'ng-zorro-antd/upload'; +import { NgChartsModule } from 'ng2-charts'; +import { NftRoutingModule } from './nft-routing.module'; +import { MultiplePage } from './pages/new/multiple/multiple.page'; +import { NewPage } from './pages/new/new.page'; +import { SinglePage } from './pages/new/single/single.page'; +import { NFTPage } from './pages/nft/nft.page'; +import { NotFoundPage } from './pages/not-found/not-found.page'; +import { DataService } from './services/data.service'; + +@NgModule({ + declarations: [NFTPage, NewPage, SinglePage, MultiplePage, NotFoundPage], + imports: [ + CommonModule, + NftRoutingModule, + LayoutModule, + NzButtonModule, + CollectionStatusModule, + FormsModule, + ReactiveFormsModule, + NzCardModule, + NzFormModule, + NzInputNumberModule, + IconModule, + NzUploadModule, + MarkDownModule, + NftBidModule, + NftCheckoutModule, + StripMarkDownModule, + ResizeAvatarModule, + NzDatePickerModule, + RadioModule, + NzIconModule, + NzInputModule, + NzRadioModule, + NzSelectModule, + TabsModule, + NzTagModule, + NzAvatarModule, + NzToolTipModule, + NzSkeletonModule, + TruncateModule, + NftCardModule, + NftPreviewModule, + CollapseModule, + NzTableModule, + FormatTokenModule, + TruncateModule, + NzModalModule, + ShareModule, + NftSaleModule, + CollapseModule, + NgChartsModule, + DescriptionModule, + CountdownModule, + TimelineModule, + IotaInputModule, + ConnectWalletModule, + ConfirmModalModule, + ], + providers: [DataService], +}) +export class NFTModule {} diff --git a/src/app/pages/nft/pages/new/multiple/multiple.page.html b/src/app/pages/nft/pages/new/multiple/multiple.page.html new file mode 100644 index 0000000..86667cb --- /dev/null +++ b/src/app/pages/nft/pages/new/multiple/multiple.page.html @@ -0,0 +1,226 @@ +
    +
    +
    +
    + + + + +
    + + + + + + {{ allowedFileFormats }} + + + + +
    + +
    +
    Some files have not been uploaded
    + + +
    +
    + Please only use a-z, A-Z, _, -, 0-9 characters. +
    +
    + - {{ err }} +
    +
    +
    +
    +
    + + +
    + +
    Some of the NFTs are faulty!
    +
    + + + + + Filename + Name + Price + + + + + + + +
    + {{ getMediaName(nft.media) | truncate:[12] }} +
    + + +
    {{ nft.name | truncate:[12] }}
    + + +
    {{ (nft.price | formatToken) }}
    + + + + +
    +
    Error
    + + +
    +
    + - {{ err }} +
    +
    +
    +
    +
    + + + + + + +
    +
    +
    + +
    + + + + + + + + + +
    + + + + +
    + + + + + + + + + +
    +
    + +
    +
    + You have to upload images first. +
    +
    +
    +
    +
    +
    + + + + +
    + +
    + +
    + To create multiple classic NFTs, you have to use the web version of Soonaverse. +
    +
    diff --git a/src/app/pages/nft/pages/new/multiple/multiple.page.less b/src/app/pages/nft/pages/new/multiple/multiple.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/nft/pages/new/multiple/multiple.page.ts b/src/app/pages/nft/pages/new/multiple/multiple.page.ts new file mode 100644 index 0000000..f07e9b4 --- /dev/null +++ b/src/app/pages/nft/pages/new/multiple/multiple.page.ts @@ -0,0 +1,524 @@ +/* eslint-disable no-invalid-this */ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core'; +import { FormControl, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { FileApi } from '@api/file.api'; +import { NftApi } from '@api/nft.api'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { AuthService } from '@components/auth/services/auth.service'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { UnitsService } from '@core/services/units'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { download } from '@core/utils/tools.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/nft/services/data.service'; +import { HelperService } from '@pages/nft/services/helper.service'; +import { + COL, + Collection, + CollectionType, + FILENAME_REGEXP, + MAX_IOTA_AMOUNT, + MIN_IOTA_AMOUNT, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { NzNotificationService } from 'ng-zorro-antd/notification'; +import { NzSelectOptionInterface } from 'ng-zorro-antd/select'; +import { + NzUploadChangeParam, + NzUploadFile, + NzUploadXHRArgs, + UploadFilter, +} from 'ng-zorro-antd/upload'; +import Papa from 'papaparse'; +import { BehaviorSubject, from, Observable, of, Subscription } from 'rxjs'; +import { StepType } from '../new.page'; + +export interface NFTObject { + [key: string]: { + label: string; + validate: (value: any) => boolean; + required: boolean; + fields?: string[]; + value?: () => any; + defaultAmount?: number; + }; +} + +@UntilDestroy() +@Component({ + selector: 'wen-multiple', + templateUrl: './multiple.page.html', + styleUrls: ['./multiple.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MultiplePage implements OnInit { + public collectionControl: FormControl = new FormControl(''); + public nftForm: FormGroup; + public stepType = StepType; + public currentStep = StepType.GENERATE; + public previewNft?: any | null; + public uploadedFiles: NzUploadFile[] = []; + public price?: number | null; + public availableFrom?: Date | null; + public nfts: any[] = []; + public nftErrors: any[] = []; + public allowedFileFormats = 'jpg/jpeg/png/webp/mp4'; + public uploadFilter: UploadFilter[] = []; + public uploadErrors: string[] = []; + public imagesLimit = 500; + public collection?: Collection; + public generateClicked = false; + public startSuccessCounter = 0; + public filteredCollections$: BehaviorSubject = new BehaviorSubject< + NzSelectOptionInterface[] + >([]); + private collectionSubscription?: Subscription; + private usedFileNames = new Set(); + public nftObject: NFTObject = { + media: { + label: 'media', + required: true, + validate: (value: string) => { + if (!value) return false; + if (this.usedFileNames.has(value)) { + return false; + } + const result = !!this.uploadedFiles.find((f: NzUploadFile) => f.name === value); + if (result) { + this.usedFileNames.add(value); + } + return result; + }, + }, + name: { + label: 'name', + required: true, + validate: (value: string) => !!value, + }, + description: { + label: 'description', + required: true, + validate: (value: string) => !!value, + }, + price: { + label: 'price', + required: true, + validate: (value: string) => { + if (this.price) return true; + const price = Number(value); + if (!value || isNaN(price) || price < MIN_IOTA_AMOUNT || price > MAX_IOTA_AMOUNT) + return false; + return true; + }, + value: () => this.price, + }, + availableFrom: { + label: 'available_from', + required: true, + validate: (value: string) => { + if (this.availableFrom) { + return true; + } + + if (!value || !dayjs(value).isValid()) { + return false; + } + + const d = dayjs(value); + return dayjs().toDate().getTime() < d.toDate().getTime(); + }, + value: () => this.availableFrom, + }, + property: { + label: 'prop', + required: false, + fields: ['label', 'value'], + validate: () => true, + defaultAmount: 5, + }, + stat: { + label: 'stat', + required: false, + fields: ['label', 'value'], + validate: () => true, + defaultAmount: 5, + }, + }; + + constructor( + public deviceService: DeviceService, + public cache: CacheService, + public data: DataService, + public helper: HelperService, + public unitsService: UnitsService, + public readonly algoliaService: AlgoliaService, + private nzNotification: NzNotificationService, + private notification: NotificationService, + private auth: AuthService, + private fileApi: FileApi, + private route: ActivatedRoute, + private cd: ChangeDetectorRef, + private nftApi: NftApi, + private router: Router, + ) { + this.nftForm = new FormGroup({ + collection: this.collectionControl, + }); + } + + public ngOnInit(): void { + this.collectionControl.valueChanges.pipe(untilDestroyed(this)).subscribe((o) => { + this.cache.getCollection(o).subscribe((finObj) => { + if (finObj) { + this.reset(); + this.collection = finObj; + if ( + this.collection && + (this.collection.type === CollectionType.GENERATED || + this.collection.type === CollectionType.SFT) + ) { + this.price = this.collection.price || 0; + this.availableFrom = ( + this.collection.availableFrom || this.collection.createdOn + ).toDate(); + } else { + this.price = null; + this.availableFrom = null; + } + + this.filteredCollections$.next([ + { + label: finObj.name || finObj.uid, + value: finObj.uid, + }, + ]); + } + }); + }); + + this.route.parent?.params.pipe(untilDestroyed(this)).subscribe((p) => { + if (p.collection) { + this.collectionControl.setValue(p.collection); + } + }); + + this.auth.member$?.pipe(untilDestroyed(this)).subscribe(() => { + this.cd.markForCheck(); + }); + + this.uploadFilter = [ + { + name: 'filenameFilter', + fn: (fileList: NzUploadFile[]): NzUploadFile[] | Observable => { + const res: NzUploadFile[] = []; + fileList.forEach((file: NzUploadFile) => { + if (this.isValidFileName(file.name)) { + res.push(file); + } else { + this.uploadErrors.push(`File name ${file.name} is not valid`); + } + }); + this.cd.markForCheck(); + return res; + }, + }, + ]; + } + + public uploadMultipleFiles(item: NzUploadXHRArgs): Subscription { + if (!this.auth.member$.value) { + const err = $localize`Member seems to log out during the file upload request.`; + this.nzNotification.error(err, ''); + if (item.onError) { + item.onError(err, item.file); + } + + return of(undefined).subscribe(); + } + return this.fileApi.upload(this.auth.member$.value.uid, item); + } + + public uploadMultipleChange(event: NzUploadChangeParam): void { + if (event.type === 'start') { + this.startSuccessCounter++; + } + if (event.type === 'success') { + this.startSuccessCounter--; + this.uploadedFiles.push(event.file); + } else if (event.type === 'removed') { + this.uploadedFiles = this.uploadedFiles.filter( + (f: NzUploadFile) => f.name !== event.file.name, + ); + } + this.cd.markForCheck(); + } + + public formatSubmitData(data: any): any { + const res: any = {}; + + if (data.property && data.property.length > 0) { + const obj = data.property + .map((s: { [key: string]: string }) => ({ + key: Object.keys(s)[0], + value: Object.values(s)[0], + })) + .filter((s: { [key: string]: string }) => s.key && s.value) + .reduce((acc: any, cur: any) => { + const index = Number( + cur.key.substring(cur.key.split('').findIndex((c: any) => !isNaN(c))), + ); + const key = `prop${index}`; + const newObj = acc[key] || {}; + if (cur.key.includes('label')) { + newObj.label = cur.value; + } else { + newObj.value = cur.value; + } + return { ...acc, [key]: newObj }; + }, {}); + + const filteredObj = Object.keys(obj).filter( + (key: string) => obj[key].label && obj[key].value, + ); + + if (filteredObj.length > 0) { + res.properties = filteredObj.reduce( + (acc: any, key: string) => ({ + ...acc, + [obj[key].label.replace(/\s/g, '').toLowerCase()]: obj[key], + }), + {}, + ); + } + } + + if (data.stat && data.stat.length > 0) { + const obj = data.stat + .map((s: { [key: string]: string }) => ({ + key: Object.keys(s)[0], + value: Object.values(s)[0], + })) + .filter((s: { [key: string]: string }) => s.key && s.value) + .reduce((acc: any, cur: any) => { + const index = Number( + cur.key.substring(cur.key.split('').findIndex((c: any) => !isNaN(c))), + ); + const key = `stat${index}`; + const newObj = acc[key] || {}; + if (cur.key.includes('label')) { + newObj.label = cur.value; + } else { + newObj.value = cur.value; + } + return { ...acc, [key]: newObj }; + }, {}); + + const filteredObj = Object.keys(obj).filter( + (key: string) => obj[key].label && obj[key].value, + ); + + if (filteredObj.length > 0) { + res.stats = filteredObj.reduce( + (acc: any, key: string) => ({ + ...acc, + [obj[key].label.replace(/\s/g, '').toLowerCase()]: obj[key], + }), + {}, + ); + } + } + + res.name = data.name; + res.description = data.description; + res.price = Number(data.price); + res.collection = this.collectionControl.value; + res.media = this.uploadedFiles.find((f: NzUploadFile) => f.name === data.media)?.response; + res.availableFrom = dayjs(data.availableFrom).toDate(); + return res; + } + + private subscribeCollectionList(search?: string): void { + this.collectionSubscription?.unsubscribe(); + this.collectionSubscription = from( + this.algoliaService.searchClient + .initIndex(COL.COLLECTION) + .search(search || '', { length: 5, offset: 0 }), + ).subscribe((r) => { + this.filteredCollections$.next( + r.hits.map((r) => { + const collection = r as unknown as Collection; + return { + label: collection.name || collection.uid, + value: collection.uid, + }; + }), + ); + }); + } + + public searchCollection(v: string): void { + if (v) { + this.subscribeCollectionList(v); + } + } + + public beforeCSVUpload(file: NzUploadFile): boolean | Observable { + if (!file) return false; + this.nftErrors = []; + this.usedFileNames.clear(); + + Papa.parse(file as unknown as File, { + skipEmptyLines: true, + complete: (results: any) => { + // Use this nfts for multiple upload + const nfts = results.data + .slice(1, results.data.length) + .map((row: string[]) => + row.reduce( + (acc: any, cur: string, index: number) => ({ ...acc, [results.data[0][index]]: cur }), + {}, + ), + ) + .map((nft: any) => { + const newFields: any = {}; + if (this.availableFrom) { + newFields.available_from = this.availableFrom; + } + if (this.price) { + newFields.price = this.price; + } + return { ...nft, ...newFields }; + }) + .map((nft: any) => { + const errors: string[] = []; + Object.values(this.nftObject).forEach((field) => { + if (field.required) { + const isValid = field.fields + ? Object.keys(nft) + .filter((key: string) => key.startsWith(field.label)) + .every((key: string) => field.validate(nft[key])) + : field.validate(nft[field.label]); + if (!isValid) { + errors.push(`Invalid ${field.label}`); + } + } + }); + this.nftErrors.push(errors); + return nft; + }) + .map((nft: any) => + Object.keys(nft).reduce((acc: any, key: string) => { + const fieldKey = + Object.keys(this.nftObject).find((k) => key.startsWith(this.nftObject[k].label)) || + ''; + const value = nft[key]; + return this.nftObject[fieldKey]?.fields + ? { ...acc, [fieldKey]: [...(acc[fieldKey] || []), { [key]: value }] } + : { ...acc, [fieldKey]: value }; + }, {}), + ); + this.currentStep = StepType.PUBLISH; + this.nfts = nfts.map((nft: any) => this.formatSubmitData(nft)); + this.cd.markForCheck(); + }, + }); + return false; + } + + public beforeImagesUpload(file: NzUploadFile): boolean | Observable { + if (!file) return false; + return this.uploadedFiles.length < this.imagesLimit; + } + + public buttonClick(): void { + if (this.currentStep === StepType.GENERATE) { + this.generate(); + this.generateClicked = true; + this.cd.markForCheck(); + } else { + this.publish(); + } + } + + public generate(): void { + const fields = [ + '', + ...Object.values(this.nftObject) + .filter((item) => !item.value || !item.value()) + .map((item) => + item.fields + ? [...Array(item.defaultAmount).keys()].map((num: number) => + (item?.fields || []).map((f) => `${item.label}.${f}${num + 1}`), + ) + : [item.label], + ) + .flat(Infinity), + ] as string[]; + + const data = this.uploadedFiles.map((file: NzUploadFile) => [ + file.name, + ...fields.slice(2, fields.length).map(() => ''), + ]); + + const csv = Papa.unparse({ + fields, + data, + }); + + download(`data:text/csv;charset=utf-8${csv}`, 'soonaverse_NFT_list.csv'); + } + + public async publish(): Promise { + if (!this.nfts?.length) return; + + await this.auth.sign(this.nfts, (sc, finish) => { + this.notification + .processRequest(this.nftApi.batchCreate(sc), 'Created.', finish) + .subscribe(() => { + this.router.navigate([ROUTER_UTILS.config.collection.root, this.collectionControl.value]); + }); + }); + } + + public trackByName(index: number, item: any): number { + return item.name; + } + + public removeNft(index: number): void { + this.nfts = this.nfts.filter((nft: any, i: number) => i !== index); + this.nftErrors = this.nftErrors.filter((nftError: any, i: number) => i !== index); + } + + public isNftError(): boolean { + return this.nftErrors.some((nftErrors: string[]) => nftErrors.length); + } + + public getMediaName(mediaResponse: string): string { + return this.uploadedFiles.find((f: NzUploadFile) => f.response === mediaResponse)?.name || ''; + } + + public reset(): void { + this.currentStep = StepType.GENERATE; + this.previewNft = null; + this.price = null; + this.availableFrom = null; + this.nfts = []; + this.nftErrors = []; + this.usedFileNames.clear(); + this.uploadedFiles = []; + this.uploadFilter = []; + this.uploadErrors = []; + } + + private isValidFileName(str: string): boolean { + const dotIndex = str.indexOf('.'); + return ( + dotIndex > -1 && + FILENAME_REGEXP.test(str.substring(0, dotIndex)) && + this.allowedFileFormats.split('/').includes(str.substring(dotIndex + 1)) + ); + } +} diff --git a/src/app/pages/nft/pages/new/new.page.html b/src/app/pages/nft/pages/new/new.page.html new file mode 100644 index 0000000..bdc37c7 --- /dev/null +++ b/src/app/pages/nft/pages/new/new.page.html @@ -0,0 +1,5 @@ + +

    Create NFT

    + + +
    diff --git a/src/app/pages/nft/pages/new/new.page.less b/src/app/pages/nft/pages/new/new.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/nft/pages/new/new.page.ts b/src/app/pages/nft/pages/new/new.page.ts new file mode 100644 index 0000000..73a41bd --- /dev/null +++ b/src/app/pages/nft/pages/new/new.page.ts @@ -0,0 +1,23 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; + +export enum StepType { + GENERATE = 'Generate', + PUBLISH = 'Publish', +} + +@Component({ + selector: 'wen-new', + templateUrl: './new.page.html', + styleUrls: ['./new.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NewPage { + public sections = [ + { route: [ROUTER_UTILS.config.nft.single], label: $localize`Single` }, + { route: [ROUTER_UTILS.config.nft.multiple], label: $localize`Multiple` }, + ]; + + constructor(public deviceService: DeviceService) {} +} diff --git a/src/app/pages/nft/pages/new/single/single.page.html b/src/app/pages/nft/pages/new/single/single.page.html new file mode 100644 index 0000000..7133a46 --- /dev/null +++ b/src/app/pages/nft/pages/new/single/single.page.html @@ -0,0 +1,397 @@ +
    +
    +
    + + + +
    + + Name + + + + + + Description + + + + +
    +
    + + + + + +
    + + + + Available on + + + + + +
    +
    + + + + + +
    + +
    +
    Property name (E.g. Character)
    +
    Value (E.g. Soonanaut)
    +
    + +
    + + +
    + + + + + +
    +
    +
    +
    + + +
    +
    +
    Property #0{{ i + 1 }}
    + +
    + +
    + +
    Property name
    + + + +
    Value
    + + +
    +
    +
    + + +
    + + + + + +
    + +
    +
    Stats name (E.g. Stamina)
    +
    Value (E.g. 10, 1/10 , etc.)
    +
    + +
    + + +
    + + + + + +
    + +
    +
    +
    + + +
    +
    +
    Stat #0{{ i + 1 }}
    + +
    + +
    + +
    Stat name
    + + + +
    Value
    + + +
    +
    +
    + + +
    +
    + +
    + + + + +
    + + + + + + jpg/jpeg/png/webp/mp4 + + +
    + Media is required +
    + {{ fileUploadError }} +
    +
    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    + +
    + + +
    + + diff --git a/src/app/pages/nft/pages/new/single/single.page.less b/src/app/pages/nft/pages/new/single/single.page.less new file mode 100644 index 0000000..514f651 --- /dev/null +++ b/src/app/pages/nft/pages/new/single/single.page.less @@ -0,0 +1,11 @@ +.wen-radio-group { + display: grid; + input { + width: 100px; + margin-left: 10px; + } +} + +.separator { + @apply w-full h-px bg-foregrounds-separator; +} diff --git a/src/app/pages/nft/pages/new/single/single.page.ts b/src/app/pages/nft/pages/new/single/single.page.ts new file mode 100644 index 0000000..0794225 --- /dev/null +++ b/src/app/pages/nft/pages/new/single/single.page.ts @@ -0,0 +1,388 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { FileApi } from '@api/file.api'; +import { NftApi } from '@api/nft.api'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { AuthService } from '@components/auth/services/auth.service'; +import { SelectCollectionOption } from '@components/collection/components/select-collection/select-collection.component'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/nft/services/data.service'; +import { + COL, + Collection, + CollectionType, + FILENAME_REGEXP, + MAX_IOTA_AMOUNT, + MAX_PROPERTIES_COUNT, + MAX_STATS_COUNT, + MIN_IOTA_AMOUNT, + PRICE_UNITS, + Units, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { DisabledTimeConfig } from 'ng-zorro-antd/date-picker'; +import { NzNotificationService } from 'ng-zorro-antd/notification'; +import { NzSelectOptionInterface } from 'ng-zorro-antd/select'; +import { + NzUploadChangeParam, + NzUploadFile, + NzUploadXHRArgs, + UploadFilter, +} from 'ng-zorro-antd/upload'; +import { BehaviorSubject, Observable, Subscription, from, of } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-single', + templateUrl: './single.page.html', + styleUrls: ['./single.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SinglePage implements OnInit, OnDestroy { + public nameControl: FormControl = new FormControl('', Validators.required); + public descriptionControl: FormControl = new FormControl('', Validators.required); + public priceControl: FormControl = new FormControl(null, Validators.required); + public availableFromControl: FormControl = new FormControl('', Validators.required); + public mediaControl: FormControl = new FormControl('', Validators.required); + public collectionControl: FormControl = new FormControl(''); + public collection?: Collection; + public properties: FormArray; + public stats: FormArray; + public nftForm: FormGroup; + public uploadedFile?: NzUploadFile | null; + public previewNft = null; + public minimumPrice = MIN_IOTA_AMOUNT; + public maximumPrice = MAX_IOTA_AMOUNT; + public uploadFilter: UploadFilter[] = []; + public fileUploadError: string | null = null; + public allowedFileFormats = 'jpg/jpeg/png/webp/mp4'; + public filteredCollections$: BehaviorSubject = new BehaviorSubject< + NzSelectOptionInterface[] + >([]); + private collectionSubscription?: Subscription; + + constructor( + public deviceService: DeviceService, + public cache: CacheService, + public data: DataService, + public readonly algoliaService: AlgoliaService, + private cd: ChangeDetectorRef, + private nzNotification: NzNotificationService, + private notification: NotificationService, + private nftApi: NftApi, + private route: ActivatedRoute, + private auth: AuthService, + private router: Router, + private fileApi: FileApi, + ) { + this.properties = new FormArray([] as FormGroup[]); + this.stats = new FormArray([] as FormGroup[]); + + this.nftForm = new FormGroup({ + name: this.nameControl, + description: this.descriptionControl, + price: this.priceControl, + availableFrom: this.availableFromControl, + media: this.mediaControl, + collection: this.collectionControl, + properties: this.properties, + stats: this.stats, + }); + } + + public get priceUnits(): Units[] { + return PRICE_UNITS; + } + + public get maxPropertyCount(): number { + return MAX_PROPERTIES_COUNT; + } + + public get maxStatCount(): number { + return MAX_STATS_COUNT; + } + + public ngOnInit(): void { + this.collectionControl.valueChanges.pipe(untilDestroyed(this)).subscribe((o) => { + this.cache.getCollection(o).subscribe((finObj) => { + if (!finObj) { + return; + } + + this.collection = finObj || undefined; + this.priceControl.setValue(finObj.price || 0); + this.availableFromControl.setValue((finObj.availableFrom || finObj.createdOn).toDate()); + + if (finObj.type === CollectionType.GENERATED || finObj.type === CollectionType.SFT) { + this.priceControl.disable(); + this.availableFromControl.disable(); + } else { + this.priceControl.enable(); + this.availableFromControl.enable(); + } + + this.filteredCollections$.next([ + { + label: finObj.name || finObj.uid, + value: finObj.uid, + }, + ]); + + this.cd.markForCheck(); + }); + }); + + this.route.parent?.params.pipe(untilDestroyed(this)).subscribe((p) => { + if (p.collection) { + this.collectionControl.setValue(p.collection); + } + }); + + this.auth.member$?.pipe(untilDestroyed(this)).subscribe(() => { + this.cd.markForCheck(); + }); + + this.uploadFilter = [ + { + name: 'filenameFilter', + fn: (fileList: NzUploadFile[]): NzUploadFile[] | Observable => { + const res: NzUploadFile[] = []; + fileList.forEach((file: NzUploadFile) => { + res.push(file); + if (this.isValidFileName(file.name)) { + this.fileUploadError = null; + } else { + this.fileUploadError = $localize`File name ${file.name} is not valid`; + } + }); + this.cd.markForCheck(); + return res; + }, + }, + ]; + } + + public uploadMediaFile(item: NzUploadXHRArgs): Subscription { + if (!this.auth.member$.value) { + const err = $localize`Member seems to log out during the file upload request.`; + this.nzNotification.error(err, ''); + if (item.onError) { + item.onError(err, item.file); + } + + return of(undefined).subscribe(); + } + return this.fileApi.upload(this.auth.member$.value.uid, item); + } + + public uploadMediaChange(event: NzUploadChangeParam): void { + if (event.type === 'success') { + this.mediaControl.setValue(event.file.response); + this.uploadedFile = event.file; + } else if (event.type === 'removed') { + this.mediaControl.setValue(''); + this.fileUploadError = null; + } + } + + private validateForm(): boolean { + this.nftForm.updateValueAndValidity(); + if (!this.nftForm.valid) { + Object.values(this.nftForm.controls).forEach((control) => { + if (control.invalid) { + control.markAsDirty(); + control.updateValueAndValidity({ onlySelf: true }); + } + }); + + return false; + } + + return !this.fileUploadError; + } + + private getPropertyForm(): FormGroup { + return new FormGroup({ + name: new FormControl(''), + value: new FormControl(''), + }); + } + + public disabledStartDate(startValue: Date): boolean { + // Disable past dates & today + 1day startValue + if (startValue.getTime() < dayjs().subtract(1, 'day').toDate().getTime()) { + return true; + } + + return false; + } + + private range(start: number, end: number): number[] { + const result: number[] = []; + for (let i = start; i < end; i++) { + result.push(i); + } + return result; + } + + public disabledDateTime(startValue: Date | Date[]): DisabledTimeConfig { + if (!Array.isArray(startValue) && dayjs(startValue).isSame(dayjs(), 'day')) { + return { + nzDisabledHours: () => this.range(0, dayjs().hour()), + nzDisabledMinutes: () => this.range(0, dayjs().minute()), + nzDisabledSeconds: () => [], + }; + } else { + return { + nzDisabledHours: () => [], + nzDisabledMinutes: () => [], + nzDisabledSeconds: () => [], + }; + } + } + + public addProperty(): void { + if (this.properties.controls.length < MAX_PROPERTIES_COUNT) { + this.properties.push(this.getPropertyForm()); + } + } + + public removeProperty(index: number): void { + this.properties.removeAt(index); + } + + public getStatForm(): FormGroup { + return new FormGroup({ + name: new FormControl(''), + value: new FormControl(''), + }); + } + + private subscribeCollectionList(search?: string): void { + this.collectionSubscription?.unsubscribe(); + this.collectionSubscription = from( + this.algoliaService.searchClient + .initIndex(COL.COLLECTION) + .search(search || '', { length: 5, offset: 0 }), + ).subscribe((r) => { + this.filteredCollections$.next( + r.hits.map((r) => { + const collection = r as unknown as Collection; + return { + label: collection.name || collection.uid, + value: collection.uid, + }; + }), + ); + }); + } + + public searchCollection(v: string): void { + if (v) { + this.subscribeCollectionList(v); + } + } + + public addStat(): void { + if (this.stats.controls.length < MAX_STATS_COUNT) { + this.stats.push(this.getStatForm()); + } + } + + public removeStat(index: number): void { + this.stats.removeAt(index); + } + + public gForm(f: any, value: string): any { + return f.get(value); + } + + public formatSubmitData(data: any): any { + const stats: any = {}; + data.stats.forEach((v: any) => { + if (v.name) { + const formattedKey: string = v.name.replace(/\s/g, '').toLowerCase(); + stats[formattedKey] = { + label: v.name, + value: v.value, + }; + } + }); + if (Object.keys(stats).length) { + data.stats = stats; + } else { + delete data.stats; + } + + const properties: any = {}; + data.properties.forEach((v: any) => { + if (v.name) { + const formattedKey: string = v.name.replace(/\s/g, '').toLowerCase(); + properties[formattedKey] = { + label: v.name, + value: v.value, + }; + } + }); + if (Object.keys(properties).length) { + data.properties = properties; + } else { + delete data.properties; + } + + data.availableFrom = this.availableFromControl.value; + delete data.unit; + return data; + } + + public async create(): Promise { + if (!this.validateForm()) { + return; + } + + const formSub = this.nftForm.value; + // Price might be disabled and not included. It must be always included + formSub.price = this.nftForm.get('price')?.value; + await this.auth.sign(this.formatSubmitData({ ...formSub }), (sc, finish) => { + this.notification.processRequest(this.nftApi.create(sc), 'Created.', finish).subscribe(() => { + this.router.navigate([ROUTER_UTILS.config.collection.root, this.collectionControl.value]); + }); + }); + } + + public preview(): void { + if (!this.validateForm()) { + return; + } + + this.previewNft = this.formatSubmitData({ ...this.nftForm.value }); + } + + public trackByValue(index: number, item: SelectCollectionOption) { + return item.value; + } + + private isValidFileName(str: string): boolean { + const dotIndex = str.indexOf('.'); + return ( + dotIndex > -1 && + FILENAME_REGEXP.test(str.substring(0, dotIndex)) && + this.allowedFileFormats.split('/').includes(str.substring(dotIndex + 1)) + ); + } + + public ngOnDestroy(): void { + this.collectionSubscription?.unsubscribe(); + } +} diff --git a/src/app/pages/nft/pages/nft/nft.page.html b/src/app/pages/nft/pages/nft/nft.page.html new file mode 100644 index 0000000..5abf6e5 --- /dev/null +++ b/src/app/pages/nft/pages/nft/nft.page.html @@ -0,0 +1,828 @@ + +
    +
    + NFT + + Owned + +

    {{ getTitle(data.nft$ | async) }}

    + +
    + NFT Image + + +
    + + + +
    + + + + +
    +
    +
    Current price
    +
    + +
    + {{(((data.nft$ | async)?.availablePrice || (data.nft$ | async)?.price) | + formatToken: ((data.nft$ | async)?.placeholderNft ? (data.collection$ | + async)?.mintingData?.network : (data.nft$ | async)?.mintingData?.network): true | + async)}} +
    +
    + {{(calc(((data.nft$ | async)?.availablePrice || (data.nft$ | async)?.price), + discount(data.collection$ | async, data.nft$ | async)) | formatToken: ((data.nft$ | + async)?.placeholderNft ? (data.collection$ | async)?.mintingData?.network : + (data.nft$ | async)?.mintingData?.network): true | async)}} +
    +
    + +
    -
    +
    +
    +
    + +
    +
    + + + Current highest bid + Min bid + + Your bid is the highest +
    +
    +
    + {{ ((data.nft$ | async)?.auctionHighestBid || 0 | formatToken: (data.nft$ | + async)?.mintingData?.network | async) || ((data.nft$ | async)?.auctionFloorPrice | + formatToken: (data.nft$ | async)?.mintingData?.network: true | async)}} +
    +
    +
    + + +
    + +
    + +
    + {{(data.collection$ | async)?.availableNfts || 0}} + remaining +
    +
    + + +
    + +
    Sale ended
    +
    + +
    + +
    Sale hasn't started yet
    +
    + +
    + +
    NFT is pending other member's transaction
    +
    +
    + +
    + +
    Collection pending approval
    +
    + +
    + +
    Collection rejected!
    +
    + + + +
    + + + +
    + +
    + + + +
    + +
    + + + + +
    + + Current Bids + + + Past bids + + + My biddings + +
    + + + + + + Member + Bidded on + Amount + Link + + + + + + + + + + @{{ (item.member.name || item.member.uid) | truncate:[16]}} + + {{ item.transaction.createdOn?.toDate() | date:'short' }} + + {{ (item.transaction.payload.amount | formatToken: item.transaction.network | + async) }} + + + Link + + + + + + + +
    + There are no current bids +
    +
    + + + + + + Date + Type + Amount + Link + + + + + + + {{ item.createdOn?.toDate() | date:'short' }} + {{ item.type }} + {{ (item.payload.amount | formatToken: item.network | async) }} + + Link + + + + + + + +
    + There are no past bids +
    +
    + + + + + + Date + Type + Amount + Link + + + + + + + {{ item.createdOn?.toDate() | date:'short' }} + {{ item.type }} + {{ (item.payload.amount | formatToken: item.network | async) }} + + Link + + + + + + + +
    + There are no records. +
    +
    +
    +
    + +
    + +
    + NFT Image + + +
    + + + + + +
    + + +
    + +
    +
    + + + +
    +
    + +
    Network
    +
    +
    + +
    NFT is not yet migrated to the decentralized network.
    + + +
    + + +
    + + + + + +
    + @{{((data.owner$ | async)?.name || (data.owner$ | async)?.uid) }} +
    +
    +
    + + +
    + + +
    +
    Available for specific Member Only
    +
    + + ({{ member.name }}){{ last ? '' : ', ' }} + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + +
    +
    + +
    + + + + + Show + collection + + + + +
    +
    +

    + {{ (data.collection$ | async)?.name || (data.collection$ | async)?.uid }} +

    +
    +
    by
    + + + + +
    + {{ (data.space$ | async)?.name || (data.space$ | async)?.uid }} +
    +
    +
    + +
    +
    + +
    +
    + + + +
    + + No NFTs + +
    +
    + + + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + diff --git a/src/app/pages/nft/pages/nft/nft.page.less b/src/app/pages/nft/pages/nft/nft.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/nft/pages/nft/nft.page.ts b/src/app/pages/nft/pages/nft/nft.page.ts new file mode 100644 index 0000000..63e8eac --- /dev/null +++ b/src/app/pages/nft/pages/nft/nft.page.ts @@ -0,0 +1,717 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { CollectionApi } from '@api/collection.api'; +import { FileApi } from '@api/file.api'; +import { MemberApi } from '@api/member.api'; +import { NftApi, OffersHistory, SuccesfullOrdersWithFullHistory } from '@api/nft.api'; +import { SpaceApi } from '@api/space.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { ConfirmModalType } from '@components/confirm-modal/confirm-modal.component'; +import { TimelineItem, TimelineItemType } from '@components/timeline/timeline.component'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { SeoService } from '@core/services/seo'; +import { ThemeList, ThemeService } from '@core/services/theme'; +import { TransactionService } from '@core/services/transaction'; +import { UnitsService } from '@core/services/units'; +import { StorageItem, getItem } from '@core/utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { copyToClipboard } from '@core/utils/tools.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/nft/services/helper.service'; +import { + Collection, + CollectionType, + DEFAULT_NETWORK, + FILE_SIZES, + IPFS_GATEWAY, + MIN_AMOUNT_TO_TRANSFER, + NETWORK_DETAIL, + Network, + Nft, + Space, + Timestamp, + Transaction, +} from '@soonaverse/interfaces'; +import { ChartConfiguration, ChartType } from 'chart.js'; +import dayjs from 'dayjs'; +import { NzNotificationService } from 'ng-zorro-antd/notification'; +import { BehaviorSubject, Subscription, combineLatest, interval, map, skip, take } from 'rxjs'; +import { filter } from 'rxjs/operators'; +import { DataService } from '../../services/data.service'; + +export enum ListingType { + CURRENT_BIDS = 0, + PAST_BIDS = 1, + MY_BIDS = 2, +} + +@UntilDestroy() +@Component({ + selector: 'wen-nft', + templateUrl: './nft.page.html', + styleUrls: ['./nft.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NFTPage implements OnInit, OnDestroy { + public collectionPath: string = ROUTER_UTILS.config.collection.root; + public isCheckoutOpen = false; + public isBidOpen = false; + public isSaleOpen = false; + public isWithdrawOpen = false; + public isCopied = false; + public ipfsGateway = IPFS_GATEWAY; + public mediaType: 'video' | 'image' | undefined; + public isNftPreviewOpen = false; + public currentListingType = ListingType.MY_BIDS; + public endsOnTicker$: BehaviorSubject = new BehaviorSubject< + Timestamp | undefined + >(undefined); + public lineChartType: ChartType = 'line'; + public lineChartData?: ChartConfiguration['data']; + public lineChartOptions?: ChartConfiguration['options'] = {}; + public systemInfoLabels: string[] = [$localize`IPFS Metadata`, $localize`IPFS Image`]; + public systemInfoValues: { [key: string]: string } = { + preparing: $localize`Available once minted...`, + view: $localize`View`, + }; + private subscriptions$: Subscription[] = []; + private nftSubscriptions$: Subscription[] = []; + private collectionSubscriptions$: Subscription[] = []; + private tranSubscriptions$: Subscription[] = []; + + constructor( + public data: DataService, + public helper: HelperService, + public previewImageService: PreviewImageService, + public deviceService: DeviceService, + public auth: AuthService, + public unitsService: UnitsService, + public transactionService: TransactionService, + private route: ActivatedRoute, + private spaceApi: SpaceApi, + private memberApi: MemberApi, + private nzNotification: NzNotificationService, + private collectionApi: CollectionApi, + private nftApi: NftApi, + private fileApi: FileApi, + private router: Router, + private cache: CacheService, + private cd: ChangeDetectorRef, + private themeService: ThemeService, + private seo: SeoService, + private notification: NotificationService, + ) { + // none + } + + public ngOnInit(): void { + this.deviceService.viewWithSearch$.next(false); + this.route.params?.pipe(untilDestroyed(this)).subscribe((obj) => { + const id: string | undefined = obj?.[ROUTER_UTILS.config.nft.nft.replace(':', '')]; + if (id) { + this.listenToNft(id); + + if (this.cache.openCheckout) { + this.cache.openCheckout = false; + // We open checkout with or auction with delay. + setTimeout(() => { + // You can't self buy. + if ( + this.auth.member$.value?.uid && + this.data.nft$.value?.owner === this.auth.member$.value?.uid + ) { + return; + } + + if ( + this.helper.isAvailableForAuction(this.data.nft$.value, this.data.collection$.value) + ) { + this.bid(); + this.cd.markForCheck(); + } else if ( + this.helper.isAvailableForSale(this.data.nft$.value, this.data.collection$.value) + ) { + this.buy(); + this.cd.markForCheck(); + } + }, 1500); + } + } else { + this.notFound(); + } + }); + + this.data.nft$.pipe(skip(1), untilDestroyed(this)).subscribe((obj: Nft | undefined) => { + if (!obj) { + this.notFound(); + return; + } + + // Get file metadata. + this.fileApi + .getMetadata(obj.media) + .pipe(take(1), untilDestroyed(this)) + .subscribe((o) => { + this.mediaType = o; + this.seo.setTags( + 'NFT - ' + obj.name, + obj.description, + this.mediaType === 'image' ? obj.media : undefined, + ); + + this.cd.markForCheck(); + }); + }); + + let lastNftId: undefined | string = undefined; + let lastOwner: undefined | string = undefined; + this.data.nft$.pipe(skip(1), untilDestroyed(this)).subscribe(async (p) => { + // TODO Only cause refresh if it's different to previous. + if (p && (p.uid !== lastNftId || p.owner !== lastOwner)) { + lastNftId = p.uid; + lastOwner = p.owner; + this.nftSubscriptions$.forEach((s) => { + s.unsubscribe(); + }); + this.nftSubscriptions$.push( + this.spaceApi.listen(p.space).pipe(untilDestroyed(this)).subscribe(this.data.space$), + ); + this.nftSubscriptions$.push( + this.collectionApi + .listen(p.collection) + .pipe(untilDestroyed(this)) + .subscribe(this.data.collection$), + ); + this.nftSubscriptions$.push( + this.nftApi + .successfullOrders(p.uid, p.mintingData?.network) + .pipe(untilDestroyed(this)) + .subscribe(this.data.orders$), + ); + this.nftSubscriptions$.push( + this.nftApi + .successfullOrders(p.uid) + .pipe(untilDestroyed(this)) + .subscribe(this.data.ordersAllNetworks$), + ); + this.nftSubscriptions$.push( + this.nftApi + .positionInCollection(p.collection, undefined) + .pipe(untilDestroyed(this)) + .subscribe(this.data.topNftWithinCollection$), + ); + if (p.createdBy) { + this.nftSubscriptions$.push( + this.memberApi + .listen(p.createdBy) + .pipe(untilDestroyed(this)) + .subscribe(this.data.creator$), + ); + } + if (p.owner) { + this.nftSubscriptions$.push( + this.memberApi.listen(p.owner).pipe(untilDestroyed(this)).subscribe(this.data.owner$), + ); + } else { + this.data.owner$.next(undefined); + } + this.nftSubscriptions$.push( + this.nftApi + .lastCollection(p.collection, undefined) + ?.pipe( + untilDestroyed(this), + map((obj: Nft[]) => { + return obj[0]; + }), + ) + .subscribe(this.data.firstNftInCollection$), + ); + + if (p.saleAccessMembers?.length) { + this.nftSubscriptions$.push( + this.memberApi + .listenMultiple(p.saleAccessMembers) + .pipe(untilDestroyed(this)) + .subscribe(this.data.saleAccessMembers$), + ); + } else { + this.data.saleAccessMembers$.next(undefined); + } + } + + if (this.auth.member$.value && this.data.nft$.value) { + this.data.pastBidTransactionsLoading$.next(true); + this.nftSubscriptions$.push( + this.nftApi + .getMembersBids(this.auth.member$.value, this.data.nft$.value!) + .pipe(untilDestroyed(this)) + .subscribe((value: Transaction[]) => { + this.currentListingType = ListingType.PAST_BIDS; + this.data.pastBidTransactions$.next(value); + this.data.pastBidTransactionsLoading$.next(false); + }), + ); + } + + // Sync ticker. + this.endsOnTicker$.next(p?.auctionFrom || undefined); + }); + + this.data.collection$.pipe(skip(1), untilDestroyed(this)).subscribe(async (p) => { + if (p) { + this.collectionSubscriptions$.forEach((s) => { + s.unsubscribe(); + }); + if (p.royaltiesSpace) { + this.collectionSubscriptions$.push( + this.spaceApi + .listen(p.royaltiesSpace) + .pipe(untilDestroyed(this)) + .subscribe(this.data.royaltySpace$), + ); + } + if (p.createdBy) { + this.collectionSubscriptions$.push( + this.memberApi + .listen(p.createdBy) + .pipe(untilDestroyed(this)) + .subscribe(this.data.collectionCreator$), + ); + } + + this.refreshBids(); + } + }); + + combineLatest([this.data.orders$, this.themeService.theme$]) + .pipe( + filter(([obj, theme]) => !!obj && !!theme), + untilDestroyed(this), + ) + .subscribe(([obj, theme]) => { + const arr: any = []; + obj?.forEach((obj) => { + arr.push([obj.order.createdOn?.toDate(), obj.order.payload.amount]); + }); + + switch (theme) { + case ThemeList.Light: + this.setLineChartOptions('#959388', '#fff', '#333'); + this.initChart(arr, { + backgroundColor: '#FCFBF9', + borderColor: '#F39200', + pointBackgroundColor: '#F39200', + pointBorderColor: '#fff', + pointHoverBackgroundColor: '#333', + pointHoverBorderColor: '#fff', + }); + break; + case ThemeList.Dark: + this.setLineChartOptions('#6A6962', '#333', '#fff'); + this.initChart(arr, { + backgroundColor: '#232323', + borderColor: '#F39200', + pointBackgroundColor: '#F39200', + pointBorderColor: '#fff', + pointHoverBackgroundColor: '#333', + pointHoverBorderColor: '#fff', + }); + break; + } + }); + + interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + try { + this.endsOnTicker$.next(this.endsOnTicker$.value); + if ( + this.data.nft$.value && + ((this.data.nft$.value.availableFrom && + dayjs(this.data.nft$.value.availableFrom.toDate()).diff(dayjs(), 's') === 0) || + (this.data.nft$.value.auctionFrom && + dayjs(this.data.nft$.value.auctionFrom.toDate()).diff(dayjs(), 's') === 0)) + ) { + // Delay slightly. + this.cd.markForCheck(); + } + + // Make sure we refresh bids once auction is in progress. + if (this.tranSubscriptions$.length === 0) { + this.refreshBids(); + } + } catch (err) { + this.notFound(); + } + }); + } + + private refreshBids(): void { + if (this.helper.auctionInProgress(this.data.nft$.value, this.data.collection$.value)) { + this.currentListingType = ListingType.CURRENT_BIDS; + this.cd.markForCheck(); + + this.tranSubscriptions$.forEach((s) => { + s.unsubscribe(); + }); + this.tranSubscriptions$ = []; + // Resubscribe. + + if (this.data.nft$.value) { + this.data.allBidTransactionsLoading$.next(true); + this.tranSubscriptions$.push( + this.nftApi + .getOffers(this.data.nft$.value!) + .pipe(untilDestroyed(this)) + .subscribe((value: OffersHistory[]) => { + this.data.allBidTransactions$.next(value); + this.data.allBidTransactionsLoading$.next(false); + }), + ); + + if (this.auth.member$.value) { + this.data.myBidTransactionsLoading$.next(true); + this.tranSubscriptions$.push( + this.nftApi + .getMembersBids(this.auth.member$.value, this.data.nft$.value!, true) + .pipe(untilDestroyed(this)) + .subscribe((value: Transaction[]) => { + this.data.myBidTransactions$.next(value); + this.data.myBidTransactionsLoading$.next(false); + }), + ); + } + } + } + } + + private listenToNft(id: string): void { + this.cancelSubscriptions(); + this.data.nftId = id; + this.subscriptions$.push( + this.nftApi.listen(id).pipe(untilDestroyed(this)).subscribe(this.data.nft$), + ); + } + + public canSetItForSale(nft?: Nft | null): boolean { + return !!nft?.owner && nft?.owner === this.auth.member$.value?.uid; + } + + public discount(collection?: Collection | null, nft?: Nft | null): number { + if (!collection?.space || !this.auth.member$.value || nft?.owner) { + return 1; + } + + const spaceRewards = (this.auth.member$.value.spaces || {})[collection.space]; + const descDiscounts = [...(collection.discounts || [])].sort((a, b) => b.amount - a.amount); + for (const discount of descDiscounts) { + const awardStat = (spaceRewards?.awardStat || {})[discount.tokenUid]; + const memberTotalReward = awardStat?.totalReward || 0; + if (memberTotalReward >= discount.tokenReward) { + return 1 - discount.amount; + } + } + return 1; + } + + public calc(amount: number | null | undefined, discount: number): number { + let finalPrice = Math.ceil((amount || 0) * discount); + if (finalPrice < MIN_AMOUNT_TO_TRANSFER) { + finalPrice = MIN_AMOUNT_TO_TRANSFER; + } + + return finalPrice; + } + + public bid(event?: MouseEvent): void { + if (event) { + event.stopPropagation(); + event.preventDefault(); + } + if (getItem(StorageItem.CheckoutTransaction)) { + this.nzNotification.error('You currently have open order. Pay for it or let it expire.', ''); + return; + } + this.isBidOpen = true; + } + + public buy(event?: MouseEvent): void { + if (event) { + event.stopPropagation(); + event.preventDefault(); + } + if (getItem(StorageItem.CheckoutTransaction)) { + this.nzNotification.error('You currently have open order. Pay for it or let it expire.', ''); + return; + } + this.isCheckoutOpen = true; + } + + public get networkTypes(): typeof Network { + return Network; + } + + public get confirmModalTypes(): typeof ConfirmModalType { + return ConfirmModalType; + } + + public sell(event: MouseEvent): void { + event.stopPropagation(); + event.preventDefault(); + this.isSaleOpen = true; + } + + public copy(): void { + if (!this.isCopied) { + copyToClipboard(window?.location.href); + this.isCopied = true; + setTimeout(() => { + this.isCopied = false; + this.cd.markForCheck(); + }, 3000); + } + } + + public isLoading(arr: Nft[] | null | undefined): boolean { + return arr === undefined; + } + + public isEmpty(arr: Nft[] | null | undefined): boolean { + return Array.isArray(arr) && arr.length === 0; + } + + private notFound(): void { + this.router.navigate([ROUTER_UTILS.config.nft.root, ROUTER_UTILS.config.nft.notFound]); + } + + public trackByUid(_i: number, item: Nft) { + return item.uid; + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + public get listingTypes(): typeof ListingType { + return ListingType; + } + + public getTitle(nft?: Nft | null): any { + if (!nft) { + return ''; + } + + if (!nft.owner) { + if (nft.type === CollectionType.CLASSIC) { + return nft.name; + } else if (nft.type === CollectionType.GENERATED) { + return 'Generated NFT'; + } else if (nft.type === CollectionType.SFT) { + return 'SFT'; + } + } else { + return nft.name; + } + } + + public generatedNft(nft?: Nft | null): boolean { + if (!nft) { + return false; + } + + return !nft.owner && (nft.type === CollectionType.GENERATED || nft.type === CollectionType.SFT); + } + + private setLineChartOptions( + axisColor: string, + tooltipColor: string, + tooltipBackgroundColor: string, + ): void { + this.lineChartOptions = { + elements: { + line: { + tension: 0, + }, + }, + scales: { + xAxis: { + ticks: { + maxTicksLimit: 10, + color: axisColor, + font: { + size: 14, + weight: '600', + family: 'Poppins', + lineHeight: '14px', + }, + }, + }, + yAxis: { + min: 0, + ticks: { + maxTicksLimit: 10, + color: axisColor, + font: { + size: 14, + weight: '600', + family: 'Poppins', + lineHeight: '14px', + }, + }, + }, + }, + plugins: { + legend: { + display: false, + }, + tooltip: { + xAlign: 'center', + yAlign: 'bottom', + backgroundColor: tooltipBackgroundColor, + titleColor: 'rgba(0,0,0,0)', + titleSpacing: 0, + titleMarginBottom: 0, + titleFont: { + lineHeight: 0, + }, + bodyColor: tooltipColor, + bodyFont: { + weight: '500', + family: 'Poppins', + size: 16, + lineHeight: '28px', + }, + bodyAlign: 'center', + bodySpacing: 0, + borderColor: 'rgba(0, 0, 0, 0.2)', + borderWidth: 1, + footerMarginTop: 0, + caretPadding: 16, + caretSize: 2, + displayColors: false, + }, + }, + }; + this.cd.markForCheck(); + } + + private initChart(data: any[][], colorOptions: object): void { + const dataToShow: { data: number[]; labels: string[] } = { + data: [], + labels: [], + }; + + if (data?.length) { + const sortedData = data.sort((a, b) => a[0] - b[0]); + for (let i = 0; i < sortedData.length; i++) { + dataToShow.data.push( + sortedData[i][1] / + NETWORK_DETAIL[this.data.nft$.value?.mintingData?.network || DEFAULT_NETWORK].divideBy, + ); + dataToShow.labels.push(dayjs(sortedData[i][0]).format('MMM D')); + } + } + + this.lineChartData = { + datasets: [ + { + data: dataToShow.data, + fill: 'origin', + ...colorOptions, + }, + ], + labels: dataToShow.labels, + }; + this.cd.markForCheck(); + } + + public getTimelineItems( + nft?: Nft | null, + space?: Space | null, + orders?: SuccesfullOrdersWithFullHistory[] | null, + ): TimelineItem[] { + const res: TimelineItem[] = + orders?.map((order) => ({ + type: TimelineItemType.ORDER, + payload: { + image: order.newMember.avatar, + date: order.order.createdOn?.toDate(), + name: order.newMember.name || order.newMember.uid, + amount: order.order.payload.amount, + transactions: order.transactions, + network: order.order.network, + }, + })) || []; + + if (nft?.owner && (nft?.availableFrom || nft?.auctionFrom)) { + res.unshift({ + type: TimelineItemType.LISTED_BY_MEMBER, + payload: { + image: this.data.owner$.value?.avatar, + date: (nft?.availableFrom || nft?.auctionFrom)?.toDate(), + isAuction: !!(!nft?.availableFrom && nft?.auctionFrom), + name: this.data.owner$.value?.name || this.data.owner$.value?.uid || '', + network: nft?.mintingData?.network, + }, + }); + } + + if (space) { + res.push({ + type: TimelineItemType.LISTED_BY_SPACE, + payload: { + image: space.avatarUrl, + date: nft?.createdOn?.toDate(), + name: space.name || space.uid || '', + network: nft?.mintingData?.network, + }, + }); + } + + return res || []; + } + + public async onWithdraw(value: boolean): Promise { + this.isWithdrawOpen = false; + this.cd.markForCheck(); + + if (!value || !this.data.nft$.value?.uid) { + return; + } + + await this.auth.sign({ nft: this.data.nft$.value?.uid }, (sc, finish) => { + this.notification + .processRequest(this.nftApi.withdrawNft(sc), $localize`NFT Withdrawn.`, finish) + .subscribe(() => { + // None. + }); + }); + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + + this.data.reset(); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + this.nftSubscriptions$.forEach((s) => { + s.unsubscribe(); + }); + this.collectionSubscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } +} diff --git a/src/app/pages/nft/pages/not-found/not-found.page.html b/src/app/pages/nft/pages/not-found/not-found.page.html new file mode 100644 index 0000000..e5da89c --- /dev/null +++ b/src/app/pages/nft/pages/not-found/not-found.page.html @@ -0,0 +1,26 @@ +
    +
    + +
    Oops, it's in another universe
    +
    + NFT you are looking for no longer exists on Soonaverse. +
    + +
    +
    diff --git a/src/app/pages/nft/pages/not-found/not-found.page.less b/src/app/pages/nft/pages/not-found/not-found.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/nft/pages/not-found/not-found.page.ts b/src/app/pages/nft/pages/not-found/not-found.page.ts new file mode 100644 index 0000000..5c24485 --- /dev/null +++ b/src/app/pages/nft/pages/not-found/not-found.page.ts @@ -0,0 +1,14 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; + +@Component({ + selector: 'wen-not-found', + templateUrl: './not-found.page.html', + styleUrls: ['./not-found.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NotFoundPage { + public get marketplaceRoute() { + return ['/', ROUTER_UTILS.config.market.root]; + } +} diff --git a/src/app/pages/nft/services/data.service.ts b/src/app/pages/nft/services/data.service.ts new file mode 100644 index 0000000..4f49c76 --- /dev/null +++ b/src/app/pages/nft/services/data.service.ts @@ -0,0 +1,92 @@ +import { Injectable } from '@angular/core'; +import { OffersHistory, SuccesfullOrdersWithFullHistory } from '@api/nft.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { SelectCollectionOption } from '@components/collection/components/select-collection/select-collection.component'; +import { Collection, Member, Nft, Space, Transaction } from '@soonaverse/interfaces'; +import { BehaviorSubject } from 'rxjs'; + +@Injectable({ + providedIn: 'any', +}) +export class DataService { + public nftId?: string; + public nft$: BehaviorSubject = new BehaviorSubject(undefined); + public collection$: BehaviorSubject = new BehaviorSubject< + Collection | undefined + >(undefined); + public topNftWithinCollection$: BehaviorSubject = new BehaviorSubject< + Nft[] | undefined + >(undefined); + public firstNftInCollection$: BehaviorSubject = new BehaviorSubject< + Nft | undefined + >(undefined); + public orders$: BehaviorSubject = + new BehaviorSubject(undefined); + public ordersAllNetworks$: BehaviorSubject = + new BehaviorSubject(undefined); + public space$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public royaltySpace$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public creator$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public owner$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public collectionCreator$: BehaviorSubject = new BehaviorSubject< + Member | undefined + >(undefined); + public pastBidTransactions$: BehaviorSubject = new BehaviorSubject( + [], + ); + public pastBidTransactionsLoading$: BehaviorSubject = new BehaviorSubject( + false, + ); + public myBidTransactions$: BehaviorSubject = new BehaviorSubject( + [], + ); + public myBidTransactionsLoading$: BehaviorSubject = new BehaviorSubject(false); + public allBidTransactions$: BehaviorSubject = new BehaviorSubject< + OffersHistory[] + >([]); + public allBidTransactionsLoading$: BehaviorSubject = new BehaviorSubject(false); + public saleAccessMembers$: BehaviorSubject = new BehaviorSubject< + Member[] | undefined + >(undefined); + + public constructor(private auth: AuthService) { + // none. + } + + public reset(): void { + this.nftId = undefined; + // this.nft$.next(undefined); + // this.collection$.next(undefined); + // this.topNftWithinCollection$.next(undefined); + // this.firstNftInCollection$.next(undefined); + // this.orders$.next(undefined); + // this.space$.next(undefined); + // this.royaltySpace$.next(undefined); + // this.creator$.next(undefined); + // this.owner$.next(undefined); + // this.collectionCreator$.next(undefined); + } + + public getCollectionListOptions(list?: Collection[] | null): SelectCollectionOption[] { + return (list || []) + .filter((o) => { + if (!this.auth.member$.value) { + return false; + } + + return o.rejected !== true && o.createdBy === this.auth.member$.value.uid; + }) + .map((o) => ({ + label: o.name || o.uid, + value: o.uid, + })); + } +} diff --git a/src/app/pages/nft/services/helper.service.ts b/src/app/pages/nft/services/helper.service.ts new file mode 100644 index 0000000..46d446b --- /dev/null +++ b/src/app/pages/nft/services/helper.service.ts @@ -0,0 +1,274 @@ +import { Injectable } from '@angular/core'; +import { SuccesfullOrdersWithFullHistory } from '@api/nft.api'; +import { + DescriptionItem, + DescriptionItemType, +} from '@components/description/description.component'; +import { getItem, StorageItem } from '@core/utils'; +import { + Collection, + CollectionStatus, + Network, + Nft, + NftStatus, + PropStats, + Timestamp, + Transaction, + TransactionBillPayment, + TransactionType, + TRANSACTION_AUTO_EXPIRY_MS, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import * as isSameOrBefore from 'dayjs/plugin/isSameOrBefore'; + +dayjs.extend(isSameOrBefore); + +@Injectable({ + providedIn: 'root', +}) +export class HelperService { + public getPropStats(obj: PropStats | undefined = {}): DescriptionItem[] { + if (!obj) { + return []; + } + + const final: any[] = []; + for (const v of Object.values(obj).sort(function (a: any, b: any) { + if (a.label < b.label) { + return -1; + } + if (a.label > b.label) { + return 1; + } + return 0; + })) { + final.push({ title: v.label, type: DescriptionItemType.DEFAULT_NO_TRUNCATE, value: v.value }); + } + + return final; + } + + public auctionInProgress(nft?: Nft | null, col?: Collection | null): boolean { + if (!col) { + return false; + } + + return ( + col.approved === true && + !!nft?.auctionFrom && + !!nft?.auctionTo && + dayjs(nft.auctionFrom.toDate()).isSameOrBefore(dayjs(), 's') && + dayjs(nft.auctionTo.toDate()).isAfter(dayjs(), 's') + ); + } + + public getAuctionEnd(nft?: Nft | null): dayjs.Dayjs | undefined { + if (!nft?.auctionTo) { + return; + } + + return dayjs(nft.auctionTo.toDate()); + } + + public getActionStart(nft?: Nft | null): dayjs.Dayjs | undefined { + if (!nft?.auctionFrom) { + return; + } + + return dayjs(nft.auctionFrom.toDate()); + } + + public isMinted(nft?: Nft | null, col?: Collection | null): boolean { + if (nft?.placeholderNft) { + return col?.status === CollectionStatus.MINTED; + } else { + return nft?.status === NftStatus.MINTED; + } + } + + public isCollectionBeingMinted(col?: Collection | null): boolean { + return col?.status === CollectionStatus.MINTING; + } + + public getSaleStart(nft?: Nft | null): dayjs.Dayjs | undefined { + if (!nft?.availableFrom) { + return; + } + + return dayjs(nft.availableFrom.toDate()); + } + + public getCountdownDate(nft?: Nft | null): dayjs.Dayjs | undefined { + if (this.isDateInFuture(nft?.availableFrom)) { + return this.getSaleStart(nft); + } + if (this.isDateInFuture(nft?.auctionFrom)) { + return this.getActionStart(nft); + } + if (this.isDateInFuture(nft?.auctionTo)) { + return this.getAuctionEnd(nft); + } + return undefined; + } + + public isDateInFuture(date?: Timestamp | null): boolean { + if (!this.getDate(date)) { + return false; + } + + return dayjs(this.getDate(date)).isAfter(dayjs(), 's'); + } + + public getDaysLeft(availableFrom?: Timestamp | null): number { + if (!this.getDate(availableFrom)) return 0; + return dayjs(this.getDate(availableFrom)).diff(dayjs(new Date()), 'day'); + } + + public getDate(date: any): any { + if (typeof date === 'object' && date?.toDate) { + const d = date.toDate(); + if (!(d instanceof Date) || isNaN(d.valueOf())) { + return undefined; + } + + return d; + } else { + return date || undefined; + } + } + + public getCountdownTitle(nft?: Nft | null): string { + if (this.isDateInFuture(nft?.availableFrom)) { + return $localize`Sale Starts`; + } + if (this.isDateInFuture(nft?.auctionFrom)) { + return $localize`Auction Starts`; + } + if (this.isDateInFuture(nft?.auctionTo)) { + return $localize`Auction Ends`; + } + return ''; + } + + public getShareUrl(nft?: Nft | null): string { + return nft?.wenUrl || window?.location.href; + } + + public isLocked(nft?: Nft | null, col?: Collection | null, exceptMember = false): boolean { + if (!col) { + return false; + } + + return ( + col.approved === true && + ((nft?.locked === true && !exceptMember) || + (exceptMember && + nft?.locked === true && + nft?.lockedBy !== getItem(StorageItem.CheckoutTransaction))) + ); + } + + public isAvailableForSale(nft?: Nft | null, col?: Collection | null): boolean { + if (!col || !nft?.availableFrom || col?.status === CollectionStatus.MINTING) { + return false; + } + + return ( + col.approved === true && + !!this.getDate(nft.availableFrom) && + dayjs(this.getDate(nft.availableFrom)).isSameOrBefore(dayjs(), 's') + ); + } + + public canBeSetForSale(nft?: Nft | null): boolean { + if (nft?.auctionFrom || nft?.availableFrom) { + return false; + } + + return !!nft?.owner; + } + + public isAvailableForAuction(nft?: Nft | null, col?: Collection | null): boolean { + if (!col || !nft?.auctionFrom || col?.status === CollectionStatus.MINTING) { + return false; + } + + return ( + col.approved === true && + !!this.getDate(nft.auctionFrom) && + dayjs(this.getDate(nft!.auctionFrom)).isSameOrBefore(dayjs(), 's') + ); + } + + public willBeAvailableForAuction(nft?: Nft | null, col?: Collection | null): boolean { + if (!col || col?.status === CollectionStatus.MINTING) { + return false; + } + + return ( + col.approved === true && + !!nft?.auctionFrom && + dayjs(this.getDate(nft.auctionFrom)).isAfter(dayjs(), 's') + ); + } + + public saleNotStartedYet(nft?: Nft | null): boolean { + if (!this.getDate(nft?.availableFrom)) { + return false; + } + + return dayjs(this.getDate(nft!.availableFrom)).isAfter(dayjs(), 's'); + } + + public getLatestBill( + orders?: SuccesfullOrdersWithFullHistory[] | null, + ): TransactionBillPayment | undefined { + if (!orders) { + return undefined; + } + + // Get all non royalty bills. + let lastestBill: TransactionBillPayment | undefined = undefined; + for (const h of orders) { + for (const l of h.transactions || []) { + if ( + l.type === TransactionType.BILL_PAYMENT && + l.payload.royalty === false && + l.payload.reconciled === true && + (!lastestBill || + dayjs(this.getDate(lastestBill.createdOn)).isBefore(this.getDate(l.createdOn))) + ) { + lastestBill = l; + } + } + } + + return lastestBill; + } + + public isExpired(val?: Transaction | null): boolean { + if (!val?.createdOn) { + return false; + } + + const expiresOn: dayjs.Dayjs = dayjs(val.createdOn.toDate()).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + return expiresOn.isBefore(dayjs()) && val.type === TransactionType.ORDER; + } + + public getExplorerUrl(rec?: Nft | Collection | null): string { + if (rec?.mintingData?.network === Network.RMS) { + return 'https://explorer.shimmer.network/testnet/block/' + rec.mintingData.blockId; + } else if (rec?.mintingData?.network === Network.IOTA) { + return 'https://thetangle.org/search/' + rec.mintingData.blockId; + } else if (rec?.mintingData?.network === Network.SMR) { + return 'https://explorer.shimmer.network/shimmer/block/' + rec.mintingData.blockId; + } else if (rec?.mintingData?.network === Network.ATOI) { + return 'https://explorer.iota.org/devnet/search/' + rec.mintingData.blockId; + } else { + return ''; + } + } +} diff --git a/src/app/pages/pool/pages/market/pool.page.html b/src/app/pages/pool/pages/market/pool.page.html new file mode 100644 index 0000000..18959e1 --- /dev/null +++ b/src/app/pages/pool/pages/market/pool.page.html @@ -0,0 +1,84 @@ + +

    + Pool +

    by
    +
    + BEE logo +
    + +
    +
    +
    +
    +
    +

    + What is Pool? +

    +

    + Anyone can become a liquidity provider (LP) by depositing an equivalent value of each + underlying token in return for pool tokens. These tokens track pro-rata LP shares of + the total reserves, and can be redeemed for the underlying assets at any time. +

    +
    +
    + + +
    + +
    +
    +

    What is iotabee?

    +

    + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a + semi-centralized crosschain SWAP that people can use to create liquidity and trade + tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. +

    + +

    + To understand iotabee continue to: + + iotabee.com + +

    +
    +
    + +
    +
    +
    +
    +
    diff --git a/src/app/pages/pool/pages/market/pool.page.less b/src/app/pages/pool/pages/market/pool.page.less new file mode 100644 index 0000000..ac97922 --- /dev/null +++ b/src/app/pages/pool/pages/market/pool.page.less @@ -0,0 +1,24 @@ +.image-container { + position: relative; +} + +.image-container .overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + justify-content: center; + align-items: center; + display: flex; + flex-direction: column; + + &.color { + background: #f6a13a; + opacity: 83%; + } + + a { + background-color: white; + } +} diff --git a/src/app/pages/pool/pages/market/pool.page.ts b/src/app/pages/pool/pages/market/pool.page.ts new file mode 100644 index 0000000..c8cbc21 --- /dev/null +++ b/src/app/pages/pool/pages/market/pool.page.ts @@ -0,0 +1,25 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { ThemeList, ThemeService } from '@core/services/theme'; +import { UntilDestroy } from '@ngneat/until-destroy'; + +@UntilDestroy() +@Component({ + selector: 'wen-pool', + templateUrl: './pool.page.html', + styleUrls: ['./pool.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PoolPage implements OnInit { + public theme = ThemeList; + + constructor(public themeService: ThemeService, public deviceService: DeviceService) {} + + public ngOnInit(): void { + this.deviceService.viewWithSearch$.next(false); + } + + public onClickChangeTheme(theme: ThemeList): void { + this.themeService.setTheme(theme); + } +} diff --git a/src/app/pages/pool/pool-routing.module.ts b/src/app/pages/pool/pool-routing.module.ts new file mode 100644 index 0000000..7b22a3b --- /dev/null +++ b/src/app/pages/pool/pool-routing.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { PoolPage } from './pages/market/pool.page'; + +const routes: Routes = [ + { + path: '', + component: PoolPage, + pathMatch: 'full', + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class PoolRoutingModule {} diff --git a/src/app/pages/pool/pool.module.ts b/src/app/pages/pool/pool.module.ts new file mode 100644 index 0000000..f2129d3 --- /dev/null +++ b/src/app/pages/pool/pool.module.ts @@ -0,0 +1,22 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { LayoutModule } from '@shell/ui/layout/layout.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { PoolPage } from './pages/market/pool.page'; +import { PoolRoutingModule } from './pool-routing.module'; + +@NgModule({ + declarations: [PoolPage], + imports: [ + CommonModule, + PoolRoutingModule, + NzCardModule, + RouterModule, + LayoutModule, + NzButtonModule, + ], + providers: [], +}) +export class PoolModule {} diff --git a/src/app/pages/proposal/pages/new/new.page.html b/src/app/pages/proposal/pages/new/new.page.html new file mode 100644 index 0000000..56fb2b7 --- /dev/null +++ b/src/app/pages/proposal/pages/new/new.page.html @@ -0,0 +1,345 @@ + +

    New Proposal

    + +
    +
    +
    + + + + + Title + + + + +
    + + Start + + + + + + + End + + + + +
    + + Description + + + + +
    + + + + + + Title + + + + + + + Description + + + + + + + + + + + + +
    + + Title + + + + + + Description + + + + +
    +
    + +
    +
    + +
    + + + + + + + + + + {{s.name || s.uid}} + + + +
    + + Select a space +
    +
    + +
    + + {{ s.nzLabel }} +
    +
    +
    +
    +
    + + + + + + Target Participants +
    + + All Guardians + + All Members + + Space's Native Token +  ({{(token$ | async)?.symbol | uppercase}}) + + + +
    +
    +
    +
    +
    +
    + + + + +
    diff --git a/src/app/pages/proposal/pages/new/new.page.less b/src/app/pages/proposal/pages/new/new.page.less new file mode 100644 index 0000000..3bd89b7 --- /dev/null +++ b/src/app/pages/proposal/pages/new/new.page.less @@ -0,0 +1,7 @@ +.wen-radio-group { + display: grid; + input { + width: 100px; + margin-left: 10px; + } +} diff --git a/src/app/pages/proposal/pages/new/new.page.ts b/src/app/pages/proposal/pages/new/new.page.ts new file mode 100644 index 0000000..3dadbfc --- /dev/null +++ b/src/app/pages/proposal/pages/new/new.page.ts @@ -0,0 +1,332 @@ +import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewChild } from '@angular/core'; +import { AbstractControl, FormArray, FormControl, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { SpaceApi } from '@api/space.api'; +import { TokenApi } from '@api/token.api'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { SeoService } from '@core/services/seo'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { Award, ProposalStartDateMin, ProposalType, Space, Token } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { NzDatePickerComponent } from 'ng-zorro-antd/date-picker'; +import { NzNotificationService } from 'ng-zorro-antd/notification'; +import { NzSelectOptionInterface } from 'ng-zorro-antd/select'; +import { BehaviorSubject, filter, firstValueFrom, map, Subscription, switchMap } from 'rxjs'; +import { MemberApi } from './../../../../@api/member.api'; +import { ProposalApi } from './../../../../@api/proposal.api'; +import { NavigationService } from './../../../../@core/services/navigation/navigation.service'; +import { NotificationService } from './../../../../@core/services/notification/notification.service'; + +enum TargetGroup { + NATIVE = ProposalType.NATIVE, + MEMBERS = ProposalType.MEMBERS, + GUARDIANS = -1, +} + +@UntilDestroy() +@Component({ + selector: 'wen-new', + templateUrl: './new.page.html', + styleUrls: ['./new.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NewPage implements OnInit, OnDestroy { + public spaceControl: FormControl = new FormControl('', Validators.required); + public nameControl: FormControl = new FormControl('', Validators.required); + public selectedGroupControl: FormControl = new FormControl( + TargetGroup.GUARDIANS, + Validators.required, + ); + public startControl: FormControl = new FormControl('', Validators.required); + public endControl: FormControl = new FormControl('', Validators.required); + public typeControl: FormControl = new FormControl(ProposalType.NATIVE, Validators.required); + public votingAwardControl: FormControl = new FormControl([]); + public additionalInfoControl: FormControl = new FormControl('', Validators.required); + // Questions / answers. + public questions: FormArray; + public proposalForm: FormGroup; + @ViewChild('endDatePicker') public endDatePicker!: NzDatePickerComponent; + public spaces$: BehaviorSubject = new BehaviorSubject([]); + private subscriptions$: Subscription[] = []; + private subscriptionsAwards$?: Subscription; + private answersIndex = 0; + public filteredAwards$: BehaviorSubject = new BehaviorSubject< + NzSelectOptionInterface[] + >([]); + public token$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + + constructor( + private auth: AuthService, + private proposalApi: ProposalApi, + private notification: NotificationService, + private memberApi: MemberApi, + private route: ActivatedRoute, + private router: Router, + private nzNotification: NzNotificationService, + private seo: SeoService, + private spaceApi: SpaceApi, + private tokenApi: TokenApi, + public nav: NavigationService, + public readonly algoliaService: AlgoliaService, + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + ) { + this.questions = new FormArray([this.getQuestionForm()]); + + this.proposalForm = new FormGroup({ + space: this.spaceControl, + type: this.typeControl, + name: this.nameControl, + group: this.selectedGroupControl, + start: this.startControl, + end: this.endControl, + additionalInfo: this.additionalInfoControl, + questions: this.questions, + }); + } + + public ngOnInit(): void { + if ( + this.nav.getLastUrl() && + this.nav.getLastUrl()[1] === ROUTER_UTILS.config.space.root && + this.nav.getLastUrl()[2] + ) { + this.spaceControl.setValue(this.nav.getLastUrl()[2]); + } + + this.spaceControl.valueChanges.subscribe(async (s) => { + if (s) { + const token = await firstValueFrom( + this.tokenApi + .space(s) + .pipe(map((tokens: Token[] | undefined) => (tokens || [])?.[0] || null)), + ); + + if (token) { + this.token$.next(token); + } else { + this.token$.next(undefined); + } + } else { + this.token$.next(undefined); + } + }); + + this.seo.setTags( + $localize`Proposal - New`, + $localize`Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today.`, + ); + + this.route.params + ?.pipe( + filter((p) => p.space), + switchMap((p) => this.spaceApi.listen(p.space)), + filter((space) => !!space), + untilDestroyed(this), + ) + .subscribe((space) => { + this.spaceControl.setValue(space?.uid); + + this.seo.setTags( + $localize`Proposal - New`, + $localize`Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today.`, + space?.bannerUrl, + ); + }); + + this.auth.member$?.pipe(untilDestroyed(this)).subscribe((o) => { + if (o?.uid) { + this.subscriptions$.push(this.memberApi.allSpacesAsMember(o.uid).subscribe(this.spaces$)); + } + }); + + this.selectedGroupControl.valueChanges.pipe(untilDestroyed(this)).subscribe((val) => { + if (val !== ProposalType.NATIVE) { + this.typeControl.setValue(ProposalType.MEMBERS); + } + }); + } + + private getAnswerForm(): FormGroup { + this.answersIndex++; + return new FormGroup({ + value: new FormControl(this.answersIndex, [ + Validators.min(0), + Validators.max(255), + Validators.required, + ]), + text: new FormControl('', Validators.required), + additionalInfo: new FormControl(''), + }); + } + + public trackByUid(index: number, item: Award | Space) { + return item.uid; + } + + private getQuestionForm(): FormGroup { + return new FormGroup({ + text: new FormControl('', Validators.required), + additionalInfo: new FormControl(''), + answers: new FormArray([this.getAnswerForm(), this.getAnswerForm()]), + }); + } + + public get targetGroups(): typeof TargetGroup { + return TargetGroup; + } + + public gForm(f: any, value: string): any { + return f.get(value); + } + + public getAnswers(question: any): any { + return question.controls.answers.controls; + } + + public addAnswer(f: any): void { + f.controls.answers.push(this.getAnswerForm()); + } + + public removeAnswer(f: any, answerIndex: number): void { + if (f.controls.answers.length > 2) { + this.answersIndex--; + f.controls.answers.removeAt(answerIndex); + } + } + + public addQuestion(): void { + this.questions.push(this.getQuestionForm()); + } + + public removeQuestion(questionIndex: number): void { + if (this.questions.controls.length > 1) { + this.questions.removeAt(questionIndex); + } + } + + public disabledStartDate(startValue: Date): boolean { + // Disable past dates & today + 1day startValue + if (startValue.getTime() < Date.now() - 60 * 60 * 1000 * 24) { + return true; + } + + if (!startValue || !this.endControl.value) { + return false; + } + + return startValue.getTime() > this.endControl.value.getTime(); + } + + public disabledEndDate(endValue: Date): boolean { + if (endValue.getTime() < Date.now() - 60 * 60 * 1000 * 24) { + return true; + } + + if (!endValue || !this.startControl.value) { + return false; + } + return endValue.getTime() <= this.startControl.value.getTime(); + } + + public handleStartOpenChange(open: boolean): void { + if (!open) { + this.endDatePicker.open(); + } + } + + private formatSubmitObj(obj: any) { + obj.settings = { + startDate: obj.start, + endDate: obj.end, + onlyGuardians: !!(obj.group === TargetGroup.GUARDIANS), + }; + + delete obj.start; + delete obj.end; + delete obj.group; + return obj; + } + + private validateControls(controls: { [key: string]: AbstractControl }): void { + Object.values(controls).forEach((control) => { + if (control.invalid) { + control.markAsDirty(); + control.updateValueAndValidity({ onlySelf: true }); + } + }); + } + + private validateForm(): boolean { + this.proposalForm.updateValueAndValidity(); + if (!this.proposalForm.valid) { + this.validateControls(this.proposalForm.controls); + return false; + } + + return true; + } + + public get isProd(): boolean { + return environment.production; + } + + public async create(): Promise { + if (!this.validateForm()) { + return; + } + + if (dayjs(this.startControl.value).isBefore(dayjs().add(ProposalStartDateMin.value, 'ms'))) { + this.nzNotification.error( + '', + 'Start Date must be ' + ProposalStartDateMin.value / 60 / 1000 + ' minutes in future.', + ); + return; + } + + await this.auth.sign(this.formatSubmitObj(this.proposalForm.value), (sc, finish) => { + this.notification + .processRequest(this.proposalApi.create(sc), 'Created.', finish) + .subscribe((val: any) => { + this.router.navigate([ROUTER_UTILS.config.proposal.root, val?.uid]); + }); + }); + } + + public getAnswerTitle(index: number): string { + return $localize`Choice` + ` #${index >= 10 ? index : '0' + index}`; + } + + public getAwardLabel(award: Award): string { + return ( + award.name + + ' (' + + $localize`badge` + + ': ' + + award.badge.name + + ', ' + + $localize`id` + + ': ' + + award.uid.substring(0, 10) + + ')' + ); + } + + private cancelSubscriptions(): void { + this.subscriptionsAwards$?.unsubscribe(); + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/proposal/pages/overview/overview.page.html b/src/app/pages/proposal/pages/overview/overview.page.html new file mode 100644 index 0000000..846efa2 --- /dev/null +++ b/src/app/pages/proposal/pages/overview/overview.page.html @@ -0,0 +1,96 @@ + +
    +

    {{q.text}}

    + + +

    {{a.text}}

    + + +
    +
    +
    + + + + + + +
    + +
    +
    + + + + + + {{ q.text }} + +
    + + + + + + + + + +
    +
    + +
    +

    Proposal Description

    +
    +
    + + diff --git a/src/app/pages/proposal/pages/overview/overview.page.less b/src/app/pages/proposal/pages/overview/overview.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/proposal/pages/overview/overview.page.ts b/src/app/pages/proposal/pages/overview/overview.page.ts new file mode 100644 index 0000000..3dfe1d9 --- /dev/null +++ b/src/app/pages/proposal/pages/overview/overview.page.ts @@ -0,0 +1,134 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { SeoService } from '@core/services/seo'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/proposal/services/helper.service'; +import { Proposal, StakeType, Timestamp } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { NzNotificationService } from 'ng-zorro-antd/notification'; +import { BehaviorSubject, Observable, Subscription, interval, map } from 'rxjs'; +import { ProposalApi } from './../../../../@api/proposal.api'; +import { NotificationService } from './../../../../@core/services/notification/notification.service'; +import { DataService } from './../../services/data.service'; + +@UntilDestroy() +@Component({ + selector: 'wen-overview', + changeDetection: ChangeDetectionStrategy.OnPush, + templateUrl: './overview.page.html', + styleUrls: ['./overview.page.less'], +}) +export class OverviewPage implements OnInit { + public voteControl: FormControl = new FormControl(); + public startDateTicker$: BehaviorSubject; + + public isModalOpen = false; + + constructor( + private auth: AuthService, + private notification: NotificationService, + private nzNotification: NzNotificationService, + private proposalApi: ProposalApi, + private seo: SeoService, + public data: DataService, + public helper: HelperService, + public deviceService: DeviceService, + ) { + // Init start date. + this.startDateTicker$ = new BehaviorSubject( + this.data.proposal$.value?.settings?.startDate, + ); + } + + public ngOnInit(): void { + this.data.currentMembersVotes$.pipe(untilDestroyed(this)).subscribe((tran) => { + if (tran?.[0]?.payload?.values?.length > 0) { + // TODO Deal with multiple answers. + tran?.[0]?.payload?.values.forEach((v: number) => { + this.voteControl.setValue(v); + }); + } + }); + + this.data.proposal$.pipe(untilDestroyed(this)).subscribe((p) => { + this.startDateTicker$.next(p?.settings?.startDate); + + this.seo.setTags( + $localize`Proposal - ` + p?.name || '', + $localize`See all participants within the award.`, + this.data.space$.value?.bannerUrl, + ); + }); + + // Run ticker. + const int: Subscription = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.startDateTicker$.next(this.startDateTicker$.value); + + // If it's in the past. + if ( + this.startDateTicker$.value && + dayjs(this.startDateTicker$.value.toDate()).isBefore(dayjs()) + ) { + int.unsubscribe(); + this.data.proposal$.next({ ...this.data.proposal$.value }); + } + }); + } + + public get isLoggedIn$(): BehaviorSubject { + return this.auth.isLoggedIn$; + } + + public closeVoteModal(): void { + this.isModalOpen = false; + } + + public openVoteModal(): void { + this.isModalOpen = true; + } + + public get loggedInUserTotalStake$(): Observable { + return this.data.tokenDistribution$.pipe( + map((v) => { + return ( + (v?.stakes?.[StakeType.DYNAMIC]?.amount || 0) + + (v?.stakes?.[StakeType.STATIC]?.amount || 0) + ); + }), + ); + } + + public async vote(): Promise { + if (this.helper.isNativeVote(this.data.proposal$.value?.type)) { + this.openVoteModal(); + return; + } + + if (!this.data.proposal$.value?.uid) { + return; + } + + if (!(this.voteControl.value > -1)) { + this.nzNotification.error('', 'Please select option first!'); + return; + } + + await this.auth.sign( + { + uid: this.data.proposal$.value.uid, + values: [this.voteControl.value], + }, + (sc, finish) => { + this.notification + .processRequest(this.proposalApi.vote(sc), 'Voted.', finish) + .subscribe(() => { + // none. + }); + }, + ); + } +} diff --git a/src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html b/src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html new file mode 100644 index 0000000..7c506bb --- /dev/null +++ b/src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html @@ -0,0 +1,86 @@ + + + + + In order to vote, you must be part of the space before proposal was created. + + + + + + In order to vote, you must login first. + + + + + + This proposal has not been approved by any Guardian yet. + + diff --git a/src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.less b/src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.ts b/src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.ts new file mode 100644 index 0000000..bbec3ae --- /dev/null +++ b/src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.ts @@ -0,0 +1,18 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DataService } from '@pages/proposal/services/data.service'; +import { HelperService } from '@pages/proposal/services/helper.service'; +import { Timestamp } from '@soonaverse/interfaces'; +import { BehaviorSubject } from 'rxjs'; + +@Component({ + selector: 'wen-proposal-vote-action', + templateUrl: './proposal-vote-action.component.html', + styleUrls: ['./proposal-vote-action.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ProposalVoteActionComponent { + @Input() startDateTicker$?: BehaviorSubject; + @Output() wenOnVote: EventEmitter = new EventEmitter(); + constructor(public auth: AuthService, public data: DataService, public helper: HelperService) {} +} diff --git a/src/app/pages/proposal/pages/participants/participants.page.html b/src/app/pages/proposal/pages/participants/participants.page.html new file mode 100644 index 0000000..4d024fb --- /dev/null +++ b/src/app/pages/proposal/pages/participants/participants.page.html @@ -0,0 +1,105 @@ +
    +
    +
    +
    + + + {{ tag.label }} + + + + + + + + +
    + + + + + + + + + + +
    + + + + + + + +
    + + No Participants + +
    +
    + +

    Weight: {{member.weight}}

    +
    +
    +
    diff --git a/src/app/pages/proposal/pages/participants/participants.page.less b/src/app/pages/proposal/pages/participants/participants.page.less new file mode 100644 index 0000000..b19e90e --- /dev/null +++ b/src/app/pages/proposal/pages/participants/participants.page.less @@ -0,0 +1,29 @@ +@input-radius: 2.125rem; + +// Note: Haven't find better (and working) way of overriding these nested styles than +// using deprecated ::ng-deep. Change it if you know better approach. +nz-input-group ::ng-deep { + .ant-input-group-addon:last-child { + @apply bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark; + border-top-right-radius: @input-radius; + border-bottom-right-radius: @input-radius; + } + + .ant-input-group .ant-input-affix-wrapper { + .ant-input-prefix { + @apply mr-3; + } + + &:not(:last-child) { + @apply border-0 h-14 pl-4; + border-top-left-radius: @input-radius; + border-bottom-left-radius: @input-radius; + } + + &:hover { + // there is a `border-right-width: 1px !important` style inside ng-zorro, + // thus we need important too :/ + border-right-width: 0 !important; + } + } +} diff --git a/src/app/pages/proposal/pages/participants/participants.page.ts b/src/app/pages/proposal/pages/participants/participants.page.ts new file mode 100644 index 0000000..4a504ca --- /dev/null +++ b/src/app/pages/proposal/pages/participants/participants.page.ts @@ -0,0 +1,273 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { MemberApi } from '@api/member.api'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { SeoService } from '@core/services/seo'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { COL, GLOBAL_DEBOUNCE_TIME, Member } from '@soonaverse/interfaces'; +import { BehaviorSubject, Subscription, debounceTime, first, from, skip } from 'rxjs'; +import { DataService } from '../../services/data.service'; +import { DEFAULT_LIST_SIZE } from './../../../../@api/base.api'; +import { ProposalApi, ProposalParticipantWithMember } from './../../../../@api/proposal.api'; +import { ROUTER_UTILS } from './../../../../@core/utils/router.utils'; + +enum ParticipantFilterOptions { + PENDING = 'pending', + VOTED = 'voted', +} + +@UntilDestroy() +@Component({ + selector: 'wen-participants', + changeDetection: ChangeDetectionStrategy.OnPush, + templateUrl: './participants.page.html', + styleUrls: ['./participants.page.less'], +}) +export class ParticipantsPage implements OnInit, OnDestroy { + public search$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public filterControl: FormControl = new FormControl(undefined); + public overTenRecords = false; + public static DEBOUNCE_TIME = GLOBAL_DEBOUNCE_TIME; + public selectedListControl: FormControl = new FormControl(ParticipantFilterOptions.PENDING); + public membersPending$: BehaviorSubject = + new BehaviorSubject(undefined); + public membersVoted$: BehaviorSubject = + new BehaviorSubject(undefined); + public hotTags: { value: ParticipantFilterOptions; label: string }[] = [ + { value: ParticipantFilterOptions.PENDING, label: $localize`Pending Vote` }, + { value: ParticipantFilterOptions.VOTED, label: $localize`Voted` }, + ]; + private dataStorePendingMembers: ProposalParticipantWithMember[][] = []; + private dataStoreVotedMembers: ProposalParticipantWithMember[][] = []; + private subscriptions$: Subscription[] = []; + private proposalId?: string; + + constructor( + private router: Router, + private route: ActivatedRoute, + public readonly algoliaService: AlgoliaService, + private cd: ChangeDetectorRef, + private memberApi: MemberApi, + private proposalApi: ProposalApi, + private seo: SeoService, + public data: DataService, + public deviceService: DeviceService, + public cache: CacheService, + ) { + // none. + } + + public get filterOptions(): typeof ParticipantFilterOptions { + return ParticipantFilterOptions; + } + + public ngOnInit(): void { + this.route.parent?.params.subscribe((obj) => { + const id: string | undefined = obj?.[ROUTER_UTILS.config.proposal.proposal.replace(':', '')]; + if (id) { + this.cancelSubscriptions(); + this.proposalId = id; + + this.seo.setTags( + $localize`Proposal - Participants`, + $localize`See all participants within the proposal`, + this.data.space$.value?.bannerUrl, + ); + } else { + this.router.navigate([ROUTER_UTILS.config.errorResponse.notFound]); + } + }); + + this.selectedListControl.valueChanges.pipe(untilDestroyed(this)).subscribe(() => { + if (this.search$.value && this.search$.value.length > 0) { + this.search$.next(this.search$.value); + } else { + this.onScroll(); + } + this.cd.markForCheck(); + }); + + this.search$.pipe(skip(1), untilDestroyed(this)).subscribe(async (val) => { + // We need reset old values. + this.resetDataStore(); + this.resetSubjects(); + this.overTenRecords = false; + if (val && val.length > 0) { + from( + this.algoliaService.searchClient + .initIndex(COL.MEMBER) + .search(val || '', { length: 5, offset: 0 }), + ) + .pipe(first()) + .subscribe((r) => { + const ids: string[] = r.hits.map((r) => { + const member = r as unknown as Member; + return member.uid; + }); + + // Top 10 records only supported + this.overTenRecords = ids.length > 10; + this.onScroll(); + }); + } else { + // Show normal list again. + this.onScroll(); + } + }); + + this.filterControl.valueChanges + .pipe(debounceTime(ParticipantsPage.DEBOUNCE_TIME)) + .subscribe(this.search$); + + // Load initial list. + this.onScroll(); + } + + public handleFilterChange(filter: ParticipantFilterOptions): void { + this.selectedListControl.setValue(filter); + this.cd.markForCheck(); + } + + public getList(): BehaviorSubject { + if (this.selectedListControl.value === this.filterOptions.VOTED) { + return this.membersVoted$; + } else { + return this.membersPending$; + } + } + + public getMemberCreatedOnLabel(): string { + return $localize`joined soonaverse on`; + } + + public getTitle(): string { + if (this.selectedListControl.value === this.filterOptions.VOTED) { + return $localize`Voted`; + } else { + return $localize`Pending`; + } + } + + public isPendingList(): boolean { + return this.selectedListControl.value === this.filterOptions.PENDING; + } + + public onScroll(): void { + if (!this.proposalId) { + return; + } + + this.onParticipantScroll(this.proposalId, this.selectedListControl.value); + } + + protected store( + stream$: BehaviorSubject, + store: any[][], + page: number, + a: any, + ): void { + if (store[page]) { + store[page] = a; + } else { + store.push(a); + } + + // Merge arrays. + stream$.next(Array.prototype.concat.apply([], store)); + } + + public onParticipantScroll(proposalId: string, list: ParticipantFilterOptions): void { + let store; + let handler; + let stream; + if (list === ParticipantFilterOptions.VOTED) { + store = this.dataStoreVotedMembers; + stream = this.membersVoted$.value; + handler = this.listenVotedMembers; + } else { + store = this.dataStorePendingMembers; + stream = this.membersPending$.value; + handler = this.listenPendingMembers; + } + + // Make sure we allow initial load store[0] + if ( + store[0] && + (!store[store.length - 1] || store[store.length - 1]?.length < DEFAULT_LIST_SIZE) + ) { + // Finished paging. + return; + } + + // For initial load stream will not be defiend. + const lastValue = stream ? stream[stream.length - 1]._issuedOn : undefined; + handler.call(this, proposalId, lastValue); + } + + public listenVotedMembers(proposalId: string, lastValue?: any): void { + this.subscriptions$.push( + this.proposalApi + .listenVotedMembers(proposalId, lastValue) + .subscribe( + this.store.bind( + this, + this.membersVoted$, + this.dataStoreVotedMembers, + this.dataStoreVotedMembers.length, + ), + ), + ); + } + + public listenPendingMembers(proposalId: string, lastValue?: string): void { + this.subscriptions$.push( + this.proposalApi + .listenPendingMembers(proposalId, lastValue) + .subscribe( + this.store.bind( + this, + this.membersPending$, + this.dataStorePendingMembers, + this.dataStorePendingMembers.length, + ), + ), + ); + } + + public trackByUid(index: number, item: ProposalParticipantWithMember) { + return item.uid; + } + + public resetDataStore(): void { + this.dataStorePendingMembers = []; + this.dataStoreVotedMembers = []; + } + + private resetSubjects(): void { + this.membersPending$.next(undefined); + this.membersVoted$.next(undefined); + } + + private cancelSubscriptions(): void { + this.resetSubjects(); + this.resetDataStore(); + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html b/src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html new file mode 100644 index 0000000..0022084 --- /dev/null +++ b/src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html @@ -0,0 +1,76 @@ + +
    + + +
    +
    + + + + + + + + + + + + diff --git a/src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.less b/src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts b/src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts new file mode 100644 index 0000000..c2b0578 --- /dev/null +++ b/src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts @@ -0,0 +1,44 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { DescriptionItemType } from '@components/description/description.component'; +import { DeviceService } from '@core/services/device'; +import { UnitsService } from '@core/services/units'; +import { DataService } from '@pages/proposal/services/data.service'; +import { HelperService } from '@pages/proposal/services/helper.service'; +import { ProposalType } from '@soonaverse/interfaces'; +import { BehaviorSubject } from 'rxjs'; + +@Component({ + selector: 'wen-proposal-info', + templateUrl: './proposal-info.component.html', + styleUrls: ['./proposal-info.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ProposalInfoComponent { + @Input() isGuardianWithinSpace$: BehaviorSubject = new BehaviorSubject(false); + @Output() wenOnExportClick = new EventEmitter(); + @Output() wenOnApprove = new EventEmitter(); + @Output() wenOnReject = new EventEmitter(); + public descriptionLabels: string[] = [ + $localize`Current Milestone`, + $localize`Commence Date`, + $localize`Start Date`, + $localize`End Date`, + $localize`Voting Type`, + $localize`Total Weight`, + ]; + + constructor( + public deviceService: DeviceService, + public data: DataService, + public unitsService: UnitsService, + public helper: HelperService, + ) {} + + public get descriptionItemTypes(): typeof DescriptionItemType { + return DescriptionItemType; + } + + public get proposalTypes(): typeof ProposalType { + return ProposalType; + } +} diff --git a/src/app/pages/proposal/pages/proposal/proposal.page.html b/src/app/pages/proposal/pages/proposal/proposal.page.html new file mode 100644 index 0000000..fbc6bcb --- /dev/null +++ b/src/app/pages/proposal/pages/proposal/proposal.page.html @@ -0,0 +1,166 @@ + + + + + + +
    +
    + + +

    {{(data.proposal$ | async)?.name}}

    + +
    +
    + + {{(data.proposal$ | async)?.createdOn?.toDate() | date:'short'}} +
    +
    + + + @{{((data.creator$ | async)?.name || (data.creator$ | async)?.uid) | + truncate:[16]}} +
    +
    + + +
    +
    + +
    +
    + +
    + + + + +
    +

    + {{q.text}} +

    + + +

    + {{a.text}} + (weight: {{(data.proposal$ | async)?.results?.answers?.[a.value] || 0 | number : + '1.0-2'}}) +

    + + +
    +
    +
    + + + (wenOnExportClick)="exportNativeEvent()"> + + + +
    +
    + +
    +
    +
    +
    +
    + + +
    + + + + + + + (wenOnExportClick)="exportNativeEvent()"> + +
    +
    +
    diff --git a/src/app/pages/proposal/pages/proposal/proposal.page.less b/src/app/pages/proposal/pages/proposal/proposal.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/proposal/pages/proposal/proposal.page.ts b/src/app/pages/proposal/pages/proposal/proposal.page.ts new file mode 100644 index 0000000..f1e237e --- /dev/null +++ b/src/app/pages/proposal/pages/proposal/proposal.page.ts @@ -0,0 +1,256 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AwardApi } from '@api/award.api'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/proposal/services/helper.service'; +import { + Award, + FILE_SIZES, + GLOBAL_DEBOUNCE_TIME, + Proposal, + ProposalType, +} from '@soonaverse/interfaces'; +import { BehaviorSubject, debounceTime, first, firstValueFrom, skip, Subscription } from 'rxjs'; +import { MemberApi } from './../../../../@api/member.api'; +import { ProposalApi } from './../../../../@api/proposal.api'; +import { SpaceApi } from './../../../../@api/space.api'; +import { NavigationService } from './../../../../@core/services/navigation/navigation.service'; +import { NotificationService } from './../../../../@core/services/notification/notification.service'; +import { DataService as ProposalDataService } from './../../services/data.service'; + +@UntilDestroy() +@Component({ + selector: 'wen-proposal', + changeDetection: ChangeDetectionStrategy.OnPush, + templateUrl: './proposal.page.html', + styleUrls: ['./proposal.page.less'], +}) +export class ProposalPage implements OnInit, OnDestroy { + public sections = [ + { route: [ROUTER_UTILS.config.proposal.overview], label: $localize`Overview` }, + { route: [ROUTER_UTILS.config.proposal.votes], label: $localize`Votes` }, + ]; + public isGuardianWithinSpace$: BehaviorSubject = new BehaviorSubject(false); + public isProposaslInfoVisible = false; + private subscriptions$: Subscription[] = []; + private guardiansSubscription$?: Subscription; + private currentMemberVotedTransSubscription$?: Subscription; + private canVoteSubscription$?: Subscription; + private proposalId?: string; + + constructor( + private auth: AuthService, + private router: Router, + private notification: NotificationService, + private spaceApi: SpaceApi, + private tokenApi: TokenApi, + private route: ActivatedRoute, + private proposalApi: ProposalApi, + private memberApi: MemberApi, + private awardApi: AwardApi, + private cd: ChangeDetectorRef, + public data: ProposalDataService, + public helper: HelperService, + public previewImageService: PreviewImageService, + public nav: NavigationService, + public deviceService: DeviceService, + ) { + // none. + } + + public ngOnInit(): void { + this.deviceService.viewWithSearch$.next(false); + this.route.params?.pipe(untilDestroyed(this)).subscribe((obj) => { + const id: string | undefined = obj?.[ROUTER_UTILS.config.proposal.proposal.replace(':', '')]; + if (id) { + this.listenToProposal(id); + } else { + this.notFound(); + } + }); + + // If we're unable to find the space we take the user out as well. + this.data.proposal$ + .pipe(skip(1), untilDestroyed(this), debounceTime(GLOBAL_DEBOUNCE_TIME)) + .subscribe((obj: Proposal | undefined) => { + if (!obj) { + this.notFound(); + return; + } + + // Once we load proposal let's load guardians for the space. + this.guardiansSubscription$?.unsubscribe(); + + if (this.auth.member$.value?.uid) { + this.guardiansSubscription$ = this.spaceApi + .isGuardianWithinSpace(obj.space, this.auth.member$.value.uid) + .pipe(untilDestroyed(this)) + .subscribe(this.isGuardianWithinSpace$); + } + + if (obj.type !== ProposalType.NATIVE && this.sections.length === 2) { + this.sections.push({ + route: [ROUTER_UTILS.config.proposal.participants], + label: $localize`Participants`, + }); + this.sections = [...this.sections]; + this.cd.markForCheck(); + } + }); + + // Guardians might be refreshed alter and we need to apply that on view. + this.data.guardians$.subscribe(() => { + this.cd.markForCheck(); + }); + + // Once we get proposal get space/badges/token. + this.data.proposal$.pipe(skip(1), first()).subscribe(async (p) => { + if (p) { + this.subscriptions$.push( + this.spaceApi.listen(p.space).pipe(untilDestroyed(this)).subscribe(this.data.space$), + ); + if (p.createdBy) { + this.subscriptions$.push( + this.memberApi + .listen(p.createdBy) + .pipe(untilDestroyed(this)) + .subscribe(this.data.creator$), + ); + } + + if (p.token) { + this.subscriptions$.push( + this.tokenApi.listen(p.token).pipe(untilDestroyed(this)).subscribe(this.data.token$), + ); + + if (this.auth.member$.value?.uid) { + this.subscriptions$.push( + this.tokenApi + .getMembersDistribution(p.token, this.auth.member$.value.uid) + .subscribe(this.data.tokenDistribution$), + ); + } + } + + // Get badges to show. + const awards: Award[] = []; + if (p.settings.awards?.length) { + for (const a of p.settings.awards) { + const award: Award | undefined = await firstValueFrom(this.awardApi.listen(a)); + if (award) { + awards.push(award); + } + } + } + + this.data.badges$.next(awards); + } + }); + + this.auth.member$?.pipe(untilDestroyed(this)).subscribe((member) => { + this.currentMemberVotedTransSubscription$?.unsubscribe(); + this.canVoteSubscription$?.unsubscribe(); + if (member?.uid && this.proposalId) { + this.currentMemberVotedTransSubscription$ = this.proposalApi + .getMembersVotes(this.proposalId, member.uid) + .subscribe(this.data.currentMembersVotes$); + this.currentMemberVotedTransSubscription$ = this.proposalApi + .canMemberVote(this.proposalId, member.uid) + .subscribe(this.data.canVote$); + } else { + this.data.currentMembersVotes$.next(undefined); + this.data.canVote$.next(false); + } + }); + } + + public fireflyNotSupported(): void { + alert('Firefly deep links does not support this option yet. Use CLI wallet instead.'); + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + private notFound(): void { + this.router.navigate([ROUTER_UTILS.config.errorResponse.notFound]); + } + + private listenToProposal(id: string): void { + this.proposalId = id; + this.cancelSubscriptions(); + this.subscriptions$.push( + this.proposalApi.listen(id).pipe(untilDestroyed(this)).subscribe(this.data.proposal$), + ); + this.subscriptions$.push( + this.proposalApi.lastVotes(id).pipe(untilDestroyed(this)).subscribe(this.data.transactions$), + ); + } + + public trackByUid(index: number, item: Award) { + return item.uid; + } + + public async approve(): Promise { + if (!this.data.proposal$.value?.uid) { + return; + } + + await this.auth.sign( + { + uid: this.data.proposal$.value.uid, + }, + (sc, finish) => { + this.notification + .processRequest(this.proposalApi.approve(sc), 'Approved.', finish) + .subscribe(() => { + // none. + }); + }, + ); + } + + public async reject(): Promise { + if (!this.data.proposal$.value?.uid) { + return; + } + + await this.auth.sign( + { + uid: this.data.proposal$.value.uid, + }, + (sc, finish) => { + this.notification + .processRequest(this.proposalApi.reject(sc), 'Rejected.', finish) + .subscribe(() => { + // none. + }); + }, + ); + } + + private cancelSubscriptions(): void { + this.currentMemberVotedTransSubscription$?.unsubscribe(); + this.canVoteSubscription$?.unsubscribe(); + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + this.data.resetSubjects(); + this.guardiansSubscription$?.unsubscribe(); + } +} diff --git a/src/app/pages/proposal/pages/votes/votes.page.html b/src/app/pages/proposal/pages/votes/votes.page.html new file mode 100644 index 0000000..f32e386 --- /dev/null +++ b/src/app/pages/proposal/pages/votes/votes.page.html @@ -0,0 +1,49 @@ + + + + + Voter + Date + Option (Weight) + + Expired On + + + + + + + @{{ t.memberRec?.name || t.member | truncate : [7] }} + + {{ t.createdOn?.toDate() | date : 'short' }} + + {{ helper.findAnswerText((data.proposal$ | async)?.questions, t.payload.values) }} ({{ + (data.proposal$ | async)?.type === proposalTypes.NATIVE ? (t.payload.weight | formatToken: + (data.token$ | async)?.uid: false: false: 2 | async) + ' ' + ((data.token$ | + async)?.symbol === 'IOTA' ? 'M' : '') + (data.token$ | async)?.symbol : t.payload.weight + || 0 }}) + + + {{ t.payload.outputConsumedOn ? (t.payload.outputConsumedOn.toDate() | date: 'medium') : + '-' }} + + + + + diff --git a/src/app/pages/proposal/pages/votes/votes.page.less b/src/app/pages/proposal/pages/votes/votes.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/proposal/pages/votes/votes.page.ts b/src/app/pages/proposal/pages/votes/votes.page.ts new file mode 100644 index 0000000..16bb81d --- /dev/null +++ b/src/app/pages/proposal/pages/votes/votes.page.ts @@ -0,0 +1,44 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { DescriptionItemType } from '@components/description/description.component'; +import { DeviceService } from '@core/services/device'; +import { UnitsService } from '@core/services/units'; +import { DataService } from '@pages/proposal/services/data.service'; +import { HelperService } from '@pages/proposal/services/helper.service'; +import { ProposalType } from '@soonaverse/interfaces'; +import { BehaviorSubject } from 'rxjs'; + +@Component({ + selector: 'wen-votes', + templateUrl: './votes.page.html', + styleUrls: ['./votes.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class VotesPage { + @Input() isGuardianWithinSpace$: BehaviorSubject = new BehaviorSubject(false); + @Output() wenOnExportClick = new EventEmitter(); + @Output() wenOnApprove = new EventEmitter(); + @Output() wenOnReject = new EventEmitter(); + public descriptionLabels: string[] = [ + $localize`Current Milestone`, + $localize`Commence Date`, + $localize`Start Date`, + $localize`End Date`, + $localize`Voting Type`, + $localize`Total Weight`, + ]; + + constructor( + public deviceService: DeviceService, + public data: DataService, + public unitsService: UnitsService, + public helper: HelperService, + ) {} + + public get descriptionItemTypes(): typeof DescriptionItemType { + return DescriptionItemType; + } + + public get proposalTypes(): typeof ProposalType { + return ProposalType; + } +} diff --git a/src/app/pages/proposal/proposal-routing.module.ts b/src/app/pages/proposal/proposal-routing.module.ts new file mode 100644 index 0000000..9da930c --- /dev/null +++ b/src/app/pages/proposal/proposal-routing.module.ts @@ -0,0 +1,41 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ROUTER_UTILS } from '../../@core/utils/router.utils'; +import { NewPage } from './pages/new/new.page'; +import { OverviewPage } from './pages/overview/overview.page'; +import { VotesPage } from './pages/votes/votes.page'; +import { ParticipantsPage } from './pages/participants/participants.page'; +import { ProposalPage } from './pages/proposal/proposal.page'; + +const routes: Routes = [ + { + path: ROUTER_UTILS.config.proposal.newProposal, + component: NewPage, + }, + { + path: ROUTER_UTILS.config.proposal.proposal, + component: ProposalPage, + children: [ + { + path: '', + redirectTo: ROUTER_UTILS.config.proposal.overview, + pathMatch: 'full', + }, + { path: ROUTER_UTILS.config.proposal.overview, component: OverviewPage }, + { path: ROUTER_UTILS.config.proposal.votes, component: VotesPage }, + { path: ROUTER_UTILS.config.proposal.participants, component: ParticipantsPage }, + ], + }, + { + path: '', + redirectTo: + '/' + ROUTER_UTILS.config.discover.root + '/' + ROUTER_UTILS.config.discover.proposals, + pathMatch: 'full', + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class ProposalRoutingModule {} diff --git a/src/app/pages/proposal/proposal.module.ts b/src/app/pages/proposal/proposal.module.ts new file mode 100644 index 0000000..0942c5d --- /dev/null +++ b/src/app/pages/proposal/proposal.module.ts @@ -0,0 +1,118 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { BadgeModule } from '@components/badge/badge.module'; +import { DescriptionModule } from '@components/description/description.module'; +import { DrawerToggleModule } from '@components/drawer-toggle/drawer-toggle.module'; +import { IconModule } from '@components/icon/icon.module'; +import { MemberCardModule } from '@components/member/components/member-card/member-card.module'; +import { MobileSearchModule } from '@components/mobile-search/mobile-search.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { ProposalAnswerModule } from '@components/proposal/components/proposal-answer/proposal-answer.module'; +import { RadioModule } from '@components/radio/radio.module'; +import { ShareModule } from '@components/share/share.module'; +import { TabsModule } from '@components/tabs/tabs.module'; +import { TokenVoteModule } from '@components/token/components/token-vote/token-vote.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { LayoutModule } from '@shell/ui/layout/layout.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; +import { NzDividerModule } from 'ng-zorro-antd/divider'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzGridModule } from 'ng-zorro-antd/grid'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzInputNumberModule } from 'ng-zorro-antd/input-number'; +import { NzMenuModule } from 'ng-zorro-antd/menu'; +import { NzNotificationModule } from 'ng-zorro-antd/notification'; +import { NzProgressModule } from 'ng-zorro-antd/progress'; +import { NzRadioModule } from 'ng-zorro-antd/radio'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NzTypographyModule } from 'ng-zorro-antd/typography'; +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; +import { MarkDownModule } from './../../@core/pipes/markdown/markdown.module'; +import { RelativeTimeModule } from './../../@core/pipes/relative-time/relative-time.module'; +import { TruncateModule } from './../../@core/pipes/truncate/truncate.module'; +import { ProposalStatusModule } from './../../components/proposal/components/proposal-status/proposal-status.module'; +import { NewPage } from './pages/new/new.page'; +import { OverviewPage } from './pages/overview/overview.page'; +import { ProposalVoteActionComponent } from './pages/overview/proposal-vote-action/proposal-vote-action.component'; +import { ParticipantsPage } from './pages/participants/participants.page'; +import { ProposalInfoComponent } from './pages/proposal/proposal-info/proposal-info.component'; +import { ProposalPage } from './pages/proposal/proposal.page'; +import { VotesPage } from './pages/votes/votes.page'; +import { ProposalRoutingModule } from './proposal-routing.module'; +import { DataService } from './services/data.service'; + +@NgModule({ + declarations: [ + ProposalPage, + OverviewPage, + VotesPage, + ParticipantsPage, + NewPage, + ProposalInfoComponent, + ProposalVoteActionComponent, + ], + providers: [DataService], + imports: [ + CommonModule, + ProposalRoutingModule, + MemberCardModule, + ProposalStatusModule, + ReactiveFormsModule, + NzSelectModule, + NzNotificationModule, + BadgeModule, + TabsModule, + RelativeTimeModule, + InfiniteScrollModule, + MarkDownModule, + TruncateModule, + ResizeAvatarModule, + NzRadioModule, + NzButtonModule, + NzToolTipModule, + LayoutModule, + NzCardModule, + NzIconModule, + NzInputModule, + NzAvatarModule, + NzGridModule, + NzFormModule, + NzToolTipModule, + NzMenuModule, + NzAlertModule, + NzTagModule, + NzSkeletonModule, + NzTypographyModule, + NzProgressModule, + FormatTokenModule, + NzTableModule, + NzTagModule, + NzInputNumberModule, + NzDividerModule, + NzDatePickerModule, + IconModule, + RadioModule, + DrawerToggleModule, + NzDrawerModule, + ProposalAnswerModule, + MobileSearchModule, + FormsModule, + TokenVoteModule, + ShareModule, + DescriptionModule, + ModalDrawerModule, + ], +}) +export class ProposalModule {} diff --git a/src/app/pages/proposal/services/data.service.ts b/src/app/pages/proposal/services/data.service.ts new file mode 100644 index 0000000..d2a30d4 --- /dev/null +++ b/src/app/pages/proposal/services/data.service.ts @@ -0,0 +1,83 @@ +import { Injectable } from '@angular/core'; +import { + Award, + Member, + Proposal, + ProposalAnswer, + Space, + SpaceGuardian, + Token, + TokenDistribution, + Transaction, +} from '@soonaverse/interfaces'; +import { BehaviorSubject } from 'rxjs'; +import { TransactionWithFullMember } from './../../../@api/proposal.api'; + +@Injectable({ + providedIn: 'any', +}) +export class DataService { + public proposal$: BehaviorSubject = new BehaviorSubject< + Proposal | undefined + >(undefined); + public space$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public token$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public badges$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public creator$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public transactions$: BehaviorSubject = + new BehaviorSubject(undefined); + public currentMembersVotes$: BehaviorSubject = new BehaviorSubject< + Transaction[] | undefined + >(undefined); + public canVote$: BehaviorSubject = new BehaviorSubject( + false, + ); + public guardians$: BehaviorSubject = new BehaviorSubject< + SpaceGuardian[] | undefined + >(undefined); + public tokenDistribution$: BehaviorSubject = new BehaviorSubject< + TokenDistribution | undefined + >(undefined); + + constructor() { + // none. + } + + public resetSubjects(): void { + // Clean up all streams. + this.proposal$.next(undefined); + this.space$.next(undefined); + this.badges$.next(undefined); + this.creator$.next(undefined); + this.transactions$.next(undefined); + this.guardians$.next(undefined); + this.canVote$.next(false); + } + + public isLoading(arr: any): boolean { + return arr === undefined; + } + + public isEmpty(arr: any): boolean { + return Array.isArray(arr) && arr.length === 0; + } + + public getProgress(proposal: Proposal | null | undefined, a: ProposalAnswer): number { + let total = 0; + if (proposal?.results?.answers) { + Object.keys(proposal?.results?.answers).forEach((b: any) => { + total += proposal?.results?.answers[b] || 0; + }); + } + + return ((proposal?.results?.answers?.[a.value] || 0) / total) * 100; + } +} diff --git a/src/app/pages/proposal/services/helper.service.ts b/src/app/pages/proposal/services/helper.service.ts new file mode 100644 index 0000000..165f05b --- /dev/null +++ b/src/app/pages/proposal/services/helper.service.ts @@ -0,0 +1,116 @@ +import { Injectable } from '@angular/core'; +import { UnitsService } from '@core/services/units'; +import { + Proposal, + ProposalQuestion, + ProposalType, + PROPOSAL_COMMENCING_IN_DAYS, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; + +@Injectable({ + providedIn: 'root', +}) +export class HelperService { + constructor(public unitsService: UnitsService) {} + + public getVotingTypeText(type: ProposalType | undefined): string { + if (type === ProposalType.NATIVE) { + return $localize`Space's Native Token`; + } + return $localize`One Member One Vote`; + } + + public getCommenceDate(proposal?: Proposal | null): Date | null { + if (!proposal) { + return null; + } + + return proposal.settings?.startDate?.toDate() + ? dayjs(proposal.settings?.startDate?.toDate()).subtract(1, 'day').toDate() + : null; + } + + public getStartDate(proposal?: Proposal | null): Date | null { + if (!proposal) { + return null; + } + + return proposal.settings?.startDate?.toDate() || null; + } + + public getEndDate(proposal?: Proposal | null): Date | null { + if (!proposal) { + return null; + } + + return proposal.settings?.endDate?.toDate() || null; + } + + public findAnswerText(qs: ProposalQuestion[] | undefined, values: number[]): string { + let text = ''; + qs?.forEach((q: ProposalQuestion) => { + q.answers.forEach((a) => { + if (values.includes(a.value)) { + text = a.text; + } + }); + }); + + return text; + } + + public isComplete(proposal?: Proposal | null): boolean { + if (!proposal) { + return false; + } + + return dayjs(proposal.settings.endDate.toDate()).isBefore(dayjs()) && !!proposal?.approved; + } + + public isInProgress(proposal?: Proposal | null): boolean { + if (!proposal || proposal.rejected) { + return false; + } + + return !this.isComplete(proposal) && !this.isPending(proposal) && !!proposal.approved; + } + + public isInProgressIgnoreStatus(proposal?: Proposal | null): boolean { + if (!proposal) { + return false; + } + + return !this.isComplete(proposal) && !this.isPending(proposal); + } + + public isPending(proposal?: Proposal | null): boolean { + if (!proposal || !proposal.approved) { + return false; + } + + return dayjs(proposal.settings.startDate.toDate()).isAfter(dayjs()); + } + + public isCommencing(proposal?: Proposal | null): boolean { + if (!proposal || !proposal.approved || proposal.rejected) { + return false; + } + + return ( + dayjs(proposal.settings.startDate.toDate()) + .subtract(PROPOSAL_COMMENCING_IN_DAYS, 'd') + .isBefore(dayjs()) && + dayjs(proposal.settings.startDate.toDate()).isAfter(dayjs()) && + !this.isComplete() + ); + } + + public isNativeVote(type: ProposalType | undefined): boolean { + return type === ProposalType.NATIVE; + } + + public getShareUrl(proposal?: Proposal | null): string { + return proposal?.wenUrl || window?.location.href; + } +} diff --git a/src/app/pages/soon-staking/pages/staking/staking.page.html b/src/app/pages/soon-staking/pages/staking/staking.page.html new file mode 100644 index 0000000..b336e5b --- /dev/null +++ b/src/app/pages/soon-staking/pages/staking/staking.page.html @@ -0,0 +1,281 @@ + +

    + {{(token$ | async)?.symbol | uppercase}} Staking +

    + +
    +
    +
    +
    +
    +
    How much I earn?
    + +
    +
    +
    + How much {{(token$ | async)?.symbol | uppercase}} you want to stake? +
    +
    + +
    +
    + + +
    + {{(token$ | async)?.symbol | uppercase}} +
    +
    +
    +
    +
    + +
    +
    + For how long you want to stake? +
    + + + +
    + +
    +
    +
    + Rewards Multiplier +
    +
    +
    + {{multiplierControl.value | number: '1.0-2'}}x + - + + +
    +
    +
    + +
    +
    + Possible Staking Value + +
    +
    +
    + {{ stakeControl.value | number: '1.0-2' }} + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +

    How it works?

    +

    + Stake your {{(token$ | async)?.symbol | uppercase}} tokens to earn rewards and unlock + new features. +

    +
    +
    + +
    +
    +
    +
    + + +
    +

    Unique Perks for stakers

    +
    +
    +
    +

    + {{(token$ | async)?.symbol | uppercase}} Rewards +

    +

    + {{(token$ | async)?.symbol | uppercase}} token rewards will be provided every week. +

    +
    +
    +
    +
    +

    Trading Bonuses

    +

    + You choose how long you wont to lock your token/s. You get more rewards the longer you + stake your token/s. +

    +
    +
    +
    +
    +

    Unique Features

    +

    + We don't own your token/s, you do. Tokens are only locked for a select period of time. +

    +
    +
    +
    +
    + +
    +

    + Earn more {{(token$ | async)?.symbol | uppercase}}er than you think +

    + The more {{(token$ | async)?.symbol | uppercase}} you hold, the more rewards you get. +

    +

    + + + + Category + Level + 0 + 1 + 2 + 3 + 4 + + + + + + {{data.category}} + {{data.category_extra}} + {{data.level0}} + {{data.level1}} + {{data.level2}} + {{data.level3}} + {{data.level4}} + + + {{data.category}} + {{data.category_extra}} + + {{(pInt(data.level0) | formatToken: (token$ | async)?.uid:false:false:0 | async)}} + + + {{(pInt(data.level1) | formatToken: (token$ | async)?.uid:false:false:0 | async)}} + + + {{(pInt(data.level2) | formatToken: (token$ | async)?.uid:false:false:0 | async)}} + + + {{(pInt(data.level3) | formatToken: (token$ | async)?.uid:false:false:0 | async)}} + + + {{(pInt(data.level4) | formatToken: (token$ | async)?.uid:false:false:0 | async)}} + + + + + +
    + + +
    diff --git a/src/app/pages/soon-staking/pages/staking/staking.page.less b/src/app/pages/soon-staking/pages/staking/staking.page.less new file mode 100644 index 0000000..9684c2f --- /dev/null +++ b/src/app/pages/soon-staking/pages/staking/staking.page.less @@ -0,0 +1,100 @@ +/* Chrome, Safari, Edge, Opera */ +.no-arrows::-webkit-outer-spin-button, +.no-arrows::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +/* Firefox */ +.no-arrows[type='number'] { + -moz-appearance: textfield; +} + +.table-light { + .ant-table-tbody > tr.ant-table-row:hover > td, + .ant-table-tbody > tr > td.ant-table-cell-row-hover { + background-color: transparent !important; + + &.selected-column, + &.selected-column-cur { + background-color: #f3ffee !important; + } + } + + .selected-column, + .selected-column-cur { + @apply bg-sale-ongoing; + } + + th { + &.selected-column::after { + color: white; + background: #8eceaf; + } + + &.selected-column-cur::after { + color: white; + background: #8eceaf; + } + } +} + +.table-dark { + .ant-table-tbody > tr.ant-table-row:hover > td, + .ant-table-tbody > tr > td.ant-table-cell-row-hover { + background-color: transparent !important; + + &.selected-column, + &.selected-column-cur { + background-color: #32302a !important; + } + } + + .selected-column, + .selected-column-cur { + @apply bg-foregrounds-placeholder-dark; + } + + th { + &.selected-column::after { + color: white; + background: #3a5430; + } + + &.selected-column-cur::after { + color: white; + background: #3a5430; + } + } +} + +th { + &.selected-column::after { + content: 'Possible level'; + position: absolute; + top: -26px; + right: 0; + padding-top: 0.2rem; + padding-bottom: 0.8rem; + padding-right: 0.6rem; + padding-left: 0.6rem; + z-index: -1; + } + + &.selected-column, + &.selected-column-cur { + border-top-right-radius: 16px; + } + + &.selected-column-cur::after { + content: 'Current level'; + position: absolute; + top: -26px; + right: 0; + padding-top: 0.2rem; + padding-bottom: 0.8rem; + padding-right: 0.6rem; + padding-left: 0.6rem; + z-index: -1; + } +} diff --git a/src/app/pages/soon-staking/pages/staking/staking.page.ts b/src/app/pages/soon-staking/pages/staking/staking.page.ts new file mode 100644 index 0000000..9c9a3f5 --- /dev/null +++ b/src/app/pages/soon-staking/pages/staking/staking.page.ts @@ -0,0 +1,281 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { FormControl, Validators } from '@angular/forms'; +import { SpaceApi } from '@api/space.api'; +import { StakeRewardApi } from '@api/stake_reward'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { ThemeList, ThemeService } from '@core/services/theme'; +import { UnitsService } from '@core/services/units'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { + MAX_WEEKS_TO_STAKE, + MIN_WEEKS_TO_STAKE, + SOON_SPACE, + SOON_SPACE_TEST, + SOON_TOKEN, + SOON_TOKEN_TEST, + Space, + StakeReward, + StakeType, + Token, + TokenStats, + calcStakedMultiplier, + getDefDecimalIfNotSet, + tiers, +} from '@soonaverse/interfaces'; +import { BehaviorSubject, Observable, Subscription, map, merge, of } from 'rxjs'; + +interface Rewards { + key: string; + category: string; + category_extra: string; + level0: string; + level1: string; + level2: string; + level3: string; + level4: string; +} + +@UntilDestroy() +@Component({ + selector: 'wen-staking', + templateUrl: './staking.page.html', + styleUrls: ['./staking.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class StakingPage implements OnInit, OnDestroy { + public theme = ThemeList; + public weeks = Array.from({ length: 52 }, (_, i) => i + 1); + public openTokenStake = false; + public amountControl: FormControl = new FormControl(null, [ + Validators.required, + Validators.min(1), + ]); + public weekControl: FormControl = new FormControl(1, [ + Validators.required, + Validators.min(MIN_WEEKS_TO_STAKE), + Validators.max(MAX_WEEKS_TO_STAKE), + ]); + + public stakeControl: FormControl = new FormControl({ value: 0, disabled: true }); + public multiplierControl: FormControl = new FormControl({ value: 0, disabled: true }); + public earnControl: FormControl = new FormControl({ value: 0, disabled: true }); + public levelControl: FormControl = new FormControl({ value: 0, disabled: true }); + public space$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public token$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public stakeRewards$: BehaviorSubject = new BehaviorSubject< + StakeReward[] | undefined + >(undefined); + public tokenStats$: BehaviorSubject = new BehaviorSubject< + TokenStats | undefined + >(undefined); + private subscriptions$: Subscription[] = []; + constructor( + public themeService: ThemeService, + private cd: ChangeDetectorRef, + private spaceApi: SpaceApi, + private tokenApi: TokenApi, + private stakeRewardsApi: StakeRewardApi, + public previewImageService: PreviewImageService, + public unitService: UnitsService, + private auth: AuthService, + public deviceService: DeviceService, + ) {} + + public get themes(): typeof ThemeList { + return ThemeList; + } + + public ngOnInit(): void { + this.deviceService.viewWithSearch$.next(false); + + // We don't want calc to be automatic. + merge(this.amountControl.valueChanges, this.weekControl.valueChanges) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.calcStake(); + }); + + this.listenToSpace(environment.production ? SOON_SPACE : SOON_SPACE_TEST); + this.listenToToken(environment.production ? SOON_TOKEN : SOON_TOKEN_TEST); + this.listenToTokenStatus(environment.production ? SOON_TOKEN : SOON_TOKEN_TEST); + this.listenToTokenRewards(environment.production ? SOON_TOKEN : SOON_TOKEN_TEST); + } + + public calcStake(): void { + if ((this.amountControl.value || 0) > 0 && (this.weekControl.value || 0) > 0) { + const val = calcStakedMultiplier(this.weekControl.value) * (this.amountControl.value || 0); + this.stakeControl.setValue(val.toFixed(2)); + const newTotal = + (this.auth.memberSoonDistribution$.value?.stakes?.[StakeType.DYNAMIC]?.value || 0) + + Math.pow(10, getDefDecimalIfNotSet(this.token$.value?.decimals)) * val; + let l = -1; + tiers.forEach((a) => { + if (newTotal >= a) { + l++; + } + }); + + if (l > tiers.length) { + l = tiers.length; + } + + this.levelControl.setValue(l); + this.multiplierControl.setValue(calcStakedMultiplier(this.weekControl.value)); + if (this.tokenStats$.value && this.stakeRewards$.value) { + this.earnControl.setValue( + this.stakeRewardsApi.calcApy( + this.tokenStats$.value, + this.stakeControl.value * + Math.pow(10, getDefDecimalIfNotSet(this.token$.value?.decimals)), + this.stakeRewards$.value, + ), + ); + } + this.cd.markForCheck(); + } else { + this.stakeControl.setValue(0); + this.multiplierControl.setValue(0); + this.earnControl.setValue(0); + } + } + + public isSoonSpace(): Observable { + return this.space$.pipe( + map((s) => { + return s?.uid === (environment.production ? SOON_SPACE : SOON_SPACE_TEST); + }), + ); + } + + public listenToSpace(id: string): void { + this.subscriptions$.push(this.spaceApi.listen(id).subscribe(this.space$)); + } + + public listenToToken(id: string): void { + this.subscriptions$.push(this.tokenApi.listen(id).subscribe(this.token$)); + } + + public listenToTokenStatus(token: string): void { + this.subscriptions$.push(this.tokenApi.stats(token).subscribe(this.tokenStats$)); + } + + public listenToTokenRewards(token: string): void { + this.subscriptions$.push( + this.stakeRewardsApi.token(token, undefined).subscribe(this.stakeRewards$), + ); + } + + public getLevelClass(level: number): Observable<'selected-column' | 'selected-column-cur' | ''> { + if (level === 0) { + return of(''); + } + + if (this.levelControl.value === level && this.amountControl.value > 0) { + return of('selected-column'); + } else if ( + this.auth.memberLevel$.value === level && + (this.auth.memberSoonDistribution$.value?.stakes?.[StakeType.DYNAMIC]?.value || 0) > 0 && + !this.amountControl.value + ) { + return of('selected-column-cur'); + } else { + return of(''); + } + } + + public pInt(v: string): number { + return parseInt(v); + } + + public listOfData: Rewards[] = [ + { + key: '1', + category: 'Requirements', + category_extra: 'Staked value', // auth.memberLevel$ | async + level0: tiers[0].toString(), + level1: tiers[1].toString(), + level2: tiers[2].toString(), + level3: tiers[3].toString(), + level4: tiers[4].toString(), + }, + { + key: '2', + category: 'Rewards', + category_extra: '', + level0: '0', + level1: '✓', + level2: '✓', + level3: '✓', + level4: '✓', + }, + { + key: '3', + category: 'Token Trading Discounts', + category_extra: '', + level0: '0', + level1: '25%', + level2: '50%', + level3: '75%', + level4: '100%', + }, + { + key: '4', + category: 'Extra Features', + category_extra: 'Create Collections', + level0: '-', + level1: '✓', + level2: '✓', + level3: '✓', + level4: '✓', + }, + { + key: '5', + category: '', + category_extra: 'Create Token', + level0: '-', + level1: '✓', + level2: '✓', + level3: '✓', + level4: '✓', + }, + { + key: '6', + category: '', + category_extra: 'Up/Down Vote', + level0: '-', + level1: '✓', + level2: '✓', + level3: '✓', + level4: '✓', + }, + ]; + + public submit(): void { + this.openTokenStake = true; + this.cd.markForCheck(); + } + + public cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/soon-staking/soon-staking-routing.module.ts b/src/app/pages/soon-staking/soon-staking-routing.module.ts new file mode 100644 index 0000000..bbe7665 --- /dev/null +++ b/src/app/pages/soon-staking/soon-staking-routing.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { StakingPage } from './pages/staking/staking.page'; + +const routes: Routes = [ + { + path: '', + component: StakingPage, + pathMatch: 'full', + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class SoonStakingRoutingModule {} diff --git a/src/app/pages/soon-staking/soon-staking.module.ts b/src/app/pages/soon-staking/soon-staking.module.ts new file mode 100644 index 0000000..fd197af --- /dev/null +++ b/src/app/pages/soon-staking/soon-staking.module.ts @@ -0,0 +1,43 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; +import { IconModule } from '@components/icon/icon.module'; +import { TokenStakeModule } from '@components/token/components/token-stake/token-stake.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { LayoutModule } from '@shell/ui/layout/layout.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { StakingPage } from './pages/staking/staking.page'; +import { SoonStakingRoutingModule } from './soon-staking-routing.module'; + +@NgModule({ + declarations: [StakingPage], + imports: [ + CommonModule, + SoonStakingRoutingModule, + NzCardModule, + RouterModule, + LayoutModule, + IconModule, + NzFormModule, + NzAvatarModule, + NzInputModule, + NzButtonModule, + NzToolTipModule, + FormsModule, + NzSelectModule, + ReactiveFormsModule, + FormatTokenModule, + NzTableModule, + TokenStakeModule, + ], + providers: [], +}) +export class SoonStakingModule {} diff --git a/src/app/pages/space/pages/awards/awards.page.html b/src/app/pages/space/pages/awards/awards.page.html new file mode 100644 index 0000000..c2a50bf --- /dev/null +++ b/src/app/pages/space/pages/awards/awards.page.html @@ -0,0 +1,75 @@ +
    +
    +
    +
    + + + {{ tag.label }} + + + + + + + + +
    + + +
    + + + + +
    + + No Awards + +
    +
    + + +
    +
    diff --git a/src/app/pages/space/pages/awards/awards.page.less b/src/app/pages/space/pages/awards/awards.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/space/pages/awards/awards.page.ts b/src/app/pages/space/pages/awards/awards.page.ts new file mode 100644 index 0000000..340b996 --- /dev/null +++ b/src/app/pages/space/pages/awards/awards.page.ts @@ -0,0 +1,125 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { DeviceService } from '@core/services/device'; +import { SeoService } from '@core/services/seo'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { Award } from '@soonaverse/interfaces'; +import { AwardFilter } from '@soonaverse/lib'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { DataService } from './../../services/data.service'; + +@UntilDestroy() +@Component({ + selector: 'wen-awards', + templateUrl: './awards.page.html', + styleUrls: ['./awards.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AwardsPage implements OnInit, OnDestroy { + public spaceId?: string; + public selectedListControl: FormControl = new FormControl(AwardFilter.ACTIVE); + public hotTags: { value: AwardFilter; label: string }[] = [ + { value: AwardFilter.DRAFT, label: $localize`Pending` }, + { value: AwardFilter.ACTIVE, label: $localize`Active` }, + { value: AwardFilter.COMPLETED, label: $localize`Completed` }, + { value: AwardFilter.REJECTED, label: $localize`Rejected` }, + ]; + private subscriptions$: Subscription[] = []; + + constructor( + private router: Router, + private route: ActivatedRoute, + private cd: ChangeDetectorRef, + private seo: SeoService, + public data: DataService, + public deviceService: DeviceService, + ) {} + + public ngOnInit(): void { + this.route.parent?.params.subscribe((obj) => { + const id: string | undefined = obj?.[ROUTER_UTILS.config.space.space.replace(':', '')]; + if (id) { + this.cancelSubscriptions(); + this.spaceId = id; + + this.seo.setTags( + $localize`Space - Awards`, + $localize`Space's awards`, + this.data.space$.value?.bannerUrl, + ); + } else { + this.router.navigate([ROUTER_UTILS.config.errorResponse.notFound]); + } + }); + + this.selectedListControl.valueChanges.pipe(untilDestroyed(this)).subscribe((val) => { + if (this.spaceId && val === AwardFilter.COMPLETED) { + this.data.listenToCompletedAwards(this.spaceId); + } else if (this.spaceId && val === AwardFilter.REJECTED) { + this.data.listenToRejectedAwards(this.spaceId); + } else if (this.spaceId && val === AwardFilter.DRAFT) { + this.data.listenToDraftAwards(this.spaceId); + } + this.cd.markForCheck(); + }); + } + + public getList(): BehaviorSubject { + if (this.selectedListControl.value === this.filterOptions.ACTIVE) { + return this.data.awardsActive$; + } else if (this.selectedListControl.value === this.filterOptions.DRAFT) { + return this.data.awardsDraft$; + } else if (this.selectedListControl.value === this.filterOptions.REJECTED) { + return this.data.awardsRejected$; + } else { + return this.data.awardsCompleted$; + } + } + + public getTitle(): string { + if (this.selectedListControl.value === this.filterOptions.ACTIVE) { + return 'Active'; + } else { + return 'Completed'; + } + } + + public handleFilterChange(filter: AwardFilter): void { + this.selectedListControl.setValue(filter); + this.cd.markForCheck(); + } + + public get filterOptions(): typeof AwardFilter { + return AwardFilter; + } + + public trackByUid(index: number, item: Award) { + return item.uid; + } + + public create(): void { + this.router.navigate([ + '/' + ROUTER_UTILS.config.award.root, + ROUTER_UTILS.config.award.newAward, + { space: this.spaceId }, + ]); + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/space/pages/collections/collections.page.html b/src/app/pages/space/pages/collections/collections.page.html new file mode 100644 index 0000000..3fe9ebc --- /dev/null +++ b/src/app/pages/space/pages/collections/collections.page.html @@ -0,0 +1,81 @@ +
    +
    +
    +
    + + + {{ tag.label }} + + + + + + + + +
    + + + + +
    + + + + +
    + + No Collections + +
    +
    + + +
    +
    diff --git a/src/app/pages/space/pages/collections/collections.page.less b/src/app/pages/space/pages/collections/collections.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/space/pages/collections/collections.page.ts b/src/app/pages/space/pages/collections/collections.page.ts new file mode 100644 index 0000000..3fb4f69 --- /dev/null +++ b/src/app/pages/space/pages/collections/collections.page.ts @@ -0,0 +1,115 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { CollectionFilter } from '@api/collection.api'; +import { DeviceService } from '@core/services/device'; +import { SeoService } from '@core/services/seo'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/space/services/data.service'; +import { Collection } from '@soonaverse/interfaces'; +import { BehaviorSubject, Subscription } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-collections', + templateUrl: './collections.page.html', + styleUrls: ['./collections.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CollectionsPage implements OnInit, OnDestroy { + public spaceId?: string; + public selectedListControl: FormControl = new FormControl(CollectionFilter.AVAILABLE); + public hotTags: { value: CollectionFilter; label: string }[] = [ + { value: CollectionFilter.PENDING, label: $localize`Pending` }, + { value: CollectionFilter.AVAILABLE, label: $localize`Available` }, + { value: CollectionFilter.REJECTED, label: $localize`Rejected` }, + ]; + private subscriptions$: Subscription[] = []; + + constructor( + public data: DataService, + public deviceService: DeviceService, + private cd: ChangeDetectorRef, + private router: Router, + private route: ActivatedRoute, + private seo: SeoService, + ) {} + + public ngOnInit(): void { + this.selectedListControl.valueChanges.pipe(untilDestroyed(this)).subscribe((val) => { + if (this.spaceId && val === CollectionFilter.REJECTED) { + this.data.listenToRejectedCollections(this.spaceId); + } else if (this.spaceId && val === CollectionFilter.AVAILABLE) { + this.data.listenToAvailableCollections(this.spaceId); + } else if (this.spaceId && val === CollectionFilter.PENDING) { + this.data.listenToPendingCollections(this.spaceId); + } + this.cd.markForCheck(); + }); + + this.route.parent?.params.subscribe((obj) => { + const id: string | undefined = obj?.[ROUTER_UTILS.config.space.space.replace(':', '')]; + if (id) { + this.cancelSubscriptions(); + this.spaceId = id; + this.selectedListControl.setValue(CollectionFilter.AVAILABLE); + + this.seo.setTags( + $localize`Space - Collections`, + $localize`Space's collections`, + this.data.space$.value?.bannerUrl, + ); + } else { + this.router.navigate([ROUTER_UTILS.config.errorResponse.notFound]); + } + }); + } + + public handleFilterChange(filter: CollectionFilter): void { + this.selectedListControl.setValue(filter); + this.cd.markForCheck(); + } + + public get filterOptions(): typeof CollectionFilter { + return CollectionFilter; + } + + public create(): void { + this.router.navigate([ + '/' + ROUTER_UTILS.config.collection.root, + ROUTER_UTILS.config.collection.new, + { space: this.spaceId }, + ]); + } + + public getList(): BehaviorSubject { + if (this.selectedListControl.value === this.filterOptions.REJECTED) { + return this.data.rejectedCollections$; + } else if (this.selectedListControl.value === this.filterOptions.AVAILABLE) { + return this.data.availableCollections$; + } else { + return this.data.pendingCollections$; + } + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public trackByUid(index: number, item: Collection) { + return item.uid; + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/space/pages/manage/manage.page.html b/src/app/pages/space/pages/manage/manage.page.html new file mode 100644 index 0000000..f3bd211 --- /dev/null +++ b/src/app/pages/space/pages/manage/manage.page.html @@ -0,0 +1,175 @@ + + + + + diff --git a/src/app/pages/space/pages/manage/manage.page.less b/src/app/pages/space/pages/manage/manage.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/space/pages/manage/manage.page.ts b/src/app/pages/space/pages/manage/manage.page.ts new file mode 100644 index 0000000..8be7cad --- /dev/null +++ b/src/app/pages/space/pages/manage/manage.page.ts @@ -0,0 +1,59 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { DataService, SpaceAction } from '@pages/space/services/data.service'; +import { Subscription } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-manage', + templateUrl: './manage.page.html', + styleUrls: ['./manage.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ManagePage implements OnDestroy { + private subscriptions$: Subscription[] = []; + public isAuditOneModalOpen = false; + public isImportTokenVisible = false; + constructor( + public data: DataService, + public deviceService: DeviceService, + private cd: ChangeDetectorRef, + ) {} + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public openAuditOneModal() { + this.isAuditOneModalOpen = true; + this.cd.markForCheck(); + } + + public closeAuditOneModal(): void { + this.isAuditOneModalOpen = false; + this.cd.markForCheck(); + } + + public manageAddresses(): void { + this.data.triggerAction$.next(SpaceAction.MANAGE_ADDRESSES); + } + + public exportCurrentMembers(): void { + this.data.triggerAction$.next(SpaceAction.EXPORT_CURRENT_MEMBERS); + } + + public stakingRewardSchedule(): void { + this.data.triggerAction$.next(SpaceAction.STAKING_REWARD_SCHEDULE); + } + + public exportCurrentStakers(): void { + this.data.triggerAction$.next(SpaceAction.EXPORT_CURRENT_STAKERS); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/space/pages/members/members.page.html b/src/app/pages/space/pages/members/members.page.html new file mode 100644 index 0000000..577ecfe --- /dev/null +++ b/src/app/pages/space/pages/members/members.page.html @@ -0,0 +1,196 @@ +
    +
    +
    +
    + + + Active + + + {{'Pending' + (data.getPendingMembersCount(data.pendingMembers$ | async) > 0 ? '*' : + '')}} + + + Blocked + + + + + + + + + + +
    + + + + + + + + + + + +
    + + + + + + + +
    + + No Members + +
    +
    + + + + + + + + + +
      + + +
    • + Remove Guardian +
    • +
    • + Make Guardian +
    • +
      +
    • + Block Member +
    • +
    • + Accept Member +
    • +
    • + Unblock Member +
    • +
    +
    +
    +
    +
    diff --git a/src/app/pages/space/pages/members/members.page.less b/src/app/pages/space/pages/members/members.page.less new file mode 100644 index 0000000..c42bf0d --- /dev/null +++ b/src/app/pages/space/pages/members/members.page.less @@ -0,0 +1,41 @@ +.rotate-180 { + transform: rotate(180deg); +} + +@input-radius: 2.125rem; + +// Note: Haven't find better (and working) way of overriding these nested styles than +// using deprecated ::ng-deep. Change it if you know better approach. +nz-input-group ::ng-deep { + .ant-input-group-addon:last-child { + @apply bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark; + border-top-right-radius: @input-radius; + border-bottom-right-radius: @input-radius; + } + + .ant-input-group .ant-input-affix-wrapper { + .ant-input-prefix { + @apply mr-3; + } + + &:not(:last-child) { + @apply border-0 h-14 pl-4; + border-top-left-radius: @input-radius; + border-bottom-left-radius: @input-radius; + } + + &:hover { + // there is a `border-right-width: 1px !important` style inside ng-zorro, + // thus we need important too :/ + border-right-width: 0 !important; + } + } +} + +.additional-btn-list { + @apply p-3 space-y-1 !important; + li { + @apply px-3 py-2; + @apply text-sm rounded-xl text-center block !important; + } +} diff --git a/src/app/pages/space/pages/members/members.page.ts b/src/app/pages/space/pages/members/members.page.ts new file mode 100644 index 0000000..ac6a308 --- /dev/null +++ b/src/app/pages/space/pages/members/members.page.ts @@ -0,0 +1,302 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { SeoService } from '@core/services/seo'; +import { ThemeList, ThemeService } from '@core/services/theme'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { COL, GLOBAL_DEBOUNCE_TIME, Member } from '@soonaverse/interfaces'; +import { BehaviorSubject, debounceTime, first, from, skip, Subscription } from 'rxjs'; +import { SpaceApi } from './../../../../@api/space.api'; +import { CacheService } from './../../../../@core/services/cache/cache.service'; +import { NotificationService } from './../../../../@core/services/notification/notification.service'; +import { DataService, MemberFilterOptions } from './../../services/data.service'; + +@UntilDestroy() +@Component({ + selector: 'wen-members', + templateUrl: './members.page.html', + styleUrls: ['./members.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MembersPage implements OnInit, OnDestroy { + public spaceId?: string; + public selectedListControl: FormControl = new FormControl(MemberFilterOptions.ACTIVE); + public search$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public filterControl: FormControl = new FormControl(undefined); + public overTenRecords = false; + public static DEBOUNCE_TIME = GLOBAL_DEBOUNCE_TIME; + public memberPath = ROUTER_UTILS.config.member.root; + private subscriptions$: Subscription[] = []; + + constructor( + private auth: AuthService, + private spaceApi: SpaceApi, + public readonly algoliaService: AlgoliaService, + private notification: NotificationService, + private route: ActivatedRoute, + private router: Router, + private cd: ChangeDetectorRef, + private seo: SeoService, + public cache: CacheService, + public data: DataService, + public deviceService: DeviceService, + public themeService: ThemeService, + ) { + // none. + } + + public get filterOptions(): typeof MemberFilterOptions { + return MemberFilterOptions; + } + + public get themes(): typeof ThemeList { + return ThemeList; + } + + public ngOnInit(): void { + this.route.parent?.params.subscribe((obj) => { + const id: string | undefined = obj?.[ROUTER_UTILS.config.space.space.replace(':', '')]; + if (id) { + this.cancelSubscriptions(); + this.spaceId = id; + + this.seo.setTags( + $localize`Space - Members`, + $localize`Space's members`, + this.data.space$.value?.bannerUrl, + ); + } else { + this.router.navigate([ROUTER_UTILS.config.errorResponse.notFound]); + } + }); + + this.data.guardians$.pipe(skip(1), untilDestroyed(this)).subscribe(() => { + // Re-sync members. + this.data.members$.next(this.data.members$.value); + }); + + this.selectedListControl.valueChanges.pipe(untilDestroyed(this)).subscribe(() => { + if (this.search$.value && this.search$.value.length > 0) { + this.search$.next(this.search$.value); + } else { + this.onScroll(); + } + this.cd.markForCheck(); + }); + + this.search$.pipe(skip(1), untilDestroyed(this)).subscribe(async (val) => { + // We need reset old values. + this.data.resetMembersDataStore(); + this.data.resetMembersSubjects(); + this.overTenRecords = false; + if (val && val.length > 0) { + from( + this.algoliaService.searchClient + .initIndex(COL.MEMBER) + .search(val || '', { length: 5, offset: 0 }), + ) + .pipe(first()) + .subscribe((r) => { + const ids: string[] = r.hits.map((r) => { + const member = r as unknown as Member; + return member.uid; + }); + + // Top 10 records only supported + this.overTenRecords = ids.length > 10; + this.onScroll(ids.slice(0, 10)); + }); + } else { + // Show normal list again. + this.onScroll(); + } + }); + + this.filterControl.valueChanges + .pipe(debounceTime(MembersPage.DEBOUNCE_TIME)) + .subscribe(this.search$); + + // Load initial list. + this.onScroll(); + } + + public handleFilterChange(filter: MemberFilterOptions): void { + this.selectedListControl.setValue(filter); + this.cd.markForCheck(); + } + + public memberIsGuardian(memberId: string): boolean { + if (!this.data.guardians$.value) { + return false; + } + + return this.data.guardians$.value.filter((e) => e.uid === memberId).length > 0; + } + + public getList(): BehaviorSubject { + if (this.selectedListControl.value === this.filterOptions.PENDING) { + return this.data.pendingMembers$; + } else if (this.selectedListControl.value === this.filterOptions.BLOCKED) { + return this.data.blockedMembers$; + } else { + return this.data.members$; + } + } + + public getTitle(): string { + if (this.selectedListControl.value === this.filterOptions.PENDING) { + return 'Pending'; + } else if (this.selectedListControl.value === this.filterOptions.BLOCKED) { + return 'Blocked'; + } else { + return 'Active'; + } + } + + public isActiveList(): boolean { + return this.selectedListControl.value === MemberFilterOptions.ACTIVE; + } + + public isBlockedList(): boolean { + return this.selectedListControl.value === MemberFilterOptions.BLOCKED; + } + + public isPendingList(): boolean { + return this.selectedListControl.value === MemberFilterOptions.PENDING; + } + + public onScroll(searchIds?: string[]): void { + if (!this.spaceId) { + return; + } + + this.data.onMemberScroll(this.spaceId, this.selectedListControl.value, searchIds); + } + + public async setGuardian(memberId: string): Promise { + if (!this.spaceId) { + return; + } + + await this.auth.sign( + { + uid: this.spaceId, + member: memberId, + }, + (sc, finish) => { + this.notification + .processRequest(this.spaceApi.setGuardian(sc), 'Member made a guardian.', finish) + .subscribe((val) => { + this.router.navigate([ROUTER_UTILS.config.proposal.root, val?.uid]); + }); + }, + ); + } + + public async removeGuardian(memberId: string): Promise { + if (!this.spaceId) { + return; + } + + await this.auth.sign( + { + uid: this.spaceId, + member: memberId, + }, + (sc, finish) => { + this.notification + .processRequest(this.spaceApi.removeGuardian(sc), 'Member removed as guardian.', finish) + .subscribe((val) => { + this.router.navigate([ROUTER_UTILS.config.proposal.root, val?.uid]); + }); + }, + ); + } + + public async blockMember(memberId: string): Promise { + if (!this.spaceId) { + return; + } + + await this.auth.sign( + { + uid: this.spaceId, + member: memberId, + }, + (sc, finish) => { + this.notification + .processRequest(this.spaceApi.blockMember(sc), 'Member blocked.', finish) + .subscribe(() => { + // none. + }); + }, + ); + } + + public async acceptMember(memberId: string): Promise { + if (!this.spaceId) { + return; + } + + await this.auth.sign( + { + uid: this.spaceId, + member: memberId, + }, + (sc, finish) => { + this.notification + .processRequest(this.spaceApi.acceptMember(sc), 'Member accepted.', finish) + .subscribe(() => { + // none. + }); + }, + ); + } + + public async unblockMember(memberId: string): Promise { + if (!this.spaceId) { + return; + } + + await this.auth.sign( + { + uid: this.spaceId, + member: memberId, + }, + (sc, finish) => { + this.notification + .processRequest(this.spaceApi.unblockMember(sc), 'Member unblocked.', finish) + .subscribe(() => { + // none. + }); + }, + ); + } + + public trackByUid(index: number, item: Member) { + return item.uid; + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.search$.next(undefined); + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/space/pages/overview/overview.page.html b/src/app/pages/space/pages/overview/overview.page.html new file mode 100644 index 0000000..c3f4cfe --- /dev/null +++ b/src/app/pages/space/pages/overview/overview.page.html @@ -0,0 +1,14 @@ +
    +
    +

    +
    + +
    +

    Upcoming Sale

    + +

    Live Token Sale

    +
    + + +
    +
    diff --git a/src/app/pages/space/pages/overview/overview.page.less b/src/app/pages/space/pages/overview/overview.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/space/pages/overview/overview.page.ts b/src/app/pages/space/pages/overview/overview.page.ts new file mode 100644 index 0000000..dfdce01 --- /dev/null +++ b/src/app/pages/space/pages/overview/overview.page.ts @@ -0,0 +1,94 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { SeoService } from '@core/services/seo'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/space/services/data.service'; +import { Award, Proposal, Token, TokenStatus } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { Subscription } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-overview', + templateUrl: './overview.page.html', + styleUrls: ['./overview.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class OverviewPage implements OnInit, OnDestroy { + public spaceId?: string; + public filteredToken?: Token | null; + private subscriptions$: Subscription[] = []; + + constructor( + public data: DataService, + private route: ActivatedRoute, + private router: Router, + private cd: ChangeDetectorRef, + private seo: SeoService, + ) {} + + public ngOnInit(): void { + this.route.parent?.params.subscribe((obj) => { + const id: string | undefined = obj?.[ROUTER_UTILS.config.space.space.replace(':', '')]; + if (id) { + this.cancelSubscriptions(); + this.spaceId = id; + } else { + this.router.navigate([ROUTER_UTILS.config.errorResponse.notFound]); + } + }); + + this.data.token$.pipe(untilDestroyed(this)).subscribe((token: Token | undefined) => { + this.filteredToken = + token?.saleStartDate && token?.status === TokenStatus.AVAILABLE ? token : null; + this.cd.markForCheck(); + }); + + this.data.space$.pipe(untilDestroyed(this)).subscribe((s) => { + this.seo.setTags($localize`Space -` + ' ' + s?.name, s?.about, s?.bannerUrl); + }); + } + + public available(token?: Token): boolean { + return ( + !!token && + !!token.saleStartDate && + dayjs(token.saleStartDate?.toDate()) + .add(token.saleLength || 0, 'ms') + .isAfter(dayjs()) && + token?.status === TokenStatus.AVAILABLE && + token?.approved + ); + } + + public isBeforeSale(token?: Token): boolean { + return ( + !!token && + !!token.saleStartDate && + dayjs(token.saleStartDate?.toDate()).isAfter(dayjs()) && + token?.status === TokenStatus.AVAILABLE && + token?.approved + ); + } + + public trackByUid(index: number, item: Award | Proposal) { + return item.uid; + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/space/pages/proposals/proposals.page.html b/src/app/pages/space/pages/proposals/proposals.page.html new file mode 100644 index 0000000..efe0250 --- /dev/null +++ b/src/app/pages/space/pages/proposals/proposals.page.html @@ -0,0 +1,75 @@ +
    +
    +
    +
    + + + {{ tag.label }} + + + + + + + + +
    + + +
    + + + + +
    + + No Proposals + +
    +
    + + + +
    +
    diff --git a/src/app/pages/space/pages/proposals/proposals.page.less b/src/app/pages/space/pages/proposals/proposals.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/space/pages/proposals/proposals.page.ts b/src/app/pages/space/pages/proposals/proposals.page.ts new file mode 100644 index 0000000..eb14e7d --- /dev/null +++ b/src/app/pages/space/pages/proposals/proposals.page.ts @@ -0,0 +1,129 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { DeviceService } from '@core/services/device'; +import { SeoService } from '@core/services/seo'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { Proposal } from '@soonaverse/interfaces'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { ProposalFilter } from './../../../../@api/proposal.api'; +import { DataService } from './../../services/data.service'; + +@UntilDestroy() +@Component({ + selector: 'wen-proposals', + templateUrl: './proposals.page.html', + styleUrls: ['./proposals.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ProposalsPage implements OnInit, OnDestroy { + public spaceId?: string; + public selectedListControl: FormControl = new FormControl(ProposalFilter.ACTIVE); + public hotTags: { value: ProposalFilter; label: string }[] = [ + { value: ProposalFilter.DRAFT, label: $localize`Pending` }, + { value: ProposalFilter.ACTIVE, label: $localize`Active` }, + { value: ProposalFilter.COMPLETED, label: $localize`Completed` }, + { value: ProposalFilter.REJECTED, label: $localize`Rejected` }, + ]; + private subscriptions$: Subscription[] = []; + + constructor( + private router: Router, + private cd: ChangeDetectorRef, + private route: ActivatedRoute, + private seo: SeoService, + public data: DataService, + public deviceService: DeviceService, + ) {} + + public ngOnInit(): void { + this.route.parent?.params.subscribe((obj) => { + const id: string | undefined = obj?.[ROUTER_UTILS.config.space.space.replace(':', '')]; + if (id) { + this.cancelSubscriptions(); + this.spaceId = id; + + this.seo.setTags( + $localize`Space - Proposals`, + $localize`Space's proposals`, + this.data.space$.value?.bannerUrl, + ); + } else { + this.router.navigate([ROUTER_UTILS.config.errorResponse.notFound]); + } + }); + + this.data.guardians$.pipe(untilDestroyed(this)).subscribe(() => { + this.cd.markForCheck(); + }); + + this.selectedListControl.valueChanges.pipe(untilDestroyed(this)).subscribe((val) => { + if (this.spaceId && val === ProposalFilter.COMPLETED) { + this.data.listenToCompletedProposals(this.spaceId); + } else if (this.spaceId && val === ProposalFilter.DRAFT) { + this.data.listenToDraftProposals(this.spaceId); + } else if (this.spaceId && val === ProposalFilter.REJECTED) { + this.data.listenToRejectedProposals(this.spaceId); + } + this.cd.markForCheck(); + }); + } + + public getList(): BehaviorSubject { + if (this.selectedListControl.value === this.filterOptions.ACTIVE) { + return this.data.proposalsActive$; + } else if (this.selectedListControl.value === this.filterOptions.DRAFT) { + return this.data.proposalsDraft$; + } else if (this.selectedListControl.value === this.filterOptions.REJECTED) { + return this.data.proposalsRejected$; + } else { + return this.data.proposalsCompleted$; + } + } + + public getTitle(): string { + if (this.selectedListControl.value === this.filterOptions.ACTIVE) { + return 'Active'; + } else { + return 'Completed'; + } + } + + public get filterOptions(): typeof ProposalFilter { + return ProposalFilter; + } + + public create(): void { + this.router.navigate([ + '/' + ROUTER_UTILS.config.proposal.root, + ROUTER_UTILS.config.proposal.newProposal, + { space: this.spaceId }, + ]); + } + + public handleFilterChange(filter: ProposalFilter): void { + this.selectedListControl.setValue(filter); + this.cd.markForCheck(); + } + + public trackByUid(index: number, item: Proposal) { + return item.uid; + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/space/pages/space/space-about/space-about.component.html b/src/app/pages/space/pages/space/space-about/space-about.component.html new file mode 100644 index 0000000..c8f9b8b --- /dev/null +++ b/src/app/pages/space/pages/space/space-about/space-about.component.html @@ -0,0 +1,344 @@ + +
    + + +

    {{ (data.space$ | async)?.name }}

    +
    + + + +
    + {{ (data.space$ | async)?.totalMembers }} members + + {{ '(' + (data.space$ | async)?.totalPendingMembers + ' pending)' }} + +
    +
    +
    + + + + + + + + + + + + Token Info + + + + + + + + + + + + + + + + + +
    + + + Open to join instantly + Requires approval to join + + + Requires + {{ + ((data.space$ | async)?.minStakedValue + | formatToken : (data.space$ | async)?.uid : true : false : 2 + | async) + + ' ' + + (data.token$ | async)?.symbol + }} + staked value to join + + +
    +
    + + + + + + + + +
    + + +
    + + + @{{ g.name || g.uid | truncate : [16] }} +
    +
    +
    + + + + +
    +
    +
    Space's Wallet Addresses
    +
    + + Manage + + +
    + + +
    + +
    + +
    + + + + diff --git a/src/app/pages/space/pages/space/space-about/space-about.component.less b/src/app/pages/space/pages/space/space-about/space-about.component.less new file mode 100644 index 0000000..df69a3f --- /dev/null +++ b/src/app/pages/space/pages/space/space-about/space-about.component.less @@ -0,0 +1,7 @@ +.wen-space-links { + @apply w-max flex items-center px-0 space-x-3 text-sm font-medium text-foregrounds-primary dark:text-foregrounds-primary-dark hover:text-buttons-primary-on-hover dark:text-buttons-primary-on-hover-dark truncate; + + *:first-child { + @apply text-icons-secondary dark:text-icons-secondary-dark; + } +} diff --git a/src/app/pages/space/pages/space/space-about/space-about.component.ts b/src/app/pages/space/pages/space/space-about/space-about.component.ts new file mode 100644 index 0000000..6aa2a66 --- /dev/null +++ b/src/app/pages/space/pages/space/space-about/space-about.component.ts @@ -0,0 +1,167 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UnitsService } from '@core/services/units'; +import { download } from '@core/utils/tools.utils'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { HelperService } from '@pages/collection/services/helper.service'; +import { DataService, SpaceAction } from '@pages/space/services/data.service'; +import { + FILE_SIZES, + Member, + SOON_SPACE, + SOON_SPACE_TEST, + Space, + StakeType, + getDefDecimalIfNotSet, +} from '@soonaverse/interfaces'; +import Papa from 'papaparse'; +import { Observable, Subscription, combineLatest, first, map, skip } from 'rxjs'; +import { SpaceApi } from './../../../../../@api/space.api'; +import { EntityType } from './../../../../../components/wallet-address/wallet-address.component'; + +@UntilDestroy() +@Component({ + selector: 'wen-space-about', + templateUrl: './space-about.component.html', + styleUrls: ['./space-about.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SpaceAboutComponent implements OnInit, OnDestroy { + @Input() avatarUrl?: string; + @Output() wenOnLeave = new EventEmitter(); + public isManageAddressesOpen = false; + public exportingMembers = false; + public openTokenStake = false; + public openSpaceClaim = false; + public amount?: number = undefined; + private spacesSubscription?: Subscription; + + constructor( + public deviceService: DeviceService, + public unitsService: UnitsService, + public data: DataService, + public previewImageService: PreviewImageService, + public auth: AuthService, + public helper: HelperService, + private spaceApi: SpaceApi, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + this.data.triggerAction$.pipe(skip(1), untilDestroyed(this)).subscribe((s) => { + if (s === SpaceAction.EXPORT_CURRENT_MEMBERS) { + this.exportMembers(); + } else if (s === SpaceAction.MANAGE_ADDRESSES) { + this.isManageAddressesOpen = true; + this.cd.markForCheck(); + } + }); + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + public openStakeModal(amount?: number): void { + this.amount = amount + ? amount / Math.pow(10, getDefDecimalIfNotSet(this.data.token$.value?.decimals)) + : undefined; + this.openTokenStake = true; + this.cd.markForCheck(); + } + + public get walletAddressEntities(): typeof EntityType { + return EntityType; + } + + public trackByUid(index: number, item: Member) { + return item.uid; + } + + public getShareUrl(space?: Space | null): string { + return space?.wenUrl || window?.location.href; + } + + public loggedInUserStake(): Observable { + return this.data.tokenDistribution$.pipe( + map((v) => { + return ( + (v?.stakes?.[StakeType.DYNAMIC]?.amount || 0) + + (v?.stakes?.[StakeType.STATIC]?.amount || 0) + ); + }), + ); + } + + public stakePrc(): Observable { + return combineLatest([this.data.token$, this.data.tokenStats$]).pipe( + map(([token, stats]) => { + const totalStaked = + (stats?.stakes?.[StakeType.DYNAMIC]?.amount || 0) + + (stats?.stakes?.[StakeType.STATIC]?.amount || 0); + return totalStaked / (token?.totalSupply || 0); + }), + ); + } + + public stakeTotal(): Observable { + return this.data.tokenStats$.pipe( + map((stats) => { + return ( + (stats?.stakes?.[StakeType.DYNAMIC]?.stakingMembersCount || 0) + + (stats?.stakes?.[StakeType.STATIC]?.stakingMembersCount || 0) + ); + }), + ); + } + + public exportMembers(): void { + if (this.exportingMembers) return; + this.exportingMembers = true; + + const space = this.data.space$.value; + if (!space?.uid) return; + + this.spaceApi + .listenMembersWithoutData(space?.uid, undefined) + .pipe(skip(1), first()) + .subscribe((members) => { + this.exportingMembers = false; + const fields = ['', 'address']; + const csv = Papa.unparse({ + fields, + data: members.map((m) => [m.uid]), + }); + + const filteredSpaceName = space?.name?.toLowerCase().replace(/[^a-zA-Z0-9-_]/g, ''); + download( + `data:text/csv;charset=utf-8${csv}`, + `soonaverse_${filteredSpaceName}_members.csv`, + ); + this.cd.markForCheck(); + }); + } + + public isSoonSpace(): Observable { + return this.data.space$.pipe( + map((s) => { + return s?.uid === (environment.production ? SOON_SPACE : SOON_SPACE_TEST); + }), + ); + } + + public ngOnDestroy(): void { + this.spacesSubscription?.unsubscribe(); + } +} diff --git a/src/app/pages/space/pages/space/space-about/space-about.module.ts b/src/app/pages/space/pages/space/space-about/space-about.module.ts new file mode 100644 index 0000000..809445f --- /dev/null +++ b/src/app/pages/space/pages/space/space-about/space-about.module.ts @@ -0,0 +1,65 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; +import { DescriptionModule } from '@components/description/description.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ShareModule } from '@components/share/share.module'; +import { SpaceClaimModule } from '@components/space/components/space-claim/space-claim.module'; +import { TokenClaimModule } from '@components/token/components/token-claim/token-claim.module'; +import { TokenInfoDescriptionModule } from '@components/token/components/token-info/token-info-description.module'; +import { TokenStakeModule } from '@components/token/components/token-stake/token-stake.module'; +import { WalletAddressModule } from '@components/wallet-address/wallet-address.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzInputNumberModule } from 'ng-zorro-antd/input-number'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzNotificationModule } from 'ng-zorro-antd/notification'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { AuditOneModule } from 'src/app/service-modules/audit-one/audit-one.module'; +import { MarkDownModule } from '../../../../../@core/pipes/markdown/markdown.module'; +import { SpaceAboutComponent } from './space-about.component'; + +@NgModule({ + declarations: [SpaceAboutComponent], + imports: [ + CommonModule, + MarkDownModule, + NzCardModule, + IconModule, + NzAvatarModule, + FormatTokenModule, + RouterModule, + NzTagModule, + TruncateModule, + ResizeAvatarModule, + NzButtonModule, + NzModalModule, + NzFormModule, + NzSelectModule, + AuditOneModule, + NzToolTipModule, + FormsModule, + ReactiveFormsModule, + NzInputNumberModule, + NzNotificationModule, + NzDrawerModule, + WalletAddressModule, + ShareModule, + DescriptionModule, + TokenStakeModule, + TokenClaimModule, + SpaceClaimModule, + TokenInfoDescriptionModule, + ], + exports: [SpaceAboutComponent], +}) +export class SpaceAboutModule {} diff --git a/src/app/pages/space/pages/space/space.page.html b/src/app/pages/space/pages/space/space.page.html new file mode 100644 index 0000000..c7fa968 --- /dev/null +++ b/src/app/pages/space/pages/space/space.page.html @@ -0,0 +1,200 @@ + + + + + + +
    + +
    + +
    + + + + + +
    +

    {{ (data.space$ | async)!.name }}

    + +
    + + + +
    + +
    +
    + + + + +
    + +
    + +
    +
    +
    + + + + + + +
    + +
    + + +
    +
    + + +
    + + + +
    +
    +
    + + diff --git a/src/app/pages/space/pages/space/space.page.less b/src/app/pages/space/pages/space/space.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/space/pages/space/space.page.ts b/src/app/pages/space/pages/space/space.page.ts new file mode 100644 index 0000000..b585d16 --- /dev/null +++ b/src/app/pages/space/pages/space/space.page.ts @@ -0,0 +1,273 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { FileApi } from '@api/file.api'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { RouterService } from '@core/services/router'; +import { UnitsService } from '@core/services/units'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { download } from '@core/utils/tools.utils'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService, SpaceAction } from '@pages/space/services/data.service'; +import { + FILE_SIZES, + Member, + SOON_SPACE, + SOON_SPACE_TEST, + Space, + StakeType, + TokenDistribution, +} from '@soonaverse/interfaces'; +import Papa from 'papaparse'; +import { BehaviorSubject, combineLatest, debounceTime, map, Observable, skip } from 'rxjs'; +import { SpaceApi } from './../../../../@api/space.api'; +import { NavigationService } from './../../../../@core/services/navigation/navigation.service'; +import { NotificationService } from './../../../../@core/services/notification/notification.service'; + +@UntilDestroy() +@Component({ + selector: 'wen-space', + templateUrl: './space.page.html', + styleUrls: ['./space.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SpacePage implements OnInit, OnDestroy { + public sections = [ + { route: 'overview', label: $localize`About` }, + { route: 'collections', label: $localize`Collections` }, + { route: 'proposals', label: $localize`Proposals` }, + { route: 'awards', label: $localize`Awards` }, + { route: 'members', label: $localize`Members` }, + ]; + public isAboutSpaceVisible = false; + public exportingCurrentStakers = false; + public isRewardScheduleVisible = false; + private guardianSection = { route: 'manage', label: $localize`Manage` }; + constructor( + private auth: AuthService, + private spaceApi: SpaceApi, + private tokenApi: TokenApi, + private route: ActivatedRoute, + private notification: NotificationService, + private router: Router, + private cd: ChangeDetectorRef, + public data: DataService, + public unitsService: UnitsService, + public nav: NavigationService, + public deviceService: DeviceService, + public routerService: RouterService, + ) { + // none. + } + + public ngOnInit(): void { + this.deviceService.viewWithSearch$.next(false); + this.route.params?.pipe(untilDestroyed(this)).subscribe((obj) => { + const id: string | undefined = obj?.[ROUTER_UTILS.config.space.space.replace(':', '')]; + if (id) { + this.data.listenToSpace(id); + this.data.listenToTokens(id); + } else { + this.notFound(); + } + }); + + this.data.triggerAction$.pipe(skip(1), untilDestroyed(this)).subscribe((s) => { + if (s === SpaceAction.EXPORT_CURRENT_STAKERS && this.data.token$.value?.uid) { + this.exportCurrentStakers(this.data.token$.value?.uid); + } else if (s === SpaceAction.STAKING_REWARD_SCHEDULE) { + this.isRewardScheduleVisible = true; + this.cd.markForCheck(); + } + }); + + // If we're unable to find the space we take the user out as well. + this.data.space$.pipe(skip(1), untilDestroyed(this)).subscribe((obj) => { + if (!obj) { + this.notFound(); + } + }); + + this.data.isGuardianWithinSpace$.pipe(untilDestroyed(this)).subscribe((b) => { + if (b && this.sections.indexOf(this.guardianSection) === -1) { + this.sections.push(this.guardianSection); + this.sections = [...this.sections]; + this.cd.markForCheck(); + } else if (!b && this.sections.indexOf(this.guardianSection) > -1) { + this.sections.splice(this.sections.indexOf(this.guardianSection), 1); + this.sections = [...this.sections]; + this.cd.markForCheck(); + } + }); + + let loadedListenToMembers = false; + const subs = this.data.token$.pipe(skip(1), untilDestroyed(this)).subscribe((obj) => { + if (obj) { + this.data.listenToTokenStatus(obj.uid); + // TODO Deal with log in. + if (this.auth.member$.value?.uid) { + loadedListenToMembers = true; + this.data.listenToMembersDistribution(obj.uid, this.auth.member$.value.uid); + } + subs.unsubscribe(); + } + }); + + this.auth.member$.pipe(untilDestroyed(this)).subscribe((val) => { + if (!loadedListenToMembers) { + if (val?.uid && this.data.token$.value?.uid) { + loadedListenToMembers = true; + this.data.listenToMembersDistribution(this.data.token$.value?.uid, val.uid); + } + } + }); + } + + private notFound(): void { + this.router.navigate([ROUTER_UTILS.config.errorResponse.notFound]); + } + + public get member$(): BehaviorSubject { + return this.auth.member$; + } + + public get avatarUrl$(): Observable { + return this.data.space$.pipe( + map((space: Space | undefined) => { + return space?.avatarUrl ? FileApi.getUrl(space.avatarUrl, FILE_SIZES.small) : undefined; + }), + ); + } + + public exportCurrentStakers(token: string): void { + // In progress. + if (this.exportingCurrentStakers) { + return; + } + + this.exportingCurrentStakers = true; + this.tokenApi + .getDistributions(token) + .pipe(debounceTime(2500), untilDestroyed(this)) + .subscribe((transactions: TokenDistribution[] | undefined) => { + if (!transactions) { + return; + } + + this.exportingCurrentStakers = false; + const fields = [ + '', + 'memberId', + 'tokenStakedDynamic', + 'tokenStakedStatic', + 'stakedValueDynamic', + 'stakedValueStatic', + 'totalStakeRewards', + ]; + const csv = Papa.unparse({ + fields, + data: transactions.map((t) => [ + t.uid, + t.stakes?.[StakeType.DYNAMIC]?.amount || 0, + t.stakes?.[StakeType.STATIC]?.amount || 0, + t.stakes?.[StakeType.DYNAMIC]?.value || 0, + t.stakes?.[StakeType.STATIC]?.value || 0, + t.stakeRewards || 0, + ]), + }); + + download(`data:text/csv;charset=utf-8${csv}`, `soonaverse_${token}_stakers.csv`); + this.cd.markForCheck(); + }); + } + + public get bannerUrl$(): Observable { + return this.data.space$.pipe( + map((space: Space | undefined) => { + return space?.bannerUrl ? FileApi.getUrl(space.bannerUrl, FILE_SIZES.large) : undefined; + }), + ); + } + + public async join(): Promise { + if (!this.data.space$.value?.uid) { + return; + } + + await this.auth.sign( + { + uid: this.data.space$.value.uid, + }, + (sc, finish) => { + this.notification + .processRequest( + this.spaceApi.join(sc), + this.data.space$.value?.open ? 'Joined.' : 'Pending Approval', + finish, + ) + .subscribe(() => { + // none. + }); + }, + ); + } + + public userStakedEnoughToJoin$(): Observable { + return combineLatest([this.data.tokenDistribution$, this.data.space$]).pipe( + map(([v, s]) => { + return (v?.stakes?.[StakeType.DYNAMIC]?.value || 0) >= (s?.minStakedValue || 0); + }), + ); + } + + public edit(): void { + if (!this.data.space$.value?.uid) { + return; + } + + this.router.navigate([ + ROUTER_UTILS.config.space.root, + ROUTER_UTILS.config.space.edit, + { + spaceId: this.data.space$.value.uid, + }, + ]); + } + + public isSoonSpace(): Observable { + return this.data.space$.pipe( + map((s) => { + return s?.uid === (environment.production ? SOON_SPACE : SOON_SPACE_TEST); + }), + ); + } + + public async leave(): Promise { + if (!this.data.space$.value?.uid) { + return; + } + + await this.auth.sign( + { + uid: this.data.space$.value.uid, + }, + (sc, finish) => { + this.notification.processRequest(this.spaceApi.leave(sc), 'Left.', finish).subscribe(() => { + // none + }); + }, + ); + } + + public ngOnDestroy(): void { + this.data.cancelSubscriptions(); + } +} diff --git a/src/app/pages/space/pages/upsert/upsert.page.html b/src/app/pages/space/pages/upsert/upsert.page.html new file mode 100644 index 0000000..9ab9780 --- /dev/null +++ b/src/app/pages/space/pages/upsert/upsert.page.html @@ -0,0 +1,258 @@ + +

    Add new space

    +

    Edit space

    +
    +
    +
    + + + +
    + + Title + + + + + + Description + + + + +
    +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    + + + + + + + + Open for anyone to join instantly + + + + + Requires a member approval + + Requires stake value (in space's token) + + + + + + + + + + + + + + +
    + + + + + jpeg/png/webp + + + + +
    +
    + + + + + +
    + + + + + + jpeg/png/webp + + + + +
    +
    +
    +
    +
    + + + + +
    diff --git a/src/app/pages/space/pages/upsert/upsert.page.less b/src/app/pages/space/pages/upsert/upsert.page.less new file mode 100644 index 0000000..f42520f --- /dev/null +++ b/src/app/pages/space/pages/upsert/upsert.page.less @@ -0,0 +1,6 @@ +.wen-radio-group { + input { + width: 100px; + margin-left: 10px; + } +} diff --git a/src/app/pages/space/pages/upsert/upsert.page.ts b/src/app/pages/space/pages/upsert/upsert.page.ts new file mode 100644 index 0000000..4f1011b --- /dev/null +++ b/src/app/pages/space/pages/upsert/upsert.page.ts @@ -0,0 +1,235 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { SeoService } from '@core/services/seo'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { + GITHUB_REGEXP, + MAX_TOTAL_TOKEN_SUPPLY, + Space, + TWITTER_REGEXP, + Token, + getDefDecimalIfNotSet, +} from '@soonaverse/interfaces'; +import { NzNotificationService } from 'ng-zorro-antd/notification'; +import { NzUploadChangeParam, NzUploadFile, NzUploadXHRArgs } from 'ng-zorro-antd/upload'; +import { Observable, Subscription, first, map, of } from 'rxjs'; +import { FileApi } from '../../../../@api/file.api'; +import { SpaceApi } from '../../../../@api/space.api'; +import { NotificationService } from '../../../../@core/services/notification/notification.service'; +import { NavigationService } from './../../../../@core/services/navigation/navigation.service'; + +@UntilDestroy() +@Component({ + selector: 'wen-upsert', + templateUrl: './upsert.page.html', + styleUrls: ['./upsert.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class UpsertPage implements OnInit { + public nameControl: FormControl = new FormControl('', Validators.required); + public aboutControl: FormControl = new FormControl('', Validators.required); + public openControl: FormControl = new FormControl(0); + public minStakedValue: FormControl = new FormControl(undefined, [ + Validators.min(1), + Validators.max(MAX_TOTAL_TOKEN_SUPPLY), + ]); + public discordControl: FormControl = new FormControl('', Validators.pattern(/^[a-zA-Z0-9_]*$/i)); + public twitterControl: FormControl = new FormControl('', Validators.pattern(TWITTER_REGEXP)); + public githubControl: FormControl = new FormControl('', Validators.pattern(GITHUB_REGEXP)); + public avatarControl: FormControl = new FormControl('', Validators.required); + public bannerControl: FormControl = new FormControl(''); + public spaceForm: FormGroup; + public editMode = false; + public disableAccessChange = false; + public spaceId?: number; + public tokenDividedBy = 6; + + constructor( + private auth: AuthService, + private router: Router, + private route: ActivatedRoute, + private spaceApi: SpaceApi, + private tokenApi: TokenApi, + private fileApi: FileApi, + private notification: NotificationService, + private nzNotification: NzNotificationService, + private cd: ChangeDetectorRef, + private seo: SeoService, + public nav: NavigationService, + public deviceService: DeviceService, + ) { + this.spaceForm = new FormGroup({ + name: this.nameControl, + about: this.aboutControl, + open: this.openControl, + minStakedValue: this.minStakedValue, + discord: this.discordControl, + twitter: this.twitterControl, + github: this.githubControl, + avatarUrl: this.avatarControl, + bannerUrl: this.bannerControl, + }); + } + + public ngOnInit(): void { + this.seo.setTags( + $localize`Space - New`, + $localize`Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse.`, + ); + + this.route.params?.pipe(untilDestroyed(this)).subscribe((o) => { + if (o?.spaceId) { + this.editMode = true; + this.spaceId = o.spaceId; + this.spaceApi + .listen(o.spaceId) + .pipe(first()) + .subscribe((o) => { + if (!o) { + // Unable to find the space. Take them back. + this.nav.goBack(); + } else { + this.nameControl.setValue(o.name); + this.aboutControl.setValue(o.about); + this.openControl.setValue(o.tokenBased ? 2 : o.open ? 0 : 1); + this.discordControl.setValue(o.discord); + this.twitterControl.setValue(o.twitter); + this.githubControl.setValue(o.github); + this.avatarControl.setValue(o.avatarUrl); + this.bannerControl.setValue(o.bannerUrl); + + this.tokenApi + .space(o.uid) + .pipe( + map((tokens: Token[] | undefined) => (tokens || [])?.[0] || null), + untilDestroyed(this), + ) + .subscribe((t) => { + this.tokenDividedBy = Math.pow(10, getDefDecimalIfNotSet(t.decimals)); + if (o.minStakedValue && o.tokenBased) { + this.minStakedValue.setValue(o.minStakedValue / this.tokenDividedBy); + this.disableAccessChange = true; + } + }); + + this.cd.markForCheck(); + } + }); + } + }); + } + + public uploadChangeAvatar(event: NzUploadChangeParam): void { + this.uploadChange('space_avatar', event); + } + + public uploadChangeBanner(event: NzUploadChangeParam): void { + this.uploadChange('space_banner', event); + } + + private uploadChange(type: 'space_avatar' | 'space_banner', event: NzUploadChangeParam): void { + if (event.type === 'success') { + if (type === 'space_avatar') { + this.avatarControl.setValue(event.file.response); + } else if (type === 'space_banner') { + this.bannerControl.setValue(event.file.response); + } + } + } + + public uploadFile(type: 'space_avatar' | 'space_banner', item: NzUploadXHRArgs): Subscription { + if (!this.auth.member$.value) { + const err = $localize`Member seems to log out during the file upload request.`; + this.nzNotification.error(err, ''); + if (item.onError) { + item.onError(err, item.file); + } + + return of().subscribe(); + } + + return this.fileApi.upload(this.auth.member$.value.uid, item); + } + + private validateForm(): boolean { + this.spaceForm.updateValueAndValidity(); + if (!this.spaceForm.valid) { + Object.values(this.spaceForm.controls).forEach((control) => { + if (control.invalid) { + control.markAsDirty(); + control.updateValueAndValidity({ onlySelf: true }); + } + }); + + return false; + } + + return true; + } + + public previewFile(file: NzUploadFile): Observable { + return of(file.response); + } + + public async create(): Promise { + if (!this.validateForm()) { + return; + } + const data = { ...this.spaceForm.value }; + data.open = data.open === 0 ? true : false; + delete data.minStakedValue; + + await this.auth.sign(data, (sc, finish) => { + this.notification + .processRequest(this.spaceApi.create(sc), 'Created.', finish) + .subscribe((val: Space | undefined) => { + this.router.navigate([ROUTER_UTILS.config.space.root, val?.uid]); + }); + }); + } + + public async save(): Promise { + if (!this.validateForm()) { + return; + } + const data = { + ...this.spaceForm.value, + ...{ + uid: this.spaceId, + }, + }; + + if (data.open === 2) { + delete data.open; + data.minStakedValue = data.minStakedValue * this.tokenDividedBy; + data.tokenBased = true; + } else { + data.open = data.open === 0 ? true : false; + delete data.minStakedValue; + } + await this.auth.sign(data, (sc, finish) => { + this.notification + .processRequest(this.spaceApi.save(sc), 'Saved.', finish) + .subscribe((val) => { + this.router.navigate([ROUTER_UTILS.config.proposal.root, val?.uid]); + }); + }); + } + + public getAvatarCardDescription(): string { + return this.editMode + ? $localize`Upload new to replace existing.` + : $localize`Your brand is key.`; + } + + public getBannerCardDescription(): string { + return this.editMode + ? $localize`Upload new to replace existing.` + : $localize`Make it personal.`; + } +} diff --git a/src/app/pages/space/services/data.service.ts b/src/app/pages/space/services/data.service.ts new file mode 100644 index 0000000..195a26c --- /dev/null +++ b/src/app/pages/space/services/data.service.ts @@ -0,0 +1,491 @@ +import { Injectable, OnDestroy } from '@angular/core'; +import { CollectionApi } from '@api/collection.api'; +import { TokenApi } from '@api/token.api'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { + Award, + Collection, + Member, + Proposal, + Space, + Token, + TokenDistribution, + TokenStats, +} from '@soonaverse/interfaces'; +import { AwardFilter } from '@soonaverse/lib'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { + AuditOneQueryService, + AuditOneResponseMember, +} from 'src/app/service-modules/audit-one/services/query.service'; +import { AwardApi } from './../../../@api/award.api'; +import { DEFAULT_LIST_SIZE } from './../../../@api/base.api'; +import { ProposalApi, ProposalFilter } from './../../../@api/proposal.api'; +import { SpaceApi } from './../../../@api/space.api'; +import { AuthService } from './../../../components/auth/services/auth.service'; + +export enum MemberFilterOptions { + ACTIVE = 'active', + PENDING = 'pending', + BLOCKED = 'blocked', +} + +export enum SpaceAction { + EXPORT_CURRENT_MEMBERS = 'export_current_members', + EXPORT_CURRENT_STAKERS = 'export_current_stakers', + STAKING_REWARD_SCHEDULE = 'staking_reward_schedule', + MANAGE_ADDRESSES = 'manage_addresses', +} + +@Injectable({ + providedIn: 'any', +}) +export class DataService implements OnDestroy { + public space$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public isMemberWithinSpace$: BehaviorSubject = new BehaviorSubject(false); + public isGuardianWithinSpace$: BehaviorSubject = new BehaviorSubject(false); + public isPendingMemberWithSpace$: BehaviorSubject = new BehaviorSubject(false); + public guardians$: BehaviorSubject = new BehaviorSubject< + Member[] | undefined + >(undefined); + public proposalsDraft$: BehaviorSubject = new BehaviorSubject< + Proposal[] | undefined + >(undefined); + public proposalsActive$: BehaviorSubject = new BehaviorSubject< + Proposal[] | undefined + >(undefined); + public proposalsRejected$: BehaviorSubject = new BehaviorSubject< + Proposal[] | undefined + >(undefined); + public proposalsCompleted$: BehaviorSubject = new BehaviorSubject< + Proposal[] | undefined + >(undefined); + public awardsDraft$: BehaviorSubject = new BehaviorSubject< + Award[] | undefined + >(undefined); + public awardsActive$: BehaviorSubject = new BehaviorSubject< + Award[] | undefined + >(undefined); + public awardsRejected$: BehaviorSubject = new BehaviorSubject< + Award[] | undefined + >(undefined); + public awardsCompleted$: BehaviorSubject = new BehaviorSubject< + Award[] | undefined + >(undefined); + public members$: BehaviorSubject = new BehaviorSubject< + Member[] | undefined + >(undefined); + public blockedMembers$: BehaviorSubject = new BehaviorSubject< + Member[] | undefined + >(undefined); + public pendingMembers$: BehaviorSubject = new BehaviorSubject< + Member[] | undefined + >(undefined); + public rejectedCollections$: BehaviorSubject = new BehaviorSubject< + Collection[] | undefined + >(undefined); + public pendingCollections$: BehaviorSubject = new BehaviorSubject< + Collection[] | undefined + >(undefined); + public availableCollections$: BehaviorSubject = new BehaviorSubject< + Collection[] | undefined + >(undefined); + public token$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public tokenStats$: BehaviorSubject = new BehaviorSubject< + TokenStats | undefined + >(undefined); + public tokenDistribution$: BehaviorSubject = new BehaviorSubject< + TokenDistribution | undefined + >(undefined); + public triggerAction$: BehaviorSubject = new BehaviorSubject< + SpaceAction | undefined + >(undefined); + public auditOneStatus$: BehaviorSubject = new BehaviorSubject< + AuditOneResponseMember | undefined + >(undefined); + + private subscriptions$: Subscription[] = []; + private subscriptionsRelatedRecords$: Subscription[] = []; + private completedProposalsOn = false; + private rejectedProposalsOn = false; + private draftProposalsOn = false; + private completedAwardsOn = false; + private rejectedAwardsOn = false; + private draftAwardsOn = false; + private availableCollectionOn = false; + private rejectedCollectionOn = false; + private pendingCollectionOn = false; + private dataStoreMembers: Member[][] = []; + private dataStorePendingMembers: Member[][] = []; + private dataStoreBlockedMembers: Member[][] = []; + + constructor( + private auth: AuthService, + private spaceApi: SpaceApi, + private awardApi: AwardApi, + private auditOneModule: AuditOneQueryService, + private proposalApi: ProposalApi, + private collectionApi: CollectionApi, + private tokenApi: TokenApi, + ) { + // none. + } + + public listenToSpace(id: string): void { + this.cancelSubscriptions(); + this.subscriptions$.push(this.spaceApi.listen(id).subscribe(this.space$)); + this.listenToRelatedRecord(id); + this.loadServiceModuleData(id); + let listeningMember: string | undefined; + this.auth.member$.subscribe((m?: Member) => { + if (listeningMember === m?.uid) { + return; + } + + if (m?.uid) { + this.listenToRelatedRecordWithMember(id, m.uid); + listeningMember = m.uid; + } else { + this.isMemberWithinSpace$.next(false); + this.isGuardianWithinSpace$.next(false); + this.isPendingMemberWithSpace$.next(false); + listeningMember = undefined; + } + }); + } + + public listenToRelatedRecord(spaceId: string): void { + this.subscriptions$.push(this.spaceApi.listenGuardians(spaceId).subscribe(this.guardians$)); + this.subscriptions$.push( + this.proposalApi.listenSpace(spaceId, ProposalFilter.ACTIVE).subscribe(this.proposalsActive$), + ); + this.subscriptions$.push( + this.awardApi.listenSpace(spaceId, AwardFilter.ACTIVE).subscribe(this.awardsActive$), + ); + } + + public listenToRelatedRecordWithMember(spaceId: string, memberId: string): void { + this.resetRelatedRecordsSubjects(); + this.subscriptionsRelatedRecords$?.forEach((s) => { + s.unsubscribe(); + }); + this.subscriptionsRelatedRecords$.push( + this.spaceApi.isMemberWithinSpace(spaceId, memberId).subscribe(this.isMemberWithinSpace$), + ); + this.subscriptionsRelatedRecords$.push( + this.spaceApi.isGuardianWithinSpace(spaceId, memberId).subscribe(this.isGuardianWithinSpace$), + ); + this.subscriptionsRelatedRecords$.push( + this.spaceApi + .isPendingMemberWithinSpace(spaceId, memberId) + .subscribe(this.isPendingMemberWithSpace$), + ); + } + + public async loadServiceModuleData(spaceId: string): Promise { + // Audit One widget. + if (spaceId) { + const space = await this.auditOneModule.getSpaceStatus(spaceId); + this.auditOneStatus$.next(space); + } + } + + public listenToCompletedProposals(spaceId: string): void { + if (this.completedProposalsOn === true) { + return; + } + + this.completedProposalsOn = true; + this.subscriptions$.push( + this.proposalApi + .listenSpace(spaceId, ProposalFilter.COMPLETED) + .subscribe(this.proposalsCompleted$), + ); + } + + public listenToRejectedProposals(spaceId: string): void { + if (this.rejectedProposalsOn === true) { + return; + } + + this.rejectedProposalsOn = true; + this.subscriptions$.push( + this.proposalApi + .listenSpace(spaceId, ProposalFilter.REJECTED) + .subscribe(this.proposalsRejected$), + ); + } + + public listenToDraftProposals(spaceId: string): void { + if (this.draftProposalsOn === true) { + return; + } + + this.draftProposalsOn = true; + this.subscriptions$.push( + this.proposalApi.listenSpace(spaceId, ProposalFilter.DRAFT).subscribe(this.proposalsDraft$), + ); + } + + public listenToCompletedAwards(spaceId: string): void { + if (this.completedAwardsOn === true) { + return; + } + + this.completedAwardsOn = true; + this.subscriptions$.push( + this.awardApi.listenSpace(spaceId, AwardFilter.COMPLETED).subscribe(this.awardsCompleted$), + ); + } + + public listenToRejectedAwards(spaceId: string): void { + if (this.rejectedAwardsOn === true) { + return; + } + + this.rejectedAwardsOn = true; + this.subscriptions$.push( + this.awardApi.listenSpace(spaceId, AwardFilter.REJECTED).subscribe(this.awardsRejected$), + ); + } + + public listenToDraftAwards(spaceId: string): void { + if (this.draftAwardsOn === true) { + return; + } + + this.draftAwardsOn = true; + this.subscriptions$.push( + this.awardApi.listenSpace(spaceId, AwardFilter.DRAFT).subscribe(this.awardsDraft$), + ); + } + + public listenToPendingCollections(spaceId: string): void { + if (this.pendingCollectionOn === true) { + return; + } + + this.pendingCollectionOn = true; + this.subscriptions$.push( + this.collectionApi.allPendingSpace(spaceId).subscribe(this.pendingCollections$), + ); + } + + public listenToAvailableCollections(spaceId: string): void { + if (this.availableCollectionOn === true) { + return; + } + + this.availableCollectionOn = true; + this.subscriptions$.push( + this.collectionApi.allAvailableSpace(spaceId).subscribe(this.availableCollections$), + ); + } + + public listenToRejectedCollections(spaceId: string): void { + if (this.rejectedCollectionOn === true) { + return; + } + + this.rejectedCollectionOn = true; + this.subscriptions$.push( + this.collectionApi.allRejectedSpace(spaceId).subscribe(this.rejectedCollections$), + ); + } + + public listenToTokens(spaceId: string): void { + this.subscriptions$.push( + this.tokenApi + .space(spaceId) + .pipe(map((tokens: Token[] | undefined) => (tokens || [])?.[0] || null)) + .subscribe(this.token$), + ); + } + + public listenToTokenStatus(token: string): void { + this.subscriptions$.push(this.tokenApi.stats(token).subscribe(this.tokenStats$)); + } + + public listenToMembersDistribution(token: string, member: string): void { + this.subscriptions$.push( + this.tokenApi.getMembersDistribution(token, member).subscribe(this.tokenDistribution$), + ); + } + + public isLoading(arr: any): boolean { + return arr === undefined; + } + + public isEmpty(arr: any): boolean { + return Array.isArray(arr) && arr.length === 0; + } + + public listenMembers(spaceId: string, lastValue?: string): void { + this.subscriptions$.push( + this.spaceApi + .listenMembers(spaceId, lastValue) + .subscribe( + this.store.bind(this, this.members$, this.dataStoreMembers, this.dataStoreMembers.length), + ), + ); + } + + public listenBlockedMembers(spaceId: string, lastValue?: string): void { + this.subscriptions$.push( + this.spaceApi + .listenBlockedMembers(spaceId, lastValue) + .subscribe( + this.store.bind( + this, + this.blockedMembers$, + this.dataStoreBlockedMembers, + this.dataStoreBlockedMembers.length, + ), + ), + ); + } + + public listenPendingMembers(spaceId: string, lastValue?: any): void { + this.subscriptions$.push( + this.spaceApi + .listenPendingMembers(spaceId, lastValue) + .subscribe( + this.store.bind( + this, + this.pendingMembers$, + this.dataStorePendingMembers, + this.dataStorePendingMembers.length, + ), + ), + ); + } + + protected store( + stream$: BehaviorSubject, + store: any[][], + page: number, + a: any, + ): void { + if (store[page]) { + store[page] = a; + } else { + store.push(a); + } + + // Merge arrays. + stream$.next(Array.prototype.concat.apply([], store)); + } + + public onMemberScroll(spaceId: string, list: MemberFilterOptions, searchIds?: string[]): void { + let store; + let handler; + let stream; + if (list === MemberFilterOptions.PENDING) { + store = this.dataStorePendingMembers; + stream = this.pendingMembers$.value; + handler = this.listenPendingMembers; + } else if (list === MemberFilterOptions.BLOCKED) { + store = this.dataStoreBlockedMembers; + stream = this.blockedMembers$.value; + handler = this.listenBlockedMembers; + } else { + store = this.dataStoreMembers; + stream = this.members$.value; + handler = this.listenMembers; + } + + // Make sure we allow initial load store[0] + if ( + store[0] && + (!store[store.length - 1] || store[store.length - 1]?.length < DEFAULT_LIST_SIZE) + ) { + // Finished paging. + return; + } + + // For initial load stream will not be defiend. + const lastValue = stream ? stream[stream.length - 1].createdOn : undefined; + handler.call(this, spaceId, lastValue); + } + + public getPendingMembersCount(members?: Member[] | null): number { + if (!members || !this.isGuardianWithinSpace$.value) { + return 0; + } + + return members.length; + } + + public resetSubjects(): void { + // Clean up all streams. + this.guardians$.next(undefined); + this.proposalsDraft$.next(undefined); + this.proposalsRejected$.next(undefined); + this.proposalsActive$.next(undefined); + this.proposalsCompleted$.next(undefined); + this.awardsActive$.next(undefined); + this.awardsRejected$.next(undefined); + this.awardsDraft$.next(undefined); + this.awardsCompleted$.next(undefined); + this.rejectedCollections$.next(undefined); + this.pendingCollections$.next(undefined); + this.availableCollections$.next(undefined); + this.auditOneStatus$.next(undefined); + this.resetMembersSubjects(); + } + + public resetMembersSubjects(): void { + this.members$.next(undefined); + this.blockedMembers$.next(undefined); + this.pendingMembers$.next(undefined); + } + + public resetMembersDataStore(): void { + this.dataStoreMembers = []; + this.dataStorePendingMembers = []; + this.dataStoreBlockedMembers = []; + } + + public resetRelatedRecordsSubjects(): void { + this.isMemberWithinSpace$.next(false); + this.isGuardianWithinSpace$.next(false); + this.isPendingMemberWithSpace$.next(false); + } + + public cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + + this.subscriptionsRelatedRecords$.forEach((s) => { + s.unsubscribe(); + }); + + this.completedProposalsOn = false; + this.rejectedProposalsOn = false; + this.draftProposalsOn = false; + this.completedAwardsOn = false; + this.draftAwardsOn = false; + this.rejectedAwardsOn = false; + this.availableCollectionOn = false; + this.rejectedCollectionOn = false; + this.pendingCollectionOn = false; + this.resetMembersDataStore(); + this.resetSubjects(); + this.resetRelatedRecordsSubjects(); + } + + public getMemberUrl(memberId: string): string[] { + return ['/', ROUTER_UTILS.config.member.root, memberId]; + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + this.space$.next(undefined); + } +} diff --git a/src/app/pages/space/services/helper.service.ts b/src/app/pages/space/services/helper.service.ts new file mode 100644 index 0000000..bade1ac --- /dev/null +++ b/src/app/pages/space/services/helper.service.ts @@ -0,0 +1,6 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class HelperService {} diff --git a/src/app/pages/space/space-routing.module.ts b/src/app/pages/space/space-routing.module.ts new file mode 100644 index 0000000..904f172 --- /dev/null +++ b/src/app/pages/space/space-routing.module.ts @@ -0,0 +1,50 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ROUTER_UTILS } from './../../@core/utils/router.utils'; +import { AwardsPage } from './pages/awards/awards.page'; +import { CollectionsPage } from './pages/collections/collections.page'; +import { MembersPage } from './pages/members/members.page'; +import { OverviewPage } from './pages/overview/overview.page'; +import { ManagePage } from './pages/manage/manage.page'; +import { ProposalsPage } from './pages/proposals/proposals.page'; +import { SpacePage } from './pages/space/space.page'; +import { UpsertPage } from './pages/upsert/upsert.page'; + +const routes: Routes = [ + { + path: ROUTER_UTILS.config.space.new, + component: UpsertPage, + }, + { + path: ROUTER_UTILS.config.space.edit, + component: UpsertPage, + }, + { + path: ROUTER_UTILS.config.space.space, + component: SpacePage, + children: [ + { + path: '', + redirectTo: ROUTER_UTILS.config.space.overview, + pathMatch: 'full', + }, + { path: ROUTER_UTILS.config.space.manage, component: ManagePage }, + { path: ROUTER_UTILS.config.space.overview, component: OverviewPage }, + { path: ROUTER_UTILS.config.space.awards, component: AwardsPage }, + { path: ROUTER_UTILS.config.space.members, component: MembersPage }, + { path: ROUTER_UTILS.config.space.proposals, component: ProposalsPage }, + { path: ROUTER_UTILS.config.space.collections, component: CollectionsPage }, + ], + }, + { + path: '', + redirectTo: '/' + ROUTER_UTILS.config.discover.root + '/' + ROUTER_UTILS.config.discover.spaces, + pathMatch: 'full', + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class SpaceRoutingModule {} diff --git a/src/app/pages/space/space.module.ts b/src/app/pages/space/space.module.ts new file mode 100644 index 0000000..5e5e86f --- /dev/null +++ b/src/app/pages/space/space.module.ts @@ -0,0 +1,127 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { AwardCardModule } from '@components/award/components/award-card/award-card.module'; +import { CollectionCardModule } from '@components/collection/components/collection-card/collection-card.module'; +import { DescriptionModule } from '@components/description/description.module'; +import { DrawerToggleModule } from '@components/drawer-toggle/drawer-toggle.module'; +import { IconModule } from '@components/icon/icon.module'; +import { MobileSearchModule } from '@components/mobile-search/mobile-search.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { RadioModule } from '@components/radio/radio.module'; +import { SpaceRewardScheduleModule } from '@components/space/components/space-reward-schedule/space-reward-schedule.module'; +import { TokenCardModule } from '@components/token/components/token-card/token-card.module'; +import { TokenImportModule } from '@components/token/components/token-import/token-import.module'; +import { TokenStakeModule } from '@components/token/components/token-stake/token-stake.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { SpaceAboutModule } from '@pages/space/pages/space/space-about/space-about.module'; +import { LayoutModule } from '@shell/ui/layout/layout.module'; +import { NzAlertModule } from 'ng-zorro-antd/alert'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzBadgeModule } from 'ng-zorro-antd/badge'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzDropDownModule } from 'ng-zorro-antd/dropdown'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzGridModule } from 'ng-zorro-antd/grid'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzInputNumberModule } from 'ng-zorro-antd/input-number'; +import { NzListModule } from 'ng-zorro-antd/list'; +import { NzRadioModule } from 'ng-zorro-antd/radio'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NzTypographyModule } from 'ng-zorro-antd/typography'; +import { NzUploadModule } from 'ng-zorro-antd/upload'; +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; +import { AuditOneModule } from 'src/app/service-modules/audit-one/audit-one.module'; +import { ResizeAvatarModule } from '../../@core/pipes/resize-avatar/resize-avatar.module'; +import { MemberModule } from '../../components/member/member.module'; +import { ProposalCardModule } from '../../components/proposal/components/proposal-card/proposal-card.module'; +import { MarkDownModule } from './../../@core/pipes/markdown/markdown.module'; +import { TruncateModule } from './../../@core/pipes/truncate/truncate.module'; +import { FixedCreateButtonModule } from './../../components/fixed-create-button/fixed-create-button.module'; +import { TabsModule } from './../../components/tabs/tabs.module'; +import { AwardsPage } from './pages/awards/awards.page'; +import { CollectionsPage } from './pages/collections/collections.page'; +import { ManagePage } from './pages/manage/manage.page'; +import { MembersPage } from './pages/members/members.page'; +import { OverviewPage } from './pages/overview/overview.page'; +import { ProposalsPage } from './pages/proposals/proposals.page'; +import { SpacePage } from './pages/space/space.page'; +import { UpsertPage } from './pages/upsert/upsert.page'; +import { DataService } from './services/data.service'; +import { SpaceRoutingModule } from './space-routing.module'; + +@NgModule({ + declarations: [ + SpacePage, + OverviewPage, + ManagePage, + ProposalsPage, + AwardsPage, + MembersPage, + UpsertPage, + CollectionsPage, + ], + providers: [DataService], + imports: [ + CommonModule, + TabsModule, + MarkDownModule, + InfiniteScrollModule, + SpaceRewardScheduleModule, + ReactiveFormsModule, + SpaceRoutingModule, + TruncateModule, + NzInputNumberModule, + MemberModule, + ResizeAvatarModule, + ProposalCardModule, + AwardCardModule, + IconModule, + NzTagModule, + NzRadioModule, + NzBadgeModule, + NzDropDownModule, + NzFormModule, + NzGridModule, + NzButtonModule, + NzTypographyModule, + NzSkeletonModule, + NzCardModule, + NzInputModule, + NzTableModule, + AuditOneModule, + NzSelectModule, + NzToolTipModule, + NzIconModule, + FormatTokenModule, + NzTagModule, + NzAlertModule, + DescriptionModule, + TokenImportModule, + NzUploadModule, + NzAvatarModule, + LayoutModule, + NzToolTipModule, + NzListModule, + IconModule, + RadioModule, + DrawerToggleModule, + NzDrawerModule, + SpaceAboutModule, + FixedCreateButtonModule, + FormsModule, + CollectionCardModule, + MobileSearchModule, + TokenCardModule, + TokenStakeModule, + ModalDrawerModule, + ], +}) +export class SpaceModule {} diff --git a/src/app/pages/swap/pages/market/swap.page.html b/src/app/pages/swap/pages/market/swap.page.html new file mode 100644 index 0000000..5018e95 --- /dev/null +++ b/src/app/pages/swap/pages/market/swap.page.html @@ -0,0 +1,84 @@ + +

    + Swap +

    by
    +
    + BEE logo +
    + +
    +
    +
    +
    +
    +

    + What is Swap? +

    +

    + Iotabee's semi-centralized crosschain Swap is coming to Soonaverse. You will SOON be + able to swap assets between different chains including IOTA, Shimmer, Shimmer EVM and + BSC. +

    +
    +
    + + +
    + +
    +
    +

    What is iotabee?

    +

    + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a + semi-centralized crosschain SWAP that people can use to create liquidity and trade + tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. +

    + +

    + To understand iotabee continue to: + + iotabee.com + +

    +
    +
    + +
    +
    +
    +
    +
    diff --git a/src/app/pages/swap/pages/market/swap.page.less b/src/app/pages/swap/pages/market/swap.page.less new file mode 100644 index 0000000..ac97922 --- /dev/null +++ b/src/app/pages/swap/pages/market/swap.page.less @@ -0,0 +1,24 @@ +.image-container { + position: relative; +} + +.image-container .overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + justify-content: center; + align-items: center; + display: flex; + flex-direction: column; + + &.color { + background: #f6a13a; + opacity: 83%; + } + + a { + background-color: white; + } +} diff --git a/src/app/pages/swap/pages/market/swap.page.ts b/src/app/pages/swap/pages/market/swap.page.ts new file mode 100644 index 0000000..0415f7d --- /dev/null +++ b/src/app/pages/swap/pages/market/swap.page.ts @@ -0,0 +1,25 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { ThemeList, ThemeService } from '@core/services/theme'; +import { UntilDestroy } from '@ngneat/until-destroy'; + +@UntilDestroy() +@Component({ + selector: 'wen-swap', + templateUrl: './swap.page.html', + styleUrls: ['./swap.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SwapPage implements OnInit { + public theme = ThemeList; + + constructor(public themeService: ThemeService, public deviceService: DeviceService) {} + + public ngOnInit(): void { + this.deviceService.viewWithSearch$.next(false); + } + + public onClickChangeTheme(theme: ThemeList): void { + this.themeService.setTheme(theme); + } +} diff --git a/src/app/pages/swap/swap-routing.module.ts b/src/app/pages/swap/swap-routing.module.ts new file mode 100644 index 0000000..5516a74 --- /dev/null +++ b/src/app/pages/swap/swap-routing.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { SwapPage } from './pages/market/swap.page'; + +const routes: Routes = [ + { + path: '', + component: SwapPage, + pathMatch: 'full', + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class SwapRoutingModule {} diff --git a/src/app/pages/swap/swap.module.ts b/src/app/pages/swap/swap.module.ts new file mode 100644 index 0000000..6de80a0 --- /dev/null +++ b/src/app/pages/swap/swap.module.ts @@ -0,0 +1,22 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { LayoutModule } from '@shell/ui/layout/layout.module'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { SwapPage } from './pages/market/swap.page'; +import { SwapRoutingModule } from './swap-routing.module'; + +@NgModule({ + declarations: [SwapPage], + imports: [ + CommonModule, + SwapRoutingModule, + NzCardModule, + RouterModule, + LayoutModule, + NzButtonModule, + ], + providers: [], +}) +export class SwapModule {} diff --git a/src/app/pages/token/pages/airdrops/airdrops.page.html b/src/app/pages/token/pages/airdrops/airdrops.page.html new file mode 100644 index 0000000..cb74cc1 --- /dev/null +++ b/src/app/pages/token/pages/airdrops/airdrops.page.html @@ -0,0 +1,127 @@ + + +
    +
    + Create airdrop +
    + Download CSV template +
    + +
    + You can create a governance token airdrop for your members. To do this, upload a .csv file + containing user addresses and allocation details. +
    + +
    + If you don’t know how to prepare CSV file, you can download our template made for you. +
    + +
    + + + + + + + + + +
    +
    + + +
    +
    + {{ fileName }} +
    + +
    + + + + + + {{ c.label }} + + + + + + + + + {{ r.value }} + + + + + +
    + +
    +
    Some rows have been removed
    + + +
    + {{ err }} +
    +
    +
    +
    + + + + diff --git a/src/app/pages/token/pages/airdrops/airdrops.page.less b/src/app/pages/token/pages/airdrops/airdrops.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/token/pages/airdrops/airdrops.page.ts b/src/app/pages/token/pages/airdrops/airdrops.page.ts new file mode 100644 index 0000000..35ddb78 --- /dev/null +++ b/src/app/pages/token/pages/airdrops/airdrops.page.ts @@ -0,0 +1,133 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core'; +import { Router } from '@angular/router'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { NotificationService } from '@core/services/notification'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { download } from '@core/utils/tools.utils'; +import { DataService } from '@pages/token/services/data.service'; +import { MAX_TOTAL_TOKEN_SUPPLY, StakeType, getDefDecimalIfNotSet } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { NzUploadFile } from 'ng-zorro-antd/upload'; +import Papa from 'papaparse'; +import { Observable } from 'rxjs'; + +export enum StepType { + GENERATE = 'Generate', + SUBMIT = 'Submit', +} + +export interface AirdropItem { + address: string; + amount: string; + vestingAt: dayjs.Dayjs; + stakeType: StakeType; +} + +@Component({ + selector: 'wen-airdrops', + templateUrl: './airdrops.page.html', + styleUrls: ['./airdrops.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AirdropsPage { + public tableConfig = [ + { label: `Address`, key: 'address' }, + { label: `Amount`, key: 'amount' }, + { label: `StakeType`, key: 'stakeType' }, + { label: `VestingAt`, key: 'vestingAt' }, + ]; + public errors: string[] = []; + public airdropData: AirdropItem[] = []; + public fileName: string | null = null; + public isAirdropModalOpen = false; + + constructor( + public data: DataService, + private cd: ChangeDetectorRef, + private auth: AuthService, + private notification: NotificationService, + private router: Router, + private tokenApi: TokenApi, + ) {} + + public beforeCSVUpload(file: NzUploadFile): boolean | Observable { + if (!file) return false; + this.errors = []; + Papa.parse(file as unknown as File, { + skipEmptyLines: true, + complete: (results: any) => { + try { + this.fileName = file.name; + this.airdropData = results.data + .slice(1) + .filter((r: string[]) => { + if ( + r.length === this.tableConfig.length && + !isNaN(Number(r[1])) && + Number(r[1]) <= MAX_TOTAL_TOKEN_SUPPLY + ) { + return true; + } + this.errors.push(r[0] + $localize` row is not valid`); + return false; + }) + .map((r: string[]) => + this.tableConfig + .map((c, index) => ({ [c.key]: r[index] })) + .reduce((acc, e) => ({ ...acc, ...e }), {}), + ); + } catch (err) { + console.log('Error while parsing CSV file', err); + this.fileName = null; + this.airdropData = []; + } + this.cd.markForCheck(); + }, + }); + return false; + } + + public generateTemplate(): void { + const fields = ['', ...this.tableConfig.map((r) => r.label)] as string[]; + + const csv = Papa.unparse({ + fields, + data: [], + }); + + download(`data:text/csv;charset=utf-8${csv}`, 'soonaverse_airdrop_template.csv'); + } + + public formatSubmitData(): any { + return { + token: this.data.token$.value?.uid, + drops: this.airdropData.map((r) => ({ + recipient: r.address, + count: Math.floor( + Number(r.amount) * Math.pow(10, getDefDecimalIfNotSet(this.data.token$.value?.decimals)), + ), + vestingAt: dayjs(r.vestingAt).toISOString(), + stakeType: r.stakeType ? r.stakeType.toLocaleLowerCase() : StakeType.STATIC, + })), + }; + } + + public async submit(): Promise { + if (!this.airdropData.length) return; + + if (this.data.token$.value?.mintingData) { + this.isAirdropModalOpen = true; + this.cd.markForCheck(); + return; + } + + await this.auth.sign(this.formatSubmitData(), (sc, finish) => { + this.notification + .processRequest(this.tokenApi.airdropToken(sc), 'Submitted.', finish) + .subscribe(() => { + this.router.navigate(['/', ROUTER_UTILS.config.token.root, this.data.token$.value?.uid]); + }); + }); + } +} diff --git a/src/app/pages/token/pages/metrics/metrics.page.html b/src/app/pages/token/pages/metrics/metrics.page.html new file mode 100644 index 0000000..cfdf07b --- /dev/null +++ b/src/app/pages/token/pages/metrics/metrics.page.html @@ -0,0 +1,48 @@ + + + + + +
    +
    + + +
    + {{ (data.token$ | async)?.totalSupply | formatToken:(data.token$ | + async)?.uid:false:false | async }} + {{ ' ' + (data.token$ | async)?.symbol }} +
    +
    + +
    +
    +
    +
    +
    {{ a.title }}
    +
    + {{ a.percentage }}% ({{ percentageTokenAmount(a, (data.token$ | async) || undefined) }}) +
    +
    +
    +
    +
    +
    diff --git a/src/app/pages/token/pages/metrics/metrics.page.less b/src/app/pages/token/pages/metrics/metrics.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/token/pages/metrics/metrics.page.ts b/src/app/pages/token/pages/metrics/metrics.page.ts new file mode 100644 index 0000000..025dbf1 --- /dev/null +++ b/src/app/pages/token/pages/metrics/metrics.page.ts @@ -0,0 +1,149 @@ +import { DecimalPipe } from '@angular/common'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core'; +import { + DescriptionItem, + DescriptionItemType, +} from '@components/description/description.component'; +import { FormatTokenPipe } from '@core/pipes/formatToken/format-token.pipe'; +import { UnitsService } from '@core/services/units'; +import { TOKEN_METRICS_INITIAL_COLORS, getRandomColor } from '@core/utils/colors.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/token/services/data.service'; +import { HelperService } from '@pages/token/services/helper.service'; +import { Token, TokenAllocation, getDefDecimalIfNotSet } from '@soonaverse/interfaces'; +import { ChartConfiguration, ChartType } from 'chart.js'; + +@UntilDestroy() +@Component({ + selector: 'wen-metrics', + templateUrl: './metrics.page.html', + styleUrls: ['./metrics.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MetricsPage implements OnInit { + public colors: string[] = []; + public doughnutChartType: ChartType = 'doughnut'; + public doughnutChartData?: ChartConfiguration['data'] = { + datasets: [], + }; + public doughnutChartOptions?: any = { + events: [], + plugins: { + legend: { + display: false, + }, + }, + elements: { + arc: { + borderWidth: 0, + }, + }, + cutout: '75%', + }; + public breakdownData: DescriptionItem[] = []; + + constructor( + public data: DataService, + public helper: HelperService, + public unitsService: UnitsService, + public formatToken: FormatTokenPipe, + private decimalPipe: DecimalPipe, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + this.data.token$.pipe(untilDestroyed(this)).subscribe(async (token) => { + this.breakdownData = [ + { + title: $localize`Total token supply`, + type: DescriptionItemType.DEFAULT_NO_TRUNCATE, + value: + this.decimalPipe.transform( + (token?.totalSupply || 0) / Math.pow(10, getDefDecimalIfNotSet(token?.decimals)), + '1.0-2', + ) + + ' ' + + token?.symbol, + extraValue: `(${await this.formatToken.transform( + this.helper.percentageMarketCap(100, token), + token?.uid, + true, + )})`, + }, + ]; + if (!this.helper.isMinted(token)) { + this.breakdownData.push({ + title: $localize`Launchpad price per token`, + type: DescriptionItemType.DEFAULT_NO_TRUNCATE, + value: (token?.pricePerToken || 0) + ' ' + this.unitsService.label(), + }); + + for (const a of token?.allocations || []) { + this.breakdownData.push({ + title: a.title + ' (' + $localize`Initial Cap` + ')', + type: DescriptionItemType.DEFAULT_NO_TRUNCATE, + value: a.percentage + '%', + extraValue: `(${await this.formatToken.transform( + this.helper.percentageMarketCap(a.percentage, token), + token?.uid, + true, + )})`, + }); + } + } else { + this.breakdownData.push({ + title: $localize`Total melted tokens`, + type: DescriptionItemType.DEFAULT_NO_TRUNCATE, + value: + this.decimalPipe.transform( + (token?.mintingData?.meltedTokens || 0) / + Math.pow(10, getDefDecimalIfNotSet(token?.decimals)), + '1.0-2', + ) + + ' ' + + token?.symbol, + }); + } + + this.setLineChartData(token); + this.cd.markForCheck(); + }); + } + + public setLineChartData(token?: Token): void { + if (!token) return; + this.colors = [ + ...TOKEN_METRICS_INITIAL_COLORS.slice(0, token.allocations.length), + ...new Array(Math.max(token.allocations.length - TOKEN_METRICS_INITIAL_COLORS.length, 0)) + .fill(null) + .map(() => getRandomColor()), + ]; + this.doughnutChartData = { + labels: token.allocations.map((a) => a.title), + datasets: [ + { + label: 'Dataset 1', + data: token.allocations.map((a) => Number(a.percentage)), + backgroundColor: this.colors, + }, + ], + }; + this.cd.markForCheck(); + } + + public percentageTokenAmount(a: TokenAllocation, token?: Token): string { + if (!token) return ''; + return ( + this.decimalPipe.transform( + ( + ((token.totalSupply / Math.pow(10, getDefDecimalIfNotSet(token?.decimals))) * + Number(a.percentage)) / + 100 + ).toFixed(2), + '1.0-2', + ) + + ' ' + + token.symbol + ); + } +} diff --git a/src/app/pages/token/pages/new/introduction/introduction.component.html b/src/app/pages/token/pages/new/introduction/introduction.component.html new file mode 100644 index 0000000..1ab750b --- /dev/null +++ b/src/app/pages/token/pages/new/introduction/introduction.component.html @@ -0,0 +1,74 @@ +
    +
    +
    + +
    + You can create only ONE token per space and it can never be changed. +
    +
    + +
    + +
    + Important information for creating a token on Soonaverse: Please read the instructions and + fill out an application form available on this screen if you want to do public sale or make + you token available on Soonaverse exchange. +
    +
    + + +
    + +
    + + + + + + +
    +
    + + diff --git a/src/app/pages/token/pages/new/introduction/introduction.component.less b/src/app/pages/token/pages/new/introduction/introduction.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/token/pages/new/introduction/introduction.component.ts b/src/app/pages/token/pages/new/introduction/introduction.component.ts new file mode 100644 index 0000000..45bf361 --- /dev/null +++ b/src/app/pages/token/pages/new/introduction/introduction.component.ts @@ -0,0 +1,26 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { StepType } from '../new.page'; + +@Component({ + selector: 'wen-new-introduction', + templateUrl: './introduction.component.html', + styleUrls: ['./introduction.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NewIntroductionComponent { + @Output() wenOnTabChange = new EventEmitter(); + + constructor(public deviceService: DeviceService) {} + + public get stepTypes(): typeof StepType { + return StepType; + } + + public onFillForm(): void { + window?.open( + 'https://docs.google.com/forms/d/1eVncgmw8SaNm_5VzxP8FTYQ9s_pHBXyQQ4pTM1ScT0I', + '_blank', + ); + } +} diff --git a/src/app/pages/token/pages/new/metrics/metrics.component.html b/src/app/pages/token/pages/new/metrics/metrics.component.html new file mode 100644 index 0000000..0099a7a --- /dev/null +++ b/src/app/pages/token/pages/new/metrics/metrics.component.html @@ -0,0 +1,347 @@ +
    +
    + +
    + + Name + + + + + + Symbol + + + + +
    +
    + + +
    + + Price per token (MIOTA) + + + + + + Number of Decimals + + + + + + Total token supply + + + + +
    +
    + + + + +
    + + Title + + + + + + % of tokens for sale + + + + + + + +
    +
    +
    +
    Only 1 of the allocations can be public
    + +
    +
    +
    Invalid sum of percentages
    + +
    + + + + +
    + +
    + +
    + + + + + + + + + + + +
    + + + + + jpeg/png/webp + + + + +
    +
    + + + + + + + + + + {{ opt.label }} + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + diff --git a/src/app/pages/token/pages/new/metrics/metrics.component.less b/src/app/pages/token/pages/new/metrics/metrics.component.less new file mode 100644 index 0000000..3bd89b7 --- /dev/null +++ b/src/app/pages/token/pages/new/metrics/metrics.component.less @@ -0,0 +1,7 @@ +.wen-radio-group { + display: grid; + input { + width: 100px; + margin-left: 10px; + } +} diff --git a/src/app/pages/token/pages/new/metrics/metrics.component.ts b/src/app/pages/token/pages/new/metrics/metrics.component.ts new file mode 100644 index 0000000..c9851ec --- /dev/null +++ b/src/app/pages/token/pages/new/metrics/metrics.component.ts @@ -0,0 +1,124 @@ +import { DecimalPipe } from '@angular/common'; +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + OnInit, + Output, +} from '@angular/core'; +import { + DescriptionItem, + DescriptionItemType, +} from '@components/description/description.component'; +import { DeviceService } from '@core/services/device'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/token/services/data.service'; +import { HelperService } from '@pages/token/services/helper.service'; +import { NewService } from '@pages/token/services/new.service'; +import { Token, TokenAllocation, getDefDecimalIfNotSet } from '@soonaverse/interfaces'; +import { merge } from 'rxjs'; +import { StepType } from '../new.page'; + +@UntilDestroy() +@Component({ + selector: 'wen-new-metrics', + templateUrl: './metrics.component.html', + styleUrls: ['./metrics.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NewMetricsComponent implements OnInit { + @Output() wenOnTabChange = new EventEmitter(); + + public isTotalValid = true; + public isPublicSaleValid = true; + public breakdownData: DescriptionItem[] = []; + + constructor( + public newService: NewService, + public deviceService: DeviceService, + public data: DataService, + public helper: HelperService, + private cd: ChangeDetectorRef, + private decimalPipe: DecimalPipe, + ) {} + + public ngOnInit(): void { + this.newService.allocations?.valueChanges + .pipe(untilDestroyed(this)) + .subscribe((allocations: TokenAllocation[]) => { + const total = allocations.reduce((acc, act) => acc + Number(act.percentage), 0); + const publicSales = allocations.filter((a) => a.isPublicSale); + this.isTotalValid = total === 100; + this.isPublicSaleValid = publicSales.length <= 1; + this.cd.markForCheck(); + }); + + merge( + this.newService.allocations?.valueChanges, + this.newService.priceControl?.valueChanges, + this.newService.decimalsControl?.valueChanges, + this.newService.totalSupplyControl?.valueChanges, + ) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.setBreakdownData(); + this.cd.markForCheck(); + }); + } + + public get stepTypes(): typeof StepType { + return StepType; + } + + public getAllocationTitle(index: number): string { + return index === 1 + ? $localize`Token allocation` + : $localize`Allocation` + ` #${index >= 10 ? index : '0' + index}`; + } + + public getAllocationDescription(index: number): string { + return index === 1 + ? $localize`Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved.` + : ''; + } + + private setBreakdownData(): void { + if ( + !this.newService.allocations.value?.length || + !this.newService.totalSupplyControl?.value || + !this.newService.priceControl?.value + ) { + this.breakdownData = []; + } else { + this.breakdownData = [ + { + title: $localize`Total token supply (no decimals)`, + type: DescriptionItemType.DEFAULT_NO_TRUNCATE, + value: this.decimalPipe.transform( + Number(this.newService.totalSupplyControl?.value) * + Math.pow(10, getDefDecimalIfNotSet(this.newService.decimalsControl?.value)), + '1.0-2', + ), + }, + { + title: $localize`Price per token`, + type: DescriptionItemType.DEFAULT_NO_TRUNCATE, + value: (this.newService.priceControl?.value || 0) + ' Mi', + }, + ...(this.newService.allocations.value || []) + .filter((a: TokenAllocation) => a.title && a.percentage) + .map((a: TokenAllocation) => ({ + title: a.title, + type: DescriptionItemType.DEFAULT_NO_TRUNCATE, + value: a.percentage + '%', + extraValue: `(${this.helper.percentageMarketCap(a.percentage, { + pricePerToken: Number(this.newService.priceControl?.value), + totalSupply: this.newService.totalSupplyControl?.value, + } as Token)} Mi)`, + })), + ]; + } + } +} diff --git a/src/app/pages/token/pages/new/new.page.html b/src/app/pages/token/pages/new/new.page.html new file mode 100644 index 0000000..752cc9a --- /dev/null +++ b/src/app/pages/token/pages/new/new.page.html @@ -0,0 +1,42 @@ + +

    Create token

    + +
    + +
    + {{ s.label }} +
    +
    +
    +
    + +
    + + + + +
    +
    diff --git a/src/app/pages/token/pages/new/new.page.less b/src/app/pages/token/pages/new/new.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/token/pages/new/new.page.ts b/src/app/pages/token/pages/new/new.page.ts new file mode 100644 index 0000000..b50d5d7 --- /dev/null +++ b/src/app/pages/token/pages/new/new.page.ts @@ -0,0 +1,158 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core'; +import { AbstractControl } from '@angular/forms'; +import { Router } from '@angular/router'; +import { MemberApi } from '@api/member.api'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { SeoService } from '@core/services/seo'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { NewService } from '@pages/token/services/new.service'; +import { Access, TokenAllocation, getDefDecimalIfNotSet } from '@soonaverse/interfaces'; + +export enum StepType { + INTRODUCTION = 'Introduction', + METRICS = 'Metrics', + OVERVIEW = 'Overview', + SUMMARY = 'Summary', +} + +@UntilDestroy() +@Component({ + selector: 'wen-new', + templateUrl: './new.page.html', + styleUrls: ['./new.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NewPage implements OnInit { + public currentStep = StepType.INTRODUCTION; + public sections = [ + { step: StepType.INTRODUCTION, label: $localize`Introduction` }, + { step: StepType.METRICS, label: $localize`Metrics` }, + { step: StepType.OVERVIEW, label: $localize`Overview` }, + { step: StepType.SUMMARY, label: $localize`Summary` }, + ]; + + public controlToStepMap: Map = new Map([ + [this.newService.nameControl, StepType.METRICS], + [this.newService.symbolControl, StepType.METRICS], + [this.newService.priceControl, StepType.METRICS], + [this.newService.totalSupplyControl, StepType.METRICS], + [this.newService.spaceControl, StepType.METRICS], + [this.newService.iconControl, StepType.METRICS], + [this.newService.termsAndConditionsLinkControl, StepType.METRICS], + [this.newService.distributionControl, StepType.OVERVIEW], + [this.newService.titleControl, StepType.OVERVIEW], + [this.newService.descriptionControl, StepType.OVERVIEW], + [this.newService.shortTitleControl, StepType.OVERVIEW], + [this.newService.shortDescriptionControl, StepType.OVERVIEW], + ]); + + public arrayToStepMap: Map = new Map([ + [this.newService.allocations, StepType.METRICS], + [this.newService.links, StepType.OVERVIEW], + ]); + + constructor( + public deviceService: DeviceService, + public newService: NewService, + private notification: NotificationService, + private auth: AuthService, + private memberApi: MemberApi, + private tokenApi: TokenApi, + private router: Router, + private cd: ChangeDetectorRef, + private seo: SeoService, + ) {} + + public ngOnInit(): void { + this.seo.setTags( + $localize`New Token`, + $localize`Start your own crypto project on the secure, fee-less Shimmer network. Create your token today.`, + ); + + this.auth.member$?.pipe(untilDestroyed(this)).subscribe((o) => { + if (o?.uid) { + this.memberApi + .allSpacesAsMember(o.uid) + .pipe(untilDestroyed(this)) + .subscribe((r) => { + this.newService.spaces$.next(r); + }); + } + }); + } + + public get stepTypes(): typeof StepType { + return StepType; + } + + private validateForm(): boolean { + this.newService.tokenForm.updateValueAndValidity(); + if (!this.newService.tokenForm.valid) { + Object.values(this.newService.tokenForm.controls).forEach((control) => { + if (control.invalid) { + control.markAsDirty(); + control.updateValueAndValidity({ onlySelf: true }); + this.currentStep = + this.controlToStepMap.get(control) || + this.arrayToStepMap.get(control) || + this.currentStep; + this.cd.markForCheck(); + return; + } + }); + return false; + } + const total = (this.newService.allocations.value as TokenAllocation[]).reduce( + (acc, act) => acc + Number(act.percentage), + 0, + ); + const publicSales = (this.newService.allocations.value as TokenAllocation[]).filter( + (a) => a.isPublicSale, + ); + if (total !== 100 && publicSales.length > 1) { + this.currentStep = StepType.METRICS; + this.cd.markForCheck(); + return false; + } + return true; + } + + public formatSubmitData(data: any): any { + const res: any = {}; + + res.name = data.name; + res.symbol = data.symbol; + res.title = data.title; + res.description = data.description; + res.space = data.space; + res.access = Access.OPEN; + res.pricePerToken = Number(data.price); + res.totalSupply = Number(data.totalSupply * Math.pow(10, getDefDecimalIfNotSet(data.decimals))); + res.allocations = data.allocations; + res.links = data.links.map((l: { url: string }) => l.url); + res.icon = data.icon; + res.overviewGraphics = data.introductionary; + res.termsAndConditions = data.termsAndConditionsLink; + res.shortDescriptionTitle = data.shortTitle; + res.shortDescription = data.shortDescription; + res.decimals = data.decimals; + return res; + } + + public async submit(): Promise { + if (!this.validateForm()) { + return; + } + await this.auth.sign(this.formatSubmitData(this.newService.tokenForm.value), (sc, finish) => { + this.notification + .processRequest(this.tokenApi.create(sc), 'Created.', finish) + .subscribe((val: any) => { + this.router.navigate([ROUTER_UTILS.config.token.root, val?.uid]); + }); + }); + } +} diff --git a/src/app/pages/token/pages/new/overview/overview.component.html b/src/app/pages/token/pages/new/overview/overview.component.html new file mode 100644 index 0000000..cbdd5e8 --- /dev/null +++ b/src/app/pages/token/pages/new/overview/overview.component.html @@ -0,0 +1,215 @@ +
    +
    + + + +
    + + Title + + + + + + Description + + + + +
    +
    + + + + +
    + + Title + + + + + + Description + + + + +
    +
    + + +
    + +
    + +
    + + + + +
    + + + + + + jpg/jpeg/png/webp/mp4 + + + + +
    +
    + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    + + diff --git a/src/app/pages/token/pages/new/overview/overview.component.less b/src/app/pages/token/pages/new/overview/overview.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/token/pages/new/overview/overview.component.ts b/src/app/pages/token/pages/new/overview/overview.component.ts new file mode 100644 index 0000000..d21df74 --- /dev/null +++ b/src/app/pages/token/pages/new/overview/overview.component.ts @@ -0,0 +1,20 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core'; +import { DeviceService } from '@core/services/device'; +import { NewService } from '@pages/token/services/new.service'; +import { StepType } from '../new.page'; + +@Component({ + selector: 'wen-new-overview', + templateUrl: './overview.component.html', + styleUrls: ['./overview.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NewOverviewComponent { + @Output() wenOnTabChange = new EventEmitter(); + + constructor(public newService: NewService, public deviceService: DeviceService) {} + + public get stepTypes(): typeof StepType { + return StepType; + } +} diff --git a/src/app/pages/token/pages/new/summary/summary.component.html b/src/app/pages/token/pages/new/summary/summary.component.html new file mode 100644 index 0000000..3e48c40 --- /dev/null +++ b/src/app/pages/token/pages/new/summary/summary.component.html @@ -0,0 +1,368 @@ +
    +
    +
    +
    +
    Token info
    + +
    + +
    + Name +
    + +
    + {{ newService.nameControl.value }} +
    + +
    + Symbol +
    + +
    + {{ newService.symbolControl.value }} +
    + +
    + Decimals +
    + +
    + {{ newService.decimalsControl.value }} +
    +
    + +
    +
    +
    Token supply
    + +
    + +
    + Price per token +
    + +
    + {{ newService.priceControl.value }} +
    + +
    + Total token supply +
    + +
    + {{ + (newService.totalSupplyControl.value | number : '1.0-2') + + ' ' + + newService.symbolControl.value + }} +
    +
    + +
    +
    Token description
    + +
    + +
    +
    + Description title +
    + +
    + {{ newService.titleControl.value }} +
    + +
    + Description +
    + +
    + {{ newService.descriptionControl.value }} +
    +
    + +
    +
    Short description
    + +
    + +
    +
    + Short description title +
    + +
    + {{ newService.shortTitleControl.value }} +
    + +
    + Short description +
    + +
    + {{ newService.shortDescriptionControl.value }} +
    +
    + +
    +
    Token allocation
    + +
    + +
    +
    {{ getAllocationTitle(i + 1) }}
    + +
    + Allocation title +
    + +
    + {{ newService.gForm(allocation, 'title')?.value }} +
    + +
    + % of tokens for sale (Default 100%) +
    + +
    + {{ newService.gForm(allocation, 'percentage')?.value }} +
    + +
    +
    + +
    +
    Public sale
    +
    +
    + + +
    + +
    + +
    + +
    + + +
    + {{ (cache.getSpace(newService.spaceControl.value) | async)?.name }} +
    +
    +
    + + + + + + + + + + + + + + + + + + {{ opt.label }} + + + + + + + + + + + + + + + + + + {{ newService.nameControl.value | truncate : [16] }}: + Terms&conditions + + + +
    +
    + + diff --git a/src/app/pages/token/pages/new/summary/summary.component.less b/src/app/pages/token/pages/new/summary/summary.component.less new file mode 100644 index 0000000..c5715a4 --- /dev/null +++ b/src/app/pages/token/pages/new/summary/summary.component.less @@ -0,0 +1,15 @@ +.wen-radio-group { + display: grid; + input { + width: 100px; + margin-left: 10px; + } +} + +.wen-links { + @apply w-max flex items-center px-0 space-x-3 text-sm font-medium text-foregrounds-primary dark:text-foregrounds-primary-dark hover:text-buttons-primary-on-hover dark:text-buttons-primary-on-hover-dark truncate; +} + +.link-icon { + @apply text-icons-secondary dark:text-icons-secondary-dark !important; +} diff --git a/src/app/pages/token/pages/new/summary/summary.component.ts b/src/app/pages/token/pages/new/summary/summary.component.ts new file mode 100644 index 0000000..be92da2 --- /dev/null +++ b/src/app/pages/token/pages/new/summary/summary.component.ts @@ -0,0 +1,32 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { NewService } from '@pages/token/services/new.service'; +import { StepType } from '../new.page'; + +@Component({ + selector: 'wen-new-summary', + templateUrl: './summary.component.html', + styleUrls: ['./summary.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NewSummaryComponent { + @Output() wenOnSubmit = new EventEmitter(); + @Output() wenOnTabChange = new EventEmitter(); + + constructor( + public newService: NewService, + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public cache: CacheService, + ) {} + + public get stepTypes(): typeof StepType { + return StepType; + } + + public getAllocationTitle(index: number): string { + return $localize`Allocation` + ` #${index >= 10 ? index : '0' + index}`; + } +} diff --git a/src/app/pages/token/pages/overview/overview.page.html b/src/app/pages/token/pages/overview/overview.page.html new file mode 100644 index 0000000..6a39bb1 --- /dev/null +++ b/src/app/pages/token/pages/overview/overview.page.html @@ -0,0 +1,32 @@ +
    +
    + + +
    + + + + +
    +
    {{ (data.token$ | async)?.title }}
    +

    +
    +
    diff --git a/src/app/pages/token/pages/overview/overview.page.less b/src/app/pages/token/pages/overview/overview.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/token/pages/overview/overview.page.ts b/src/app/pages/token/pages/overview/overview.page.ts new file mode 100644 index 0000000..7c6b526 --- /dev/null +++ b/src/app/pages/token/pages/overview/overview.page.ts @@ -0,0 +1,40 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core'; +import { FileApi } from '@api/file.api'; +import { DeviceService } from '@core/services/device'; +import { PreviewImageService } from '@core/services/preview-image'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/token/services/data.service'; +import { switchMap, take } from 'rxjs'; +import { filter } from 'rxjs/operators'; + +@UntilDestroy() +@Component({ + selector: 'wen-overview', + templateUrl: './overview.page.html', + styleUrls: ['./overview.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class OverviewPage implements OnInit { + public mediaType: 'video' | 'image' | undefined; + + constructor( + public deviceService: DeviceService, + public data: DataService, + public previewImageService: PreviewImageService, + private fileApi: FileApi, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + this.data.token$ + .pipe( + filter((token) => !!token?.overviewGraphics), + switchMap((token) => this.fileApi.getMetadata(token?.overviewGraphics || '').pipe(take(1))), + untilDestroyed(this), + ) + .subscribe((o) => { + this.mediaType = o; + this.cd.markForCheck(); + }); + } +} diff --git a/src/app/pages/token/pages/token/token-buy/token-buy.component.html b/src/app/pages/token/pages/token/token-buy/token-buy.component.html new file mode 100644 index 0000000..2f72097 --- /dev/null +++ b/src/app/pages/token/pages/token/token-buy/token-buy.component.html @@ -0,0 +1,220 @@ +
    + + + + + + + + + + + + +
    + + + + + + +
    +
    + +
    Network
    +
    + + +
    + +
    + + Token was not made available on decentralised network yet. + + Token is not yet migrated to the decentralized network. Make sure you know what you are + buying. +
    +
    + + +
    +
    + + + + + + diff --git a/src/app/pages/token/pages/token/token-buy/token-buy.component.less b/src/app/pages/token/pages/token/token-buy/token-buy.component.less new file mode 100644 index 0000000..1c2785e --- /dev/null +++ b/src/app/pages/token/pages/token/token-buy/token-buy.component.less @@ -0,0 +1,7 @@ +:host { + @apply block; +} + +.red-button { + @apply text-buttons-secondary-destructive dark:text-buttons-secondary-destructive-dark !important; +} diff --git a/src/app/pages/token/pages/token/token-buy/token-buy.component.ts b/src/app/pages/token/pages/token/token-buy/token-buy.component.ts new file mode 100644 index 0000000..1777f20 --- /dev/null +++ b/src/app/pages/token/pages/token/token-buy/token-buy.component.ts @@ -0,0 +1,113 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { SpaceApi } from '@api/space.api'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { ShareComponentSize } from '@components/share/share.component'; +import { NotificationService } from '@core/services/notification'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService, TokenAction } from '@pages/token/services/data.service'; +import { HelperService } from '@pages/token/services/helper.service'; +import { Network } from '@soonaverse/interfaces'; +import { combineLatest, of, skip, switchMap } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-token-buy', + templateUrl: './token-buy.component.html', + styleUrls: ['./token-buy.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenBuyComponent implements OnInit, OnDestroy { + public isBuyTokensVisible = false; + public isScheduleSaleVisible = false; + public isCancelSaleVisible = false; + public isEditTokenVisible = false; + public isMintOnNetorkVisible = false; + + constructor( + public data: DataService, + public helper: HelperService, + private spaceApi: SpaceApi, + private auth: AuthService, + private notification: NotificationService, + private tokenApi: TokenApi, + private cd: ChangeDetectorRef, + ) {} + + public ngOnInit(): void { + this.data.triggerAction$.pipe(skip(1), untilDestroyed(this)).subscribe((v) => { + if (v === TokenAction.EDIT) { + this.reset(); + this.isEditTokenVisible = true; + this.cd.markForCheck(); + } + + if (v === TokenAction.MINT) { + this.reset(); + this.isMintOnNetorkVisible = true; + this.cd.markForCheck(); + } + }); + + combineLatest([this.auth.member$, this.data.token$]) + .pipe( + switchMap(([member, token]) => { + if (member && token?.space) { + return this.spaceApi.isGuardianWithinSpace(token?.space, member?.uid); + } + return of(null); + }), + untilDestroyed(this), + ) + .subscribe((isGuardianWithinSpace) => { + if (isGuardianWithinSpace !== null) { + this.data.isGuardianWithinSpace$.next(isGuardianWithinSpace); + } + }); + } + + public async enableTrading(): Promise { + if (!this.data.token$.value?.uid) { + return; + } + + await this.auth.sign( + { + uid: this.data.token$.value.uid, + }, + (sc, finish) => { + this.notification + .processRequest(this.tokenApi.enableTrading(sc), $localize`Trading enabled.`, finish) + .subscribe(() => { + // none. + }); + }, + ); + } + + public get shareSizes(): typeof ShareComponentSize { + return ShareComponentSize; + } + + public get networkTypes(): typeof Network { + return Network; + } + + public reset(): void { + this.isBuyTokensVisible = false; + this.isScheduleSaleVisible = false; + this.isCancelSaleVisible = false; + this.isEditTokenVisible = false; + this.isMintOnNetorkVisible = false; + } + + public ngOnDestroy(): void { + this.reset(); + } +} diff --git a/src/app/pages/token/pages/token/token-edit/token-edit.component.html b/src/app/pages/token/pages/token/token-edit/token-edit.component.html new file mode 100644 index 0000000..265d20e --- /dev/null +++ b/src/app/pages/token/pages/token/token-edit/token-edit.component.html @@ -0,0 +1,126 @@ + + + + +
    +
    Token description
    + + + Title + + + + + + Description + + + + + +
    Price per token
    + + + Price + + + + + +
    Short description
    + + + Title + + + + + + Description + + + + +
    Links
    + + + + + + + + + + +
    + + + +
    +
    +
    +
    + + +
    +
    diff --git a/src/app/pages/token/pages/token/token-edit/token-edit.component.less b/src/app/pages/token/pages/token/token-edit/token-edit.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/token/pages/token/token-edit/token-edit.component.ts b/src/app/pages/token/pages/token/token-edit/token-edit.component.ts new file mode 100644 index 0000000..4e9cb13 --- /dev/null +++ b/src/app/pages/token/pages/token/token-edit/token-edit.component.ts @@ -0,0 +1,153 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { NotificationService } from '@core/services/notification'; +import { getUrlValidator } from '@core/utils/form-validation.utils'; +import { MAX_LINKS_COUNT } from '@pages/token/services/new.service'; +import { + DEFAULT_NETWORK, + MAX_IOTA_AMOUNT, + NETWORK_DETAIL, + Token, + TokenStatus, +} from '@soonaverse/interfaces'; + +@Component({ + selector: 'wen-token-edit', + templateUrl: './token-edit.component.html', + styleUrls: ['./token-edit.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenEditComponent { + @Input() isOpen = false; + + @Input() + set token(value: Token | undefined) { + this._token = value; + this.titleControl.setValue(this.token?.title); + this.descriptionControl.setValue(this.token?.description); + this.priceControl.setValue(this.token?.pricePerToken); + this.shortDescriptionTitleControl.setValue(this.token?.shortDescriptionTitle); + this.shortDescriptionControl.setValue(this.token?.shortDescription); + this.token?.links.forEach((link) => this.addLink(link as unknown as string)); + } + + get token(): Token | undefined { + return this._token; + } + + @Output() wenOnClose = new EventEmitter(); + + public titleControl: FormControl = new FormControl('', Validators.required); + public descriptionControl: FormControl = new FormControl('', Validators.required); + public priceControl: FormControl = new FormControl('1', [ + Validators.required, + Validators.min(0), + Validators.max( + MAX_IOTA_AMOUNT / + NETWORK_DETAIL[this.token?.mintingData?.network || DEFAULT_NETWORK].divideBy, + ), + ]); + public shortDescriptionTitleControl: FormControl = new FormControl('', Validators.required); + public shortDescriptionControl: FormControl = new FormControl('', Validators.required); + public links: FormArray; + public form: FormGroup; + public maxLinksCount = MAX_LINKS_COUNT; + private _token?: Token; + + constructor( + private cd: ChangeDetectorRef, + private auth: AuthService, + private tokenApi: TokenApi, + private notification: NotificationService, + ) { + this.links = new FormArray([] as FormGroup[]); + + this.form = new FormGroup({ + title: this.titleControl, + description: this.descriptionControl, + pricePerToken: this.priceControl, + shortDescriptionTitle: this.shortDescriptionTitleControl, + shortDescription: this.shortDescriptionControl, + links: this.links, + }); + } + + public close(): void { + this.reset(); + this.wenOnClose.next(); + } + + public reset(): void { + this.isOpen = false; + this.cd.markForCheck(); + } + + private validateForm(): boolean { + this.form.updateValueAndValidity(); + if (!this.form.valid) { + Object.values(this.form.controls).forEach((control) => { + if (control.invalid) { + control.markAsDirty(); + control.updateValueAndValidity({ onlySelf: true }); + } + }); + + return false; + } + + return true; + } + + private getLinkForm(url = ''): FormGroup { + return new FormGroup({ + url: new FormControl(url, [Validators.required, getUrlValidator()]), + }); + } + + public addLink(url = ''): void { + if (this.links.controls.length < MAX_LINKS_COUNT) { + this.links.push(this.getLinkForm(url)); + } + } + + public removeLink(index: number): void { + this.links.removeAt(index); + } + + public gForm(f: any, value: string): any { + return f.get(value); + } + + public async saveChanges(): Promise { + if (!this.validateForm()) { + return; + } + + const params = { + ...this.form.value, + uid: this.token?.uid, + links: this.links.controls.map((c) => c.value.url), + }; + + if (this.token?.status !== TokenStatus.MINTED) { + params.name = this.token?.name; + } + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.tokenApi.update(sc), 'Updated.', finish) + .subscribe(() => { + this.close(); + }); + }); + } +} diff --git a/src/app/pages/token/pages/token/token-info/token-info.component.html b/src/app/pages/token/pages/token/token-info/token-info.component.html new file mode 100644 index 0000000..7137d38 --- /dev/null +++ b/src/app/pages/token/pages/token/token-info/token-info.component.html @@ -0,0 +1,100 @@ +
    + + + + + + +
    + +
    + No Oversale. Sale ends with 100% reached. +
    +
    + +
    + +
    + No Cooldown. Participants can't refund. +
    +
    +
    + + + + + + + + + + +
    diff --git a/src/app/pages/token/pages/token/token-info/token-info.component.less b/src/app/pages/token/pages/token/token-info/token-info.component.less new file mode 100644 index 0000000..5d7a439 --- /dev/null +++ b/src/app/pages/token/pages/token/token-info/token-info.component.less @@ -0,0 +1,11 @@ +:host { + @apply block; +} + +.wen-links { + @apply w-max flex items-center px-0 space-x-3 text-sm font-medium text-foregrounds-primary dark:text-foregrounds-primary-dark hover:text-buttons-primary-on-hover dark:text-buttons-primary-on-hover-dark truncate; + + *:first-child { + @apply text-icons-secondary dark:text-icons-secondary-dark; + } +} diff --git a/src/app/pages/token/pages/token/token-info/token-info.component.ts b/src/app/pages/token/pages/token/token-info/token-info.component.ts new file mode 100644 index 0000000..8ae3eca --- /dev/null +++ b/src/app/pages/token/pages/token/token-info/token-info.component.ts @@ -0,0 +1,33 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { DescriptionItemType } from '@components/description/description.component'; +import { PreviewImageService } from '@core/services/preview-image'; +import { DataService } from '@pages/token/services/data.service'; +import { HelperService } from '@pages/token/services/helper.service'; +import dayjs from 'dayjs'; +import duration from 'dayjs/plugin/duration'; + +dayjs.extend(duration); + +@Component({ + selector: 'wen-token-info', + templateUrl: './token-info.component.html', + styleUrls: ['./token-info.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenInfoComponent { + public tokenScheduleLabels: string[] = [ + $localize`Sale starts`, + $localize`Sale ends`, + $localize`Cooldown ends`, + ]; + + constructor( + public previewImageService: PreviewImageService, + public data: DataService, + public helper: HelperService, + ) {} + + public get descriptionItemTypes(): typeof DescriptionItemType { + return DescriptionItemType; + } +} diff --git a/src/app/pages/token/pages/token/token-progress/token-progress.component.html b/src/app/pages/token/pages/token/token-progress/token-progress.component.html new file mode 100644 index 0000000..e26bc66 --- /dev/null +++ b/src/app/pages/token/pages/token/token-progress/token-progress.component.html @@ -0,0 +1,167 @@ +
    + + + + + +
    + +
    +
    + + +
    + +
    +
    + {{ getPrc() | number : '1.2-2' }}% +
    +
    + + {{ getTotalPotentialTokens() | formatToken : token?.uid : false : false | async }} + {{ token?.symbol }} + + / + + {{ getPublicSaleSupply() | formatToken : token?.uid : false : false | async }} + {{ token?.symbol }} + +
    +
    + +
    + +
    + Token sale goal reached! Token distribution will be fairly calculated and overages will be + refunded. +
    +
    + + +
    +
    + + + + + + + + + +
    + + diff --git a/src/app/pages/token/pages/token/token-progress/token-progress.component.less b/src/app/pages/token/pages/token/token-progress/token-progress.component.less new file mode 100644 index 0000000..249c71a --- /dev/null +++ b/src/app/pages/token/pages/token/token-progress/token-progress.component.less @@ -0,0 +1,3 @@ +:host { + @apply block; +} diff --git a/src/app/pages/token/pages/token/token-progress/token-progress.component.ts b/src/app/pages/token/pages/token/token-progress/token-progress.component.ts new file mode 100644 index 0000000..369115f --- /dev/null +++ b/src/app/pages/token/pages/token/token-progress/token-progress.component.ts @@ -0,0 +1,107 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { DescriptionItemType } from '@components/description/description.component'; +import { UnitsService } from '@core/services/units'; +import { DataService } from '@pages/token/services/data.service'; +import { HelperService } from '@pages/token/services/helper.service'; +import { Token, TokenDistribution, TokenStatus } from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; + +@Component({ + selector: 'wen-token-progress', + templateUrl: './token-progress.component.html', + styleUrls: ['./token-progress.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenProgressComponent { + @Input() token?: Token; + @Input() memberDistribution?: TokenDistribution; + public openTokenRefund?: TokenDistribution | null; + public tokenActionTypeLabel = $localize`Refund`; + public descriptionLabels = [ + $localize`Your Deposit`, + $localize`Potential Tokens`, + $localize`Token Owned`, + $localize`Total Deposit`, + $localize`Total Participants`, + ]; + + constructor( + public data: DataService, + public helper: HelperService, + public unitsService: UnitsService, + ) {} + + public getCountdownDate(): Date { + return dayjs(this.token?.saleStartDate?.toDate()) + .add(this.token?.saleLength || 0, 'ms') + .toDate(); + } + + public get descriptionItemTypes(): typeof DescriptionItemType { + return DescriptionItemType; + } + + public getCountdownTitle(): string { + return $localize`Sale ends in`; + } + + public isPreMinted(): boolean { + return this.token?.status === TokenStatus.PRE_MINTED; + } + + public getCountdownStartDate(): Date { + return dayjs(this.token?.saleStartDate?.toDate()).toDate(); + } + + public getCountdownCooldownDate(): Date { + return dayjs(this.token?.coolDownEnd?.toDate()).toDate(); + } + + public getInProgressTitle(): string { + if (this.helper.isInCooldown(this.token)) { + return $localize`Cooldown in progress`; + } else { + return $localize`Sale in progress`; + } + } + + public getCountdownTitleStart(): string { + return $localize`Sale starts in`; + } + + public getCountdownCoolDownTitleStart(): string { + return $localize`Cooldown ends in`; + } + + public getPublicSaleSupply(): number { + let sup = 0; + this.token?.allocations.forEach((b) => { + if (b.isPublicSale) { + sup = b.percentage / 100; + } + }); + + return (this.token?.totalSupply || 0) * sup; + } + + public getPotentialTokens(): number { + if (!this.memberDistribution?.totalDeposit) { + return 0; + } + + return (this.memberDistribution?.totalDeposit || 0) / (this.token?.pricePerToken || 0); + } + + public getTotalPotentialTokens(): number { + if (!this.token?.totalDeposit) { + return 0; + } + + return (this.token?.totalDeposit || 0) / (this.token?.pricePerToken || 0); + } + + public getPrc(): number { + const prc = this.getTotalPotentialTokens() / this.getPublicSaleSupply(); + return (prc > 1 ? 1 : prc) * 100; + } +} diff --git a/src/app/pages/token/pages/token/token.page.html b/src/app/pages/token/pages/token/token.page.html new file mode 100644 index 0000000..5f90b56 --- /dev/null +++ b/src/app/pages/token/pages/token/token.page.html @@ -0,0 +1,133 @@ + + + + + +
    +
    +
    + + + +
    {{ (data.space$ | async)?.name }}
    +
    + + Token + Pending + + Rejected + + {{getLatestStatus((data.token$ | async) || undefined)}} + +
    + + +
    + {{(data.tokenStats$ | async)?.votes?.upvotes || 0 | number: '1.0-2'}} +
    + + + +
    + {{(data.tokenStats$ | async)?.votes?.downvotes || 0 | number: '1.0-2'}} +
    +
    + + + +
    + Rank +
    +
    + {{(data.tokenStats$ | async)?.ranks?.avg || 0 | number: '1.0-2'}} ({{(data.tokenStats$ + | async)?.ranks?.count || 0 | number: '1.0-2'}}) +
    +
    +
    +
    + +

    {{ (data.token$ | async)?.name }}

    + + + +
    + +
    + +
    +
    +
    + + + + + +
    +
    + + +
    + + +

    {{ (data.token$ | async)?.name }}

    + + +
    +
    +
    diff --git a/src/app/pages/token/pages/token/token.page.less b/src/app/pages/token/pages/token/token.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/token/pages/token/token.page.ts b/src/app/pages/token/pages/token/token.page.ts new file mode 100644 index 0000000..c190036 --- /dev/null +++ b/src/app/pages/token/pages/token/token.page.ts @@ -0,0 +1,263 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { FileApi } from '@api/file.api'; +import { SpaceApi } from '@api/space.api'; +import { TokenApi } from '@api/token.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { SeoService } from '@core/services/seo'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService, TokenAction } from '@pages/token/services/data.service'; +import { HelperService } from '@pages/token/services/helper.service'; +import { COL, Member, RANKING, RANKING_TEST, Token, TokenStatus } from '@soonaverse/interfaces'; +import { NzNotificationService } from 'ng-zorro-antd/notification'; +import { BehaviorSubject, debounceTime, first, interval, skip, Subscription, take } from 'rxjs'; + +@UntilDestroy() +@Component({ + selector: 'wen-token', + templateUrl: './token.page.html', + styleUrls: ['./token.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TokenPage implements OnInit, OnDestroy { + public overviewSection = { + route: [ROUTER_UTILS.config.token.overview], + label: $localize`Overview`, + }; + public metricsSection = { route: [ROUTER_UTILS.config.token.metrics], label: $localize`Metrics` }; + public guardianOnlySection = { + route: [ROUTER_UTILS.config.token.airdrops], + label: $localize`Airdrops`, + }; + public sections = [this.overviewSection, this.metricsSection]; + public isTokenInfoVisible = false; + public isGuardianWithinSpace$: BehaviorSubject = new BehaviorSubject(false); + public rankingConfig = environment.production === true ? RANKING : RANKING_TEST; + private guardiansRankModeratorSubscription$?: Subscription; + private subscriptions$: Subscription[] = []; + private memberDistributionSub$?: Subscription; + private guardiansSubscription$?: Subscription; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public data: DataService, + public helper: HelperService, + private auth: AuthService, + private notification: NotificationService, + private cd: ChangeDetectorRef, + private nzNotification: NzNotificationService, + private tokenApi: TokenApi, + private spaceApi: SpaceApi, + private route: ActivatedRoute, + private seo: SeoService, + private fileApi: FileApi, + ) {} + + public ngOnInit(): void { + this.deviceService.viewWithSearch$.next(false); + this.route.params?.pipe(untilDestroyed(this)).subscribe((obj) => { + const id: string | undefined = obj?.[ROUTER_UTILS.config.token.token.replace(':', '')]; + if (id) { + this.listenToToken(id); + this.data.loadServiceModuleData(id); + } + + setTimeout(() => { + if (obj?.edit === 'true' || obj?.edit === true) { + this.data.triggerAction$.next(TokenAction.EDIT); + } + + if (obj?.mint === 'true' || obj?.mint === true) { + this.data.triggerAction$.next(TokenAction.MINT); + } + }, 500); + }); + + this.auth.member$.pipe(untilDestroyed(this)).subscribe(() => { + this.listenToRankGuardian(); + }); + + this.data.token$.pipe(skip(1), first()).subscribe((t) => { + if (t) { + this.fileApi + .getMetadata(t?.overviewGraphics || '') + .pipe(take(1), untilDestroyed(this)) + .subscribe((o) => { + this.seo.setTags( + $localize`Token` + ' - ' + this.helper.getPair(t), + $localize`Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today.`, + o === 'image' ? t.overviewGraphics : undefined, + ); + }); + this.subscriptions$.push( + this.spaceApi.listen(t.space).pipe(untilDestroyed(this)).subscribe(this.data.space$), + ); + this.subscriptions$.push( + this.tokenApi + .getDistributions(t.uid) + .pipe(debounceTime(2500), untilDestroyed(this)) + .subscribe(this.data.distributions$), + ); + this.listenToMemberSubs(this.auth.member$.value); + this.listenToRankGuardian(); + // We hide metrics for now because once token is minted we don't update token supply + if (this.helper.isMinted(t)) { + this.sections = [this.overviewSection, this.metricsSection]; + } + } + }); + + this.auth.member$?.pipe(untilDestroyed(this)).subscribe((member) => { + this.listenToMemberSubs(member); + }); + + this.isGuardianWithinSpace$.pipe(untilDestroyed(this)).subscribe((t) => { + const has = this.sections.indexOf(this.guardianOnlySection); + if (t && has === -1) { + this.sections.push(this.guardianOnlySection); + } else if (has > -1) { + this.sections.splice(3, 1); + } + + this.sections = [...this.sections]; + this.cd.markForCheck(); + }); + + // Ticket to refresh view after sale starts. + let activated = false; + const intervalSubs = interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + if (!activated && this.helper.isAfterSaleStarted()) { + this.data.token$.next(this.data.token$.value); + activated = true; + intervalSubs.unsubscribe(); + } + }); + } + + private listenToRankGuardian(): void { + // Once we load proposal let's load guardians for the space. + if (this.guardiansRankModeratorSubscription$) { + this.guardiansRankModeratorSubscription$.unsubscribe(); + } + + if (this.auth.member$.value?.uid) { + this.guardiansRankModeratorSubscription$ = this.spaceApi + .isGuardianWithinSpace(this.rankingConfig.tokenSpace, this.auth.member$.value.uid) + .pipe(untilDestroyed(this)) + .subscribe((v) => { + this.data.isGuardianInRankModeratorSpace$.next(v); + }); + } + } + + public async vote(direction: -1 | 0 | 1): Promise { + if (!this.data.token$?.value?.uid) { + return; + } + + await this.auth.sign( + { collection: COL.TOKEN, uid: this.data.token$.value.uid, direction }, + (sc, finish) => { + this.notification.processRequest(this.tokenApi.vote(sc), 'Voted', finish).subscribe(() => { + // none. + }); + }, + ); + } + + public async rank(): Promise { + if (!this.data.token$?.value?.uid) { + return; + } + + const rankUnparsed: string | null = prompt('Enter your rank!\nEither OK or Cancel.'); + if (!rankUnparsed) { + return; + } + + const rank = parseInt(rankUnparsed); + if (!(rank >= this.rankingConfig.MIN_RANK && rank <= this.rankingConfig.MAX_RANK)) { + this.nzNotification.error( + $localize`Rank amount must be between ` + + this.rankingConfig.MIN_RANK + + ' -> ' + + this.rankingConfig.MAX_RANK, + '', + ); + return; + } + + await this.auth.sign( + { collection: COL.TOKEN, uid: this.data.token$.value.uid, rank }, + (sc, finish) => { + this.notification.processRequest(this.tokenApi.rank(sc), 'Ranked', finish).subscribe(() => { + // none. + }); + }, + ); + } + + private listenToMemberSubs(member: Member | undefined): void { + this.memberDistributionSub$?.unsubscribe(); + this.guardiansSubscription$?.unsubscribe(); + if (member?.uid && this.data.token$.value?.uid) { + this.memberDistributionSub$ = this.tokenApi + .getMembersDistribution(this.data.token$.value?.uid, member.uid) + .subscribe(this.data.memberDistribution$); + this.guardiansSubscription$ = this.spaceApi + .isGuardianWithinSpace(this.data.token$.value?.space, member?.uid) + .pipe(untilDestroyed(this)) + .subscribe(this.isGuardianWithinSpace$); + } else { + this.data.memberDistribution$?.next(undefined); + } + } + + private listenToToken(id: string): void { + this.cancelSubscriptions(); + this.subscriptions$.push( + this.tokenApi.listen(id).pipe(untilDestroyed(this)).subscribe(this.data.token$), + ); + this.subscriptions$.push( + this.tokenApi.stats(id).pipe(untilDestroyed(this)).subscribe(this.data.tokenStats$), + ); + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public getLatestStatus(token?: Token): string { + if (this.helper.isSalesInProgress(token) && !this.helper.isInCooldown(token)) { + return $localize`Ongoing Sale`; + } else if (this.helper.isScheduledForSale(token) && !this.helper.isInCooldown(token)) { + return $localize`Scheduled`; + } else if (this.helper.isInCooldown(token)) { + return $localize`Cooldown`; + } else if (token?.status === TokenStatus.PROCESSING) { + return $localize`Processing`; + } else { + return $localize`Available`; + } + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/token/pages/trade/trade.page.html b/src/app/pages/token/pages/trade/trade.page.html new file mode 100644 index 0000000..bacaf78 --- /dev/null +++ b/src/app/pages/token/pages/trade/trade.page.html @@ -0,0 +1,1278 @@ + +
    +
    +
    + + + + + + + + + +
    + + + +
    + +
    +
    + +
    + +
    + + Order book + + + Token chart + + + Trade history + +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + +
    +
    + + + + +
    + + + + + + + +
    +
    +
    + + +
    +
    My trading
    +
    + + Open buy orders + + + Open sell orders + + + Order history + +
    +
    + +
    + + + + Date + + Amount ({{ ((data.token$ | async)?.symbol === 'IOTA' + ? 'M' : '') + (data.token$ | async)?.symbol }}) + + + Total ({{ networkDetails[(data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | async)?.mintingData?.network || + defaultNetwork].label }}) + + + Price ({{ networkDetails[(data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | async)?.mintingData?.network || + defaultNetwork].label }}) + + Fulfilled + Action + + + + + {{ item.createdOn?.toDate() | date:"short" }} + + {{ item.count | formatToken: (data.token$ | async)?.uid:false:false | async }} + + + {{ (item.price * item.count) | formatToken: (data.token$ | async)?.uid:false:false:2 | + async }} + + + {{ { value: item.price, exponents: getDefaultNetworkDecimals()} | formatToken: ( + (data.token$ | async)?.mintingData?.networkFormat || (data.token$ | + async)?.mintingData?.network) : false:false | async}} + + {{ helper.getTradeOrderStatus(item) }} + + Cancel + + + + + + +
    + There are no buys +
    +
    + + + + + Date + + Amount ({{ ((data.token$ | async)?.symbol === 'IOTA' + ? 'M' : '') + (data.token$ | async)?.symbol }}) + + + Total ({{ networkDetails[(data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | async)?.mintingData?.network || + defaultNetwork].label }}) + + + Price ({{ networkDetails[(data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | async)?.mintingData?.network || + defaultNetwork].label }}) + + Fulfilled + Action + + + + + {{ item.createdOn?.toDate() | date:"short" }} + + {{ item.count | formatToken: (data.token$ | async)?.uid:false:false | async }} + + + {{ (item.price * item.count) | formatToken: (data.token$ | async)?.uid:false:false:2 | + async}} + + + {{ { value: item.price, exponents: getDefaultNetworkDecimals()} | formatToken: ( + (data.token$ | async)?.mintingData?.networkFormat || (data.token$ | + async)?.mintingData?.network) : false:false | async}} + + + + {{ (item.fulfilled / item.count) | percent }} + + + Cancelled + + + Expired + + + + Cancel + + + + + + +
    + There are no sells +
    +
    + + + + + Date + Type + + Amount ({{ ((data.token$ | async)?.symbol === 'IOTA' + ? 'M' : '') + (data.token$ | async)?.symbol }}) + + + Total ({{ networkDetails[(data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | async)?.mintingData?.network || + defaultNetwork].label }}) + + + Price ({{ networkDetails[(data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | async)?.mintingData?.network || + defaultNetwork].label }}) + + Status + + + + + {{ item.createdOn?.toDate() | date:"short" }} + + Buy + Sell + + + {{ item.count | formatToken: (data.token$ | async)?.uid:false:false | async }} + + + {{ (item.price * item.count) | formatToken: (item.type === tokenTradeOrderTypes.SELL ? + item?.targetNetwork : item?.sourceNetwork):false:true: 2 | async }} + + + {{ {value: item.price, exponents: getDefaultNetworkDecimals() }| formatToken: + (item.type === tokenTradeOrderTypes.SELL ? item?.targetNetwork : item?.sourceNetwork) + | async }} + + + + Fulfilled + + + Partially Fulfilled / Cancelled + + + Cancelled + + + Fulfilled / Cancelled (unfulfillable) + + + Expired + + + + + + + +
    + There is no order history +
    +
    +
    +
    +
    + +
    + + + + + + + +
    + + + +
    +
    +
    + + +
    + + + Pending + + + Available + +
    +
    + + +
    +
    +
    +
    + Current Price ({{ (data.token$ | + async)?.mintingData?.networkFormat || unitsService.label((data.token$ | + async)?.mintingData?.network) }}) +
    +
    + {{ ((listenAvgPrice$ | async) || 0) === 0 ? '-' : ( { value: ((listenAvgPrice$ | async) || + 0), exponents: getDefaultNetworkDecimals() } | formatToken :( (data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | + async)?.mintingData?.network):false:false | async) }} + ~{{ unitsService.getUsd(((listenAvgPrice$ | async) || 0), (data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | async)?.mintingData?.network) | + async | currency: 'USD' | UsdBelowTwoDecimals }} +
    +
    +
    +
    + Change 24h +
    +
    + + {{(listenChangePrice24h$ | async)?.toString() | percent : '1.0-2'}} + + - +
    +
    +
    +
    + Market Cap (USD) +
    +
    + + {{ unitsService.getUsd(((data.token$ | async)?.totalSupply || 0) * ((listenAvgPrice$ | + async) || 0) / 1000 / 1000, (data.token$ | async)?.mintingData?.networkFormat || + (data.token$ | async)?.mintingData?.network) | async | currency: 'USD' | + UsdBelowTwoDecimals }} + + - +
    +
    +
    + +
    +
    + + +
    +
    +
    Order book
    + + + +
    + + + + + + Price ({{ networkDetails[(data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | async)?.mintingData?.network || + defaultNetwork].label }}) + + + Amount ({{ ((data.token$ | async)?.symbol === 'IOTA' ? + 'M' : '') + (data.token$ | async)?.symbol }}) + + + Total ({{ networkDetails[(data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | async)?.mintingData?.network || + defaultNetwork].label }}) + + + + +
    + +
    + + + + + +
    +
    + {{ {value: item.price, exponents: getDefaultNetworkDecimals()} | formatToken: ( + (data.token$ | async)?.mintingData?.networkFormat || (data.token$ | + async)?.mintingData?.network):false:false | async }} +
    + + + {{ item.amount | formatToken: (data.token$ | async)?.uid:false:false | async }} + + + {{ (item.price * item.amount) | formatToken: ( (data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | + async)?.mintingData?.network):false:false:2 | async }} + + +
    +
    + +
    + +
    + {{ ((listenAvgPrice$ | async) || 0) === 0 ? '-' : { value: ((listenAvgPrice$ | async) || 0), + exponents: getDefaultNetworkDecimals()} | formatToken: ((data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | async)?.mintingData?.network) + :false:false | async }} + + ( ~{{ unitsService.getUsd(((listenAvgPrice$ | async) || 0), (data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | async)?.mintingData?.network) | async | + currency: 'USD' | UsdBelowTwoDecimals }} ) + +
    + current price +
    +
    + + + + + + +
    +
    + {{ { value: item.price, exponents: getDefaultNetworkDecimals() } | formatToken: + ((data.token$ | async)?.mintingData?.networkFormat || (data.token$ | + async)?.mintingData?.network):false:false | async }} +
    + + + {{ item.amount | formatToken: (data.token$ | async)?.uid:false:false | async}} + + + {{ (item.price * item.amount) | formatToken: ( (data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | + async)?.mintingData?.network):false:false:2 | async}} + + +
    +
    + +
    +
    + + +
    + There is no activity yet +
    +
    +
    + + +
    +
    Token chart
    + +
    + +
    +
    +
    + + +
    +
    + + +
    +
    + Trade history +
    +
    {{ currentDate.toDate() | date: 'mediumTime' }}
    +
    + + + + + + Price ({{ networkDetails[(data.token$ | + async)?.mintingData?.networkFormat || (data.token$ | async)?.mintingData?.network || + defaultNetwork].label }}) + + + Amount ({{ ((data.token$ | async)?.symbol === 'IOTA' ? + 'M' : '') + (data.token$ | async)?.symbol }}) + + Time + + + + + + {{ { value: item.price, exponents: getDefaultNetworkDecimals() } | formatToken: + ((data.token$ | async)?.mintingData?.networkFormat || (data.token$ | + async)?.mintingData?.network):false:false | async }} + + + {{ item.count | formatToken: (data.token$ | async)?.uid:false:false | async }} + + +
    {{ item.createdOn?.toDate() | date: 'mediumTime' }}
    +
    + ({{ getDateDiff(item.createdOn) }}) +
    + + + +
    + + +
    + There is no trade history +
    +
    +
    + + +
    + + +
    + +
    + +
    You don’t have enough tokens
    +
    + +
    + Amount to {{ currentTradeFormState$.value === tradeFormStates.BUY ? 'buy' : 'sell'}} +
    + +
    + + +
    +
    + + +
    + {{ ((data.token$ | async)?.symbol === 'IOTA' ? 'M' : '') + (data.token$ | async)?.symbol + }} +
    +
    + +
    +
    + Balance: {{ (((memberDistribution$ | async)?.tokenOwned + || 0) - ((memberDistribution$ | async)?.lockedForSale || 0)) | formatToken: (data.token$ | + async)?.uid:true:false | async }} +
    + Max +
    +
    +
    + +
    +
    + Set your price per 1 {{ ((data.token$ | async)?.symbol === 'IOTA' ? 'M' : '') + (data.token$ | + async)?.symbol }} +
    + +
    +
    + LIMIT PRICE +
    +
    + MARKET PRICE +
    +
    +
    + +
    + +
    + ~{{ unitsService.getUsd(priceControl.value, (data.token$ | async)?.mintingData?.networkFormat + ||(data.token$ | async)?.mintingData?.network) | async | currency: 'USD' | UsdBelowTwoDecimals + }} +
    +
    +
    + + +
    + {{ helper.getPairFrom(data.token$ | async) }} +
    +
    + +
    + Options + + + +
      +
    • Set Current Price
    • +
    • + Set BID + +
    • +
    • + Set ASK + +
    • +
    +
    +
    +
    +
    + +
    + + You will spend + + + You will receive + +
    + +
    +
    + {{ getResultAmount() | number : '1.0-6' }} + + ~{{ unitsService.getUsd(getResultAmount(), ((data.token$ | + async)?.mintingData)?.networkFormat || (data.token$ | async)?.mintingData?.network) | async + | currency: 'USD' | UsdBelowTwoDecimals }} + +
    +
    + + +
    + {{ helper.getPairFrom(data.token$ | async) }} +
    +
    +
    + +
    + Minimum total has to be at least 1 {{ + helper.getPairFrom(data.token$ | async) }} +
    + + +
    + Fee {{ exchangeFee }}% ({{ getFee() | formatToken: + (data.token$ | async)?.uid:true | async }}) + +
    + +
    + No FEES! +
    + +
    +
    + + + + +
    + + +
    + +
    +
    + + +
    +
    Markets
    + + +
    +
    + + + + + + diff --git a/src/app/pages/token/pages/trade/trade.page.less b/src/app/pages/token/pages/trade/trade.page.less new file mode 100644 index 0000000..64a3aa8 --- /dev/null +++ b/src/app/pages/token/pages/trade/trade.page.less @@ -0,0 +1,79 @@ +:host { + .trade-dropdown-btn { + &:hover, + &:focus { + @apply bg-tabs-selected dark:bg-tabs-selected-dark text-foregrounds-on-primary dark:text-foregrounds-on-primary-dark + border-tabs-selected dark:border-tabs-selected-dark !important; + } + } +} + +:host ::ng-deep { + .order-book .ant-card-body { + @apply p-0 flex flex-col h-full !important; + + .ant-table-tbody .ant-table-row .ant-table-cell { + @apply border-b-backgrounds-tertiary dark:border-b-backgrounds-tertiary-dark !important; + } + } + + .asks-table { + @apply flex flex-col justify-end; + } + + .trade-history-order { + &__buy { + @apply text-[#28B16F] !important; + } + + &__sell { + @apply text-[#E14F4F] !important; + } + } +} + +.price-suggestion { + @apply cursor-pointer w-20 py-2 border-2 border-[#EDECE8] rounded-2xl text-xxs font-semibold flex items-center justify-center; + + &__disabled { + @apply text-foregrounds-secondary dark:text-foregrounds-secondary-dark pointer-events-none; + } + + &__selected { + @apply border-accent-primary dark:border-accent-primary-dark; + } +} + +.input__error { + @apply border-inputs-error dark:border-inputs-error-dark; +} + +.stat-box { + @apply flex-1 w-full lg:w-auto px-4 py-4 lg:py-3 lg:h-auto rounded-xl flex items-center justify-between flex-wrap lg:flex-row; +} + +::ng-deep .order-book-options { + nz-option-container { + cdk-virtual-scroll-viewport { + height: 150px !important; + } + } +} + +.price-option { + @apply text-xs font-medium text-foregrounds-secondary dark:text-foregrounds-secondary-dark cursor-pointer; + &__selected { + @apply text-accent-primary dark:text-accent-primary-dark; + } +} + +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +/* Firefox */ +input[type='number'] { + -moz-appearance: textfield; +} diff --git a/src/app/pages/token/pages/trade/trade.page.ts b/src/app/pages/token/pages/trade/trade.page.ts new file mode 100644 index 0000000..49487bc --- /dev/null +++ b/src/app/pages/token/pages/trade/trade.page.ts @@ -0,0 +1,796 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import { FormControl, Validators } from '@angular/forms'; +import { ActivatedRoute } from '@angular/router'; +import { FileApi } from '@api/file.api'; +import { SpaceApi } from '@api/space.api'; +import { TokenApi } from '@api/token.api'; +import { TokenMarketApi } from '@api/token_market.api'; +import { TokenPurchaseApi } from '@api/token_purchase.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { TRADING_VIEW_INTERVALS } from '@components/trading-view/components/trading-view/trading-view.component'; +import { CacheService } from '@core/services/cache/cache.service'; +import { DeviceService } from '@core/services/device'; +import { NotificationService } from '@core/services/notification'; +import { PreviewImageService } from '@core/services/preview-image'; +import { SeoService } from '@core/services/seo'; +import { UnitsService } from '@core/services/units'; +import { StorageItem, getItem, setItem } from '@core/utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { DataService } from '@pages/token/services/data.service'; +import { HelperService } from '@pages/token/services/helper.service'; +import { + DEFAULT_NETWORK, + DEFAULT_NETWORK_DECIMALS, + FILE_SIZES, + Member, + NETWORK_DETAIL, + SERVICE_MODULE_FEE_TOKEN_EXCHANGE, + Space, + Timestamp, + Token, + TokenDistribution, + TokenPurchase, + TokenStatus, + TokenTradeOrder, + TokenTradeOrderStatus, + TokenTradeOrderType, + getDefDecimalIfNotSet, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import relativeTime from 'dayjs/plugin/relativeTime'; +import updateLocale from 'dayjs/plugin/updateLocale'; +import bigDecimal from 'js-big-decimal'; +import { + BehaviorSubject, + Observable, + Subscription, + combineLatest, + filter, + first, + interval, + map, + merge, + of, + skip, + take, +} from 'rxjs'; + +dayjs.extend(relativeTime); +dayjs.extend(updateLocale); + +export enum AskListingType { + OPEN = 'OPEN', + MY = 'MY', +} + +export enum BidListingType { + OPEN = 'OPEN', + MY = 'MY', +} + +export enum MyTradingType { + BIDS = 'BIDS', + ASKS = 'ASKS', + HISTORY = 'HISTORY', +} + +export enum TradeFormState { + BUY = 'BUY', + SELL = 'SELL', +} + +export enum PriceOptionType { + MARKET = 'MARKET', + LIMIT = 'LIMIT', +} + +export enum MobileViewState { + ORDER_BOOK = 'ORDER_BOOK', + TOKEN_CHART = 'TOKEN_CHART', + TRADE_HISTORY = 'TRADE_HISTORY', +} + +export interface TransformedBidAskItem { + price: number; + amount: number; + isOwner: boolean; +} + +export const ORDER_BOOK_OPTIONS = [0.1, 0.01, 0.001]; +const MAXIMUM_ORDER_BOOK_ROWS = 9; + +@UntilDestroy() +@Component({ + selector: 'wen-trade', + templateUrl: './trade.page.html', + styleUrls: ['./trade.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TradePage implements OnInit, OnDestroy { + public chartLengthOptions = [ + // { label: $localize`5m`, value: TRADING_VIEW_INTERVALS['5m'] }, + { label: $localize`1h`, value: TRADING_VIEW_INTERVALS['1h'] }, + { label: $localize`4h`, value: TRADING_VIEW_INTERVALS['4h'] }, + { label: $localize`1d`, value: TRADING_VIEW_INTERVALS['1d'] }, + { label: $localize`1w`, value: TRADING_VIEW_INTERVALS['1w'] }, + ]; + public bids$: BehaviorSubject = new BehaviorSubject([]); + public myBids$: BehaviorSubject = new BehaviorSubject([]); + public asks$: BehaviorSubject = new BehaviorSubject([]); + public myAsks$: BehaviorSubject = new BehaviorSubject([]); + public sortedBids$ = new BehaviorSubject([] as TransformedBidAskItem[]); + public sortedAsks$ = new BehaviorSubject([] as TransformedBidAskItem[]); + public bidsAmountHighest$: Observable; + public asksAmountHighest$: Observable; + public myOpenBids$: Observable; + public myOpenAsks$: Observable; + public myOrderHistory$: Observable; + public buySellPriceDiff$: Observable = of(0); + public space$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public listenAvgPrice$: BehaviorSubject = new BehaviorSubject< + number | undefined + >(undefined); + public listenAvgPrice7d$: BehaviorSubject = new BehaviorSubject< + number | undefined + >(undefined); + public listenChangePrice24h$: BehaviorSubject = new BehaviorSubject< + number | undefined + >(undefined); + public tradeHistory$: BehaviorSubject = new BehaviorSubject([]); + public chartLengthControl: FormControl = new FormControl( + TRADING_VIEW_INTERVALS['1h'], + Validators.required, + ); + public memberDistribution$?: BehaviorSubject = new BehaviorSubject< + TokenDistribution | undefined + >(undefined); + public currentAskListing = AskListingType.OPEN; + public currentBidsListing = BidListingType.OPEN; + public currentMyTradingState = MyTradingType.BIDS; + public currentMobileViewState = MobileViewState.ORDER_BOOK; + public currentTradeFormState$ = new BehaviorSubject(TradeFormState.BUY); + public isFavourite = false; + public pairModalVisible = false; + public loadPairsModal = false; + public orderBookOptions = ORDER_BOOK_OPTIONS; + public orderBookOptionControl = new FormControl(ORDER_BOOK_OPTIONS[2]); + public orderBookOption$: BehaviorSubject = new BehaviorSubject( + ORDER_BOOK_OPTIONS[2], + ); + public currentDate = dayjs(); + public defaultNetwork = DEFAULT_NETWORK; + public maximumOrderBookRows = MAXIMUM_ORDER_BOOK_ROWS; + public priceOption$ = new BehaviorSubject(PriceOptionType.LIMIT); + public amountControl: FormControl = new FormControl(); + public priceControl: FormControl = new FormControl(); + public dummyControl = new FormControl({ value: undefined, disabled: true }); + public isBidTokenOpen = false; + public isAskTokenOpen = false; + public cancelTradeOrder: TokenTradeOrder | null = null; + public tradeDetailOrder: TokenTradeOrder | null = null; + public tradeDetailPurchases: TokenPurchase[] | TokenPurchase | null = null; + public isTradeDrawerVisible = false; + private subscriptions$: Subscription[] = []; + private subscriptionsMembersBids$: Subscription[] = []; + private memberDistributionSub$?: Subscription; + + constructor( + public deviceService: DeviceService, + public previewImageService: PreviewImageService, + public data: DataService, + public auth: AuthService, + public cache: CacheService, + public helper: HelperService, + public unitsService: UnitsService, + private tokenApi: TokenApi, + private cd: ChangeDetectorRef, + private tokenPurchaseApi: TokenPurchaseApi, + private notification: NotificationService, + private tokenMarketApi: TokenMarketApi, + private spaceApi: SpaceApi, + private route: ActivatedRoute, + private seo: SeoService, + private fileApi: FileApi, + ) { + this.bidsAmountHighest$ = this.sortedBids$ + .asObservable() + .pipe(map((r) => Math.max(...r.map((o) => o.amount)))); + this.asksAmountHighest$ = this.sortedAsks$ + .asObservable() + .pipe(map((r) => Math.max(...r.map((o) => o.amount)))); + + this.myOpenBids$ = this.myBids$ + .asObservable() + .pipe(map((r) => r.filter((e) => e.status === this.bidAskStatuses.ACTIVE))); + this.myOpenAsks$ = this.myAsks$ + .asObservable() + .pipe(map((r) => r.filter((e) => e.status === this.bidAskStatuses.ACTIVE))); + this.myOrderHistory$ = combineLatest([this.myBids$, this.myAsks$]).pipe( + map(([bids, asks]) => + [...(bids || []), ...(asks || [])] + .filter((e) => e.status !== this.bidAskStatuses.ACTIVE) + .sort((a, b) => (b?.createdOn?.toMillis() || 0) - (a?.createdOn?.toMillis() || 0)), + ), + ); + + this.buySellPriceDiff$ = combineLatest([this.sortedBids$, this.sortedAsks$]).pipe( + map(([bids, asks]) => { + // Never allow negative. + const amount: number = + asks.length > 0 && bids.length > 0 + ? +bigDecimal.subtract(asks[asks.length - 1].price, bids[0].price) + : 0; + if (amount < 0) { + return 0; + } + + return amount; + }), + ); + } + + public ngOnInit(): void { + this.deviceService.viewWithSearch$.next(false); + this.route.params?.pipe(untilDestroyed(this)).subscribe((obj) => { + const id: string | undefined = obj?.[ROUTER_UTILS.config.token.token.replace(':', '')]; + if (id) { + this.cancelSubscriptions(); + this.listenToToken(id); + this.listenToTrades(id); + this.listenToOrderStats(id); + + // Default mid price. Only set once we have all data. + const un = combineLatest([this.data.token$, this.asks$, this.bids$]).subscribe( + ([token, asks, bids]) => { + if (token?.uid === id && asks?.[0]?.token === id && bids?.[0]?.token === id) { + un.unsubscribe(); + this.setMidPrice(); + } + }, + ); + } + }); + + this.data.token$.pipe(skip(1)).subscribe((t) => { + if (t) { + this.fileApi + .getMetadata(t?.overviewGraphics || '') + .pipe(take(1), untilDestroyed(this)) + .subscribe((o) => { + this.seo.setTags( + $localize`Token` + ' - ' + this.helper.getPair(t), + $localize`Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today.`, + o === 'image' ? t.overviewGraphics : undefined, + ); + }); + this.subscriptions$.push( + this.spaceApi.listen(t.space).pipe(untilDestroyed(this)).subscribe(this.data.space$), + ); + this.listenToMemberSubs(this.auth.member$.value); + this.isFavourite = ((getItem(StorageItem.FavouriteTokens) as string[]) || []).includes( + t.uid, + ); + const selectedTradePriceOptions = (getItem(StorageItem.SelectedTradePriceOption) || {}) as { + [key: string]: PriceOptionType; + }; + this.priceOption$.next(selectedTradePriceOptions[t.uid] || PriceOptionType.LIMIT); + this.cd.markForCheck(); + } + }); + + this.auth.member$?.pipe(untilDestroyed(this)).subscribe((member) => { + this.listenToMemberSubs(member); + }); + + interval(1000) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.currentDate = dayjs(); + this.cd.markForCheck(); + }); + + combineLatest([this.bids$.asObservable(), this.orderBookOption$]) + .pipe( + map(([bids]) => bids), + map((r) => this.groupOrders.call(this, r)), + map((r) => this.combineOrdersBasedOnDecimal(true, r)), + map((r) => r.sort((a: any, b: any) => b.price - a.price)), + map((r) => r.slice(0, this.maximumOrderBookRows)), + untilDestroyed(this), + ) + .subscribe(this.sortedBids$); + + combineLatest([this.asks$.asObservable(), this.orderBookOption$]) + .pipe( + map(([asks]) => asks), + map((r) => this.groupOrders.call(this, r)), + map((r) => this.combineOrdersBasedOnDecimal(false, r)), + map((r) => r.sort((a: any, b: any) => b.price - a.price)), + map((r) => r.slice(Math.max(0, r.length - this.maximumOrderBookRows), r.length)), + untilDestroyed(this), + ) + .subscribe(this.sortedAsks$); + + this.buySellPriceDiff$ = combineLatest([this.sortedBids$, this.sortedAsks$]).pipe( + map(([bids, asks]) => { + // Never allow negative. + const amount = + asks.length > 0 && bids.length > 0 + ? +bigDecimal.subtract(asks[asks.length - 1].price, bids[0].price) + : 0; + if (amount < 0) { + return 0; + } + + return amount; + }), + ); + + this.priceOption$.pipe(skip(1), untilDestroyed(this)).subscribe((priceOption) => { + if (this.data.token$.value) { + setItem(StorageItem.SelectedTradePriceOption, { + ...((getItem(StorageItem.SelectedTradePriceOption) || {}) as { + [key: string]: PriceOptionType; + }), + [this.data.token$.value.uid]: priceOption, + }); + } + }); + + merge( + this.sortedBids$, + this.sortedAsks$, + this.currentTradeFormState$, + this.amountControl.valueChanges, + ) + .pipe( + filter(() => this.priceOption$.value === PriceOptionType.MARKET), + untilDestroyed(this), + ) + .subscribe(() => { + let amount = + Number(this.amountControl.value) * + NETWORK_DETAIL[this.data.token$.value?.mintingData?.network || DEFAULT_NETWORK].divideBy; + let result = 0; + if (this.currentTradeFormState$.value === TradeFormState.SELL) { + for (let i = 0; i < this.sortedBids$.value.length; i++) { + amount -= this.sortedBids$.value[i].amount; + if (amount <= 0 || i === this.sortedBids$.value.length - 1) { + result = this.sortedBids$.value[i].price; + break; + } + } + } else { + for (let i = this.sortedAsks$.value.length - 1; i >= 0; i--) { + amount -= this.sortedAsks$.value[i].amount; + if (amount <= 0 || i === 0) { + result = this.sortedAsks$.value[i].price; + break; + } + } + } + this.priceControl.setValue(bigDecimal.round(result, 3)); + this.cd.markForCheck(); + }); + } + + private listenToMemberSubs(member: Member | undefined): void { + this.memberDistributionSub$?.unsubscribe(); + this.subscriptionsMembersBids$?.forEach((s) => { + s.unsubscribe(); + }); + if (member?.uid && this.data.token$.value?.uid) { + this.memberDistributionSub$ = this.tokenApi + .getMembersDistribution(this.data.token$.value?.uid, member.uid) + .subscribe(this.memberDistribution$); + // TODO paging? + this.subscriptionsMembersBids$.push( + this.tokenMarketApi + .membersAsks(member.uid, this.data.token$.value?.uid, undefined) + .pipe(untilDestroyed(this)) + .subscribe(this.myAsks$), + ); + this.subscriptionsMembersBids$.push( + this.tokenMarketApi + .membersBids(member.uid, this.data.token$.value?.uid, undefined) + .pipe(untilDestroyed(this)) + .subscribe(this.myBids$), + ); + } else { + this.memberDistribution$?.next(undefined); + } + } + + private combineOrdersBasedOnDecimal(floor: boolean, r: any[]): any { + return Object.values( + r + .map((e: any) => { + const transformedPrice = bigDecimal.multiply( + bigDecimal.floor(bigDecimal.divide(e.price, this.orderBookOption$.value, 1000)), + this.orderBookOption$.value, + ); + return { ...e, price: Number(transformedPrice) }; + }) + .reduce((acc: any, e: any) => { + if (!acc[e.price]) { + return { ...acc, [e.price]: e }; + } else { + return { + ...acc, + [e.price]: { + ...acc[e.price], + amount: Number(bigDecimal.add(acc[e.price].amount, e.amount)), + }, + }; + } + }, {} as { [key: string]: TransformedBidAskItem }), + ); + } + + private listenToTrades(tokenId: string): void { + // TODO Add pagging. + this.subscriptions$.push( + this.tokenMarketApi + .asksActive(tokenId, undefined) + .pipe(untilDestroyed(this)) + .subscribe(this.asks$), + ); + this.subscriptions$.push( + this.tokenMarketApi + .bidsActive(tokenId, undefined) + .pipe(untilDestroyed(this)) + .subscribe(this.bids$), + ); + } + + private listenToOrderStats(tokenId: string): void { + this.subscriptions$.push( + this.tokenMarketApi + .listenAvgPrice(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenAvgPrice$), + ); + } + + private listenToPurchaseStats(tokenId: string, status: TokenStatus[]): void { + // TODO Add pagging. + this.subscriptions$.push( + this.tokenPurchaseApi + .listenAvgPrice7d(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenAvgPrice7d$), + ); + this.subscriptions$.push( + this.tokenPurchaseApi + .listenToPurchases(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.tradeHistory$), + ); + this.subscriptions$.push( + this.tokenPurchaseApi + .listenChangePrice24h(tokenId) + .pipe(untilDestroyed(this)) + .subscribe(this.listenChangePrice24h$), + ); + } + + public get chartLengthTypes(): typeof TRADING_VIEW_INTERVALS { + return TRADING_VIEW_INTERVALS; + } + + public get askListingTypes(): typeof AskListingType { + return AskListingType; + } + + public get bidAskStatuses(): typeof TokenTradeOrderStatus { + return TokenTradeOrderStatus; + } + + public get myTradingTypes(): typeof MyTradingType { + return MyTradingType; + } + + public get tradeFormStates(): typeof TradeFormState { + return TradeFormState; + } + + public get infinity(): typeof Infinity { + return Infinity; + } + + public get tokenTradeOrderTypes(): typeof TokenTradeOrderType { + return TokenTradeOrderType; + } + + public get mobileViewStates(): typeof MobileViewState { + return MobileViewState; + } + + private listenToToken(id: string): void { + this.cancelSubscriptions(); + let executedOnce = false; + this.subscriptions$.push( + this.tokenApi + .listen(id) + .pipe(untilDestroyed(this)) + .subscribe((obj) => { + if (executedOnce === false && obj) { + // Old records might not have this value set. + this.listenToPurchaseStats(id, [obj.status || TokenStatus.PRE_MINTED]); + executedOnce = true; + } + this.data.token$.next(obj); + }), + ); + } + + public getBidsTitle(_avg?: number): string { + return $localize`Bids`; + } + + public getAsksTitle(_avg?: number): string { + return $localize`Asks`; + } + + public get filesizes(): typeof FILE_SIZES { + return FILE_SIZES; + } + + public getShareUrl(token?: Token | null): string { + return ( + 'https://twitter.com/share?text=Check out token&url=' + + (token?.wenUrl || window?.location.href) + + '&hashtags=soonaverse' + ); + } + + public async cancelOrder(tokenBuyBid: string): Promise { + const params: any = { + uid: tokenBuyBid, + }; + + await this.auth.sign(params, (sc, finish) => { + this.notification + .processRequest(this.tokenMarketApi.cancel(sc), $localize`Cancelled.`, finish) + .subscribe(() => { + // + }); + }); + } + + public get bidListingTypes(): typeof BidListingType { + return BidListingType; + } + + public get priceOptionTypes(): typeof PriceOptionType { + return PriceOptionType; + } + + private groupOrders(r: TokenTradeOrder[]): TransformedBidAskItem[] { + return Object.values( + r.reduce((acc, e) => { + const key = + e.owner === this.auth.member$.value?.uid + ? `${e.price}_${this.auth.member$.value?.uid || ''}` + : e.price; + return { + ...acc, + [key]: [...(acc[key] || []), e], + }; + }, {} as { [key: number | string]: TokenTradeOrder[] }), + ).map((e) => + e.reduce( + (acc, el) => ({ + price: el.price, + amount: acc.amount + el.count - el.fulfilled, + isOwner: el.owner === this.auth.member$.value?.uid, + }), + { price: 0, amount: 0, total: 0, isOwner: false } as TransformedBidAskItem, + ), + ); + } + + public getResultAmount(): number { + if (isNaN(this.amountControl.value) || isNaN(this.priceControl.value)) return 0; + return Number(bigDecimal.multiply(this.amountControl.value, this.priceControl.value)); + } + + public openTradeModal(): void { + if (this.currentTradeFormState$.value === TradeFormState.BUY) { + this.isBidTokenOpen = true; + this.isAskTokenOpen = false; + } else { + this.isAskTokenOpen = true; + this.isBidTokenOpen = false; + } + this.cd.markForCheck(); + } + + public moreThanBalance(): boolean { + return ( + this.currentTradeFormState$.value === TradeFormState.SELL && + this.memberDistribution$?.value?.tokenOwned !== null && + (this.memberDistribution$?.value?.tokenOwned || 0) * + Math.pow(10, getDefDecimalIfNotSet(this.data.token$.value?.decimals)) < + this.amountControl.value + ); + } + + public get networkDetails(): typeof NETWORK_DETAIL { + return NETWORK_DETAIL; + } + + public setMidPrice(): void { + combineLatest([this.sortedBids$, this.sortedAsks$]) + .pipe( + filter(([bids, asks]) => bids.length > 0 && asks.length > 0), + first(), + untilDestroyed(this), + ) + .subscribe(([bids, asks]) => { + this.priceControl.setValue( + bigDecimal.divide(bigDecimal.add(bids[0].price, asks[asks.length - 1].price), 2, 3), + ); + }); + } + + public isMidPrice( + bids: TransformedBidAskItem[] | null, + asks: TransformedBidAskItem[] | null, + ): boolean { + if (!bids?.length || !asks?.length) return false; + return ( + bigDecimal.divide(bigDecimal.add(bids[0].price, asks[asks.length - 1].price), 2, 3) === + bigDecimal.round(this.priceControl.value, 3) + ); + } + + public setBidPrice(): void { + this.sortedBids$ + .pipe( + filter((bids) => bids.length > 0), + first(), + untilDestroyed(this), + ) + .subscribe((bids) => { + this.priceControl.setValue(bigDecimal.round(bids[0].price, 3)); + }); + } + + public isBidPrice(bids: TransformedBidAskItem[] | null): boolean { + if (!bids?.length) return false; + return bigDecimal.round(bids[0].price, 3) === bigDecimal.round(this.priceControl.value, 3); + } + + public setAskPrice(): void { + this.sortedAsks$ + .pipe( + filter((asks) => asks.length > 0), + first(), + untilDestroyed(this), + ) + .subscribe((asks) => { + this.priceControl.setValue(bigDecimal.round(asks[asks.length - 1].price, 3)); + }); + } + + public isAskPrice(asks: TransformedBidAskItem[] | null): boolean { + if (!asks?.length) return false; + return ( + bigDecimal.round(asks[asks.length - 1].price, 3) === + bigDecimal.round(this.priceControl.value, 3) + ); + } + + public set7dVwapPrice(): void { + this.priceControl.setValue(bigDecimal.round(this.listenAvgPrice7d$.getValue(), 3)); + } + + public is7dVwapPrice(): boolean { + return ( + this.listenAvgPrice7d$.getValue() !== 0 && + bigDecimal.round(this.listenAvgPrice7d$.getValue(), 3) === + bigDecimal.round(this.priceControl.value, 3) + ); + } + + public setCurrentPrice(): void { + this.priceControl.setValue(bigDecimal.round(this.listenAvgPrice$.getValue(), 3)); + } + + public setFavourite(): void { + this.isFavourite = !this.isFavourite; + const favourites = (getItem(StorageItem.FavouriteTokens) as string[]) || []; + setItem( + StorageItem.FavouriteTokens, + this.isFavourite + ? [...favourites, this.data.token$.value?.uid] + : favourites.filter((e) => e !== this.data.token$.value?.uid), + ); + this.cd.markForCheck(); + } + + public getDateDiff(date: Timestamp): string { + const dayDiff = dayjs().diff(dayjs(date.toDate()), 'day'); + if (dayDiff <= 0) { + return ''; + } + + return dayjs(date.toDate()).fromNow(); + } + + public get exchangeFee(): number { + return SERVICE_MODULE_FEE_TOKEN_EXCHANGE; + } + + public getFee(): number { + return Number(bigDecimal.multiply(this.getResultAmount(), this.exchangeFee * 100 * 100)); + } + + public orderBookRowClick(item: TransformedBidAskItem, state: TradeFormState): void { + // Disabled setting of the amount as I believe it does not make sense. + this.currentTradeFormState$.next( + state === TradeFormState.BUY ? TradeFormState.SELL : TradeFormState.BUY, + ); + this.amountControl.setValue( + item.amount / Math.pow(10, getDefDecimalIfNotSet(this.data.token$.value?.decimals)), + ); + this.priceOption$.next(PriceOptionType.LIMIT); + this.priceControl.setValue(bigDecimal.round(item.price, 3)); + } + + public getDefaultNetworkDecimals(): number { + return DEFAULT_NETWORK_DECIMALS; + } + + public tradeHistoryClick(item: TokenPurchase): void { + this.tradeDetailOrder = null; + this.tradeDetailPurchases = item; + this.cd.markForCheck(); + } + + public orderClick(item: TokenTradeOrder): void { + this.subscriptions$.push( + this.tokenPurchaseApi + .getPurchasesForTrade(item) + .pipe(first(), untilDestroyed(this)) + .subscribe((r) => { + this.tradeDetailOrder = item; + this.tradeDetailPurchases = r; + this.cd.markForCheck(); + }), + ); + } + + public mobileBuySellClick(state: TradeFormState): void { + this.currentTradeFormState$.next(state); + this.isTradeDrawerVisible = true; + this.cd.markForCheck(); + } + + public setCancelTradeOrder(event: MouseEvent, item: TokenTradeOrder): void { + event.stopPropagation(); + this.cancelTradeOrder = item; + this.cd.markForCheck(); + } + + private cancelSubscriptions(): void { + this.priceControl.setValue(''); + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/token/services/data.service.ts b/src/app/pages/token/services/data.service.ts new file mode 100644 index 0000000..84f1703 --- /dev/null +++ b/src/app/pages/token/services/data.service.ts @@ -0,0 +1,72 @@ +import { Injectable } from '@angular/core'; +import { Space, Token, TokenDistribution, TokenStats } from '@soonaverse/interfaces'; +import { BehaviorSubject, map, Observable, of } from 'rxjs'; +import { + AuditOneQueryService, + AuditOneResponseToken, +} from 'src/app/service-modules/audit-one/services/query.service'; + +export enum TokenAction { + EDIT = 'edit', + MINT = 'mint', +} + +@Injectable({ + providedIn: 'any', +}) +export class DataService { + public token$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public tokenStats$: BehaviorSubject = new BehaviorSubject< + TokenStats | undefined + >(undefined); + public isGuardianInRankModeratorSpace$: BehaviorSubject = new BehaviorSubject( + false, + ); + public space$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public distributions$: BehaviorSubject = new BehaviorSubject< + TokenDistribution[] | undefined + >(undefined); + public triggerAction$: BehaviorSubject = new BehaviorSubject< + TokenAction | undefined + >(undefined); + public distributionsBought$: Observable = of([]); + public memberDistribution$?: BehaviorSubject = new BehaviorSubject< + TokenDistribution | undefined + >(undefined); + public isGuardianWithinSpace$: BehaviorSubject = new BehaviorSubject(false); + public auditOneStatus$: BehaviorSubject = new BehaviorSubject< + AuditOneResponseToken | undefined + >(undefined); + + constructor(private auditOneModule: AuditOneQueryService) { + this.distributionsBought$ = this.distributions$.pipe( + map((dis: TokenDistribution[] | undefined) => { + return ( + dis?.filter((d: TokenDistribution) => { + return d && (d.totalDeposit || d.totalBought); + }) || [] + ); + }), + ); + } + + public async loadServiceModuleData(tokenId: string): Promise { + // Audit One widget. + if (tokenId) { + const space = await this.auditOneModule.getTokenStatus(tokenId); + this.auditOneStatus$.next(space); + } + } + + public resetSubjects(): void { + // Clean up all streams. + this.token$.next(undefined); + this.space$.next(undefined); + this.auditOneStatus$.next(undefined); + this.distributions$.next(undefined); + } +} diff --git a/src/app/pages/token/services/helper.service.ts b/src/app/pages/token/services/helper.service.ts new file mode 100644 index 0000000..0034699 --- /dev/null +++ b/src/app/pages/token/services/helper.service.ts @@ -0,0 +1,196 @@ +import { Injectable } from '@angular/core'; +import { UnitsService } from '@core/services/units'; +import { + Network, + TRANSACTION_AUTO_EXPIRY_MS, + Token, + TokenDrop, + TokenStatus, + TokenTradeOrder, + TokenTradeOrderStatus, + Transaction, + TransactionType, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import duration from 'dayjs/plugin/duration'; + +dayjs.extend(duration); + +@Injectable({ + providedIn: 'root', +}) +export class HelperService { + constructor(public unitsService: UnitsService) {} + + public percentageMarketCap(percentage: number, token?: Token): number { + if (!token) { + return 0; + } + return Math.floor(token?.pricePerToken * ((token?.totalSupply * percentage) / 100)); + } + + public getPairFrom(token?: Token | null): string { + let from = ''; + const net = token?.mintingData?.networkFormat || token?.mintingData?.network; + if (net === Network.ATOI) { + from = 'MATOI'; + } else if (net === Network.SMR) { + from = 'SMR'; + } else if (net === Network.RMS) { + from = 'RMS'; + } else { + from = 'MIOTA'; + } + return from; + } + + public getPair(token?: Token | null): string { + return (token?.symbol === 'IOTA' ? 'M' : '') + token?.symbol + '/' + this.getPairFrom(token); + } + + public isBase(token?: Token | null): boolean { + return token?.status === TokenStatus.BASE; + } + + public saleEndDate(token?: Token): dayjs.Dayjs { + return dayjs(token?.saleStartDate?.toDate()).add(token?.saleLength || 0, 'ms'); + } + + public isInProcessing(token?: Token): boolean { + return token?.status === TokenStatus.PROCESSING; + } + + public isScheduledForSale(token?: Token): boolean { + return ( + !!token?.approved && + (token?.status === TokenStatus.AVAILABLE || token?.status === TokenStatus.PROCESSING) && + !!token?.saleStartDate + ); + } + + public isAfterSaleStarted(token?: Token): boolean { + return !!token?.approved && dayjs(token?.saleStartDate?.toDate()).isBefore(dayjs()); + } + + public isProcessing(token?: Token): boolean { + return token?.status === TokenStatus.PROCESSING; + } + + public isInCooldown(token?: Token): boolean { + return ( + !!token?.approved && + (token?.status === TokenStatus.AVAILABLE || token?.status === TokenStatus.PROCESSING) && + dayjs(token?.coolDownEnd?.toDate()).isAfter(dayjs()) && + dayjs(token?.saleStartDate?.toDate()) + .add(token?.saleLength || 0, 'ms') + .isBefore(dayjs()) + ); + } + + public isAvailableForSale(token?: Token): boolean { + return ( + !!token?.approved && + token?.status === TokenStatus.AVAILABLE && + dayjs(token?.saleStartDate?.toDate()).isBefore(dayjs()) && + dayjs(token?.saleStartDate?.toDate()) + .add(token?.saleLength || 0, 'ms') + .isAfter(dayjs()) + ); + } + + public isSalesInProgress(token?: Token): boolean { + return ( + !!token?.approved && + token?.status === TokenStatus.AVAILABLE && + dayjs(token?.saleStartDate?.toDate()).isBefore(dayjs()) && + dayjs(token?.coolDownEnd?.toDate()).isAfter(dayjs()) + ); + } + + public isMinted(token?: Token | null): boolean { + return token?.status === TokenStatus.MINTED || token?.status === TokenStatus.BASE; + } + + public isMintingInProgress(token?: Token | null): boolean { + return token?.status === TokenStatus.MINTING; + } + + public getExplorerUrl(token?: Token | null): string { + if (token?.mintingData?.network === Network.RMS) { + return 'https://explorer.shimmer.network/testnet/foundry/' + token.mintingData.tokenId; + } else if (token?.mintingData?.network === Network.IOTA) { + return 'https://thetangle.org/search/' + token.mintingData.blockId; + } else if (token?.mintingData?.network === Network.SMR) { + return 'https://explorer.shimmer.network/shimmer/foundry/' + token.mintingData.tokenId; + } else if (token?.mintingData?.network === Network.ATOI) { + return 'https://explorer.iota.org/devnet/search/' + token.mintingData.blockId; + } else { + return ''; + } + } + + public hasPublicSale(token?: Token): boolean { + return !!(token?.allocations && token.allocations.filter((a) => a.isPublicSale).length > 0); + } + + public canSchedulePublicSale(token?: Token): boolean { + return ( + !!token && + !token?.saleStartDate && + token?.approved && + this.hasPublicSale(token) && + !this.isMinted(token) + ); + } + + public getShareUrl(token?: Token | null): string { + return token?.wenUrl || window?.location.href; + } + + public isExpired(val?: Transaction | null): boolean { + if (!val?.createdOn) { + return false; + } + + const expiresOn: dayjs.Dayjs = dayjs(val.createdOn.toDate()).add( + TRANSACTION_AUTO_EXPIRY_MS, + 'ms', + ); + return expiresOn.isBefore(dayjs()) && val.type === TransactionType.ORDER; + } + + public vestingInFuture(drop?: TokenDrop): boolean { + if (!drop) { + return false; + } + return dayjs(drop.vestingAt.toDate()).isAfter(dayjs()); + } + + public salesInProgressOrUpcoming(token?: Token): boolean { + return ( + !!token?.saleStartDate && + dayjs(token.saleStartDate?.toDate()).isBefore(dayjs()) && + token?.status !== TokenStatus.PRE_MINTED && + token?.approved + ); + } + + public getTradeOrderStatus(tradeOrder: TokenTradeOrder): string | undefined { + if ( + tradeOrder.status === TokenTradeOrderStatus.ACTIVE || + tradeOrder.status === TokenTradeOrderStatus.SETTLED + ) { + return ((tradeOrder.fulfilled / tradeOrder.count) * 100).toFixed(0).toString() + '%' || ''; + } + if ( + tradeOrder.status === TokenTradeOrderStatus.CANCELLED || + tradeOrder.status === TokenTradeOrderStatus.PARTIALLY_SETTLED_AND_CANCELLED + ) { + return $localize`Cancelled`; + } + if (tradeOrder.status === TokenTradeOrderStatus.EXPIRED) { + return $localize`Expired`; + } + return undefined; + } +} diff --git a/src/app/pages/token/services/new.service.ts b/src/app/pages/token/services/new.service.ts new file mode 100644 index 0000000..f4bc523 --- /dev/null +++ b/src/app/pages/token/services/new.service.ts @@ -0,0 +1,217 @@ +import { Injectable } from '@angular/core'; +import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms'; +import { FileApi } from '@api/file.api'; +import { AuthService } from '@components/auth/services/auth.service'; +import { SelectSpaceOption } from '@components/space/components/select-space/select-space.component'; +import { getUrlValidator } from '@core/utils/form-validation.utils'; +import { + DEFAULT_NETWORK, + MAX_IOTA_AMOUNT, + MAX_TOTAL_TOKEN_SUPPLY, + MIN_TOTAL_TOKEN_SUPPLY, + NETWORK_DETAIL, + Space, + TokenAllocation, + TokenDistributionType, +} from '@soonaverse/interfaces'; +import dayjs from 'dayjs'; +import { NzNotificationService } from 'ng-zorro-antd/notification'; +import { NzUploadChangeParam, NzUploadXHRArgs } from 'ng-zorro-antd/upload'; +import { BehaviorSubject, Subscription, of } from 'rxjs'; + +export const MAX_ALLOCATIONS_COUNT = 100; +export const MAX_DESCRIPTIONS_COUNT = 5; +export const MAX_LINKS_COUNT = 20; + +@Injectable({ + providedIn: 'any', +}) +export class NewService { + public distributionOptions = [ + { label: $localize`Fixed price`, value: TokenDistributionType.FIXED }, + ]; + public maxAllocationsCount = MAX_ALLOCATIONS_COUNT; + public maxLinksCount = MAX_LINKS_COUNT; + + public nameControl: FormControl = new FormControl('', Validators.required); + public symbolControl: FormControl = new FormControl('', [ + Validators.required, + Validators.pattern(/^[A-Z]+$/), + Validators.minLength(2), + Validators.maxLength(5), + ]); + public priceControl: FormControl = new FormControl('1', [ + Validators.required, + Validators.min(0), + Validators.max(MAX_IOTA_AMOUNT / NETWORK_DETAIL[DEFAULT_NETWORK].divideBy), + ]); + public totalSupplyControl: FormControl = new FormControl('', [ + Validators.required, + Validators.min(MIN_TOTAL_TOKEN_SUPPLY), + Validators.max(MAX_TOTAL_TOKEN_SUPPLY), + ]); + public spaceControl: FormControl = new FormControl('', Validators.required); + public iconControl: FormControl = new FormControl('', Validators.required); + public titleControl: FormControl = new FormControl('', Validators.required); + public descriptionControl: FormControl = new FormControl('', Validators.required); + public shortTitleControl: FormControl = new FormControl(''); + public shortDescriptionControl: FormControl = new FormControl(''); + public decimalsControl: FormControl = new FormControl(6, [Validators.min(0), Validators.max(20)]); + public distributionControl: FormControl = new FormControl( + TokenDistributionType.FIXED, + Validators.required, + ); + public introductionaryControl: FormControl = new FormControl('', Validators.required); + public termsAndConditionsLinkControl: FormControl = new FormControl('', [ + Validators.required, + getUrlValidator(), + ]); + + public allocations: FormArray; + public links: FormArray; + public tokenForm: FormGroup; + public spaces$: BehaviorSubject = new BehaviorSubject([]); + + constructor( + private nzNotification: NzNotificationService, + private fileApi: FileApi, + private auth: AuthService, + ) { + this.allocations = new FormArray([] as FormGroup[]); + this.links = new FormArray([] as FormGroup[]); + + this.tokenForm = new FormGroup({ + name: this.nameControl, + symbol: this.symbolControl, + price: this.priceControl, + totalSupply: this.totalSupplyControl, + space: this.spaceControl, + icon: this.iconControl, + distribution: this.distributionControl, + introductionary: this.introductionaryControl, + title: this.titleControl, + description: this.descriptionControl, + allocations: this.allocations, + links: this.links, + termsAndConditionsLink: this.termsAndConditionsLinkControl, + shortDescription: this.shortDescriptionControl, + shortTitle: this.shortTitleControl, + decimals: this.decimalsControl, + }); + + this.addAllocation(); + this.addLink(); + } + + private getAllocationForm(title = '', percentage = '', isPublicSale = false): FormGroup { + return new FormGroup({ + title: new FormControl(title, Validators.required), + percentage: new FormControl(percentage, [ + Validators.required, + Validators.min(0.01), + Validators.max(100), + ]), + isPublicSale: new FormControl(isPublicSale), + }); + } + + public addAllocation(title = '', percentage = '', isPublicSale = false): void { + if (this.allocations.controls.length < MAX_ALLOCATIONS_COUNT) { + if (!percentage) { + percentage = String( + 100 - + this.allocations.value.reduce( + (acc: number, r: TokenAllocation) => acc + Number(r.percentage), + 0, + ), + ); + } + this.allocations.push(this.getAllocationForm(title, percentage, isPublicSale)); + } + } + + public removeAllocation(index: number): void { + this.allocations.removeAt(index); + } + + private getLinkForm(url = ''): FormGroup { + return new FormGroup({ + url: new FormControl(url, [Validators.required, getUrlValidator()]), + }); + } + + public addLink(url = ''): void { + if (this.links.controls.length < MAX_LINKS_COUNT) { + this.links.push(this.getLinkForm(url)); + } + } + + public removeLink(index: number): void { + this.links.removeAt(index); + } + + public gForm(f: any, value: string): any { + return f.get(value); + } + + public disabledStartDate(startValue: Date): boolean { + // Disable past dates & today + 1day startValue + if (startValue.getTime() < dayjs().toDate().getTime()) { + return true; + } + + return false; + } + + public getSpaceListOptions(list?: Space[] | null): SelectSpaceOption[] { + return (list || []) + .filter((o) => { + // Commented because it broke select-space + // return !!(o.validatedAddress || {})[DEFAULT_NETWORK]; + return !!(o.validatedAddress || {}); + }) + .map((o) => ({ + label: o.name || o.uid, + value: o.uid, + img: o.avatarUrl, + })); + } + + public uploadChangeIcon(event: NzUploadChangeParam): void { + this.uploadChange('token_icon', event); + } + + public uploadChangeIntroductionary(event: NzUploadChangeParam): void { + this.uploadChange('token_introductionary', event); + } + + private uploadChange( + type: 'token_icon' | 'token_introductionary', + event: NzUploadChangeParam, + ): void { + if (event.type === 'success') { + if (type === 'token_icon') { + this.iconControl.setValue(event.file.response); + } else if (type === 'token_introductionary') { + this.introductionaryControl.setValue(event.file.response); + } + } + } + + public uploadFile( + type: 'token_icon' | 'token_introductionary', + item: NzUploadXHRArgs, + ): Subscription { + if (!this.auth.member$.value) { + const err = $localize`Member seems to log out during the file upload request.`; + this.nzNotification.error(err, ''); + if (item.onError) { + item.onError(err, item.file); + } + + return of().subscribe(); + } + + return this.fileApi.upload(this.auth.member$.value.uid, item); + } +} diff --git a/src/app/pages/token/token-routing.module.ts b/src/app/pages/token/token-routing.module.ts new file mode 100644 index 0000000..4e3a603 --- /dev/null +++ b/src/app/pages/token/token-routing.module.ts @@ -0,0 +1,40 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { AirdropsPage } from './pages/airdrops/airdrops.page'; +import { MetricsPage } from './pages/metrics/metrics.page'; +import { NewPage } from './pages/new/new.page'; +import { OverviewPage } from './pages/overview/overview.page'; +import { TokenPage } from './pages/token/token.page'; +import { TradePage } from './pages/trade/trade.page'; + +const routes: Routes = [ + { + path: ROUTER_UTILS.config.token.newToken, + component: NewPage, + }, + { + path: ROUTER_UTILS.config.token.token, + component: TokenPage, + children: [ + { + path: '', + redirectTo: ROUTER_UTILS.config.token.overview, + pathMatch: 'full', + }, + { path: ROUTER_UTILS.config.token.overview, component: OverviewPage }, + { path: ROUTER_UTILS.config.token.metrics, component: MetricsPage }, + { path: ROUTER_UTILS.config.token.airdrops, component: AirdropsPage }, + ], + }, + { + path: ROUTER_UTILS.config.token.token + '/' + ROUTER_UTILS.config.token.trade, + component: TradePage, + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class TokenRoutingModule {} diff --git a/src/app/pages/token/token.module.ts b/src/app/pages/token/token.module.ts new file mode 100644 index 0000000..153950b --- /dev/null +++ b/src/app/pages/token/token.module.ts @@ -0,0 +1,153 @@ +import { CommonModule, DecimalPipe, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { ConnectWalletModule } from '@components/connect-wallet/connect-wallet.module'; +import { CountdownModule } from '@components/countdown/countdown.module'; +import { DescriptionModule } from '@components/description/description.module'; +import { DrawerToggleModule } from '@components/drawer-toggle/drawer-toggle.module'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { RadioModule } from '@components/radio/radio.module'; +import { ShareModule } from '@components/share/share.module'; +import { SelectSpaceModule } from '@components/space/components/select-space/select-space.module'; +import { TabsModule } from '@components/tabs/tabs.module'; +import { TokenAirdropNetworkModule } from '@components/token/components/token-airdrop-network/token-airdrop-network.module'; +import { TokenBidModule } from '@components/token/components/token-bid/token-bid.module'; +import { TokenCancelSaleModule } from '@components/token/components/token-cancel-sale/token-cancel-sale.module'; +import { TokenCancelModule } from '@components/token/components/token-cancel/token-cancel.module'; +import { TokenInfoDescriptionModule } from '@components/token/components/token-info/token-info-description.module'; +import { TokenMintNetworkModule } from '@components/token/components/token-mint-network/token-mint-network.module'; +import { TokenOfferMintModule } from '@components/token/components/token-offer-mint/token-offer-mint.module'; +import { TokenOfferModule } from '@components/token/components/token-offer/token-offer.module'; +import { TokenPublicSaleModule } from '@components/token/components/token-public-sale/token-public-sale.module'; +import { TokenPurchaseModule } from '@components/token/components/token-purchase/token-purchase.module'; +import { TokenRefundModule } from '@components/token/components/token-refund/token-refund.module'; +import { TokenTradeDetailModalModule } from '@components/token/components/token-trade-detail-modal/token-trade-detail-modal.module'; +import { TokenTradingPairsTableModule } from '@components/token/components/token-trading-pairs-table/token-trading-pairs-table.module'; +import { TradingViewModule } from '@components/trading-view/components/trading-view/trading-view.module'; +import { FormatTokenModule } from '@core/pipes/formatToken/format-token.module'; +import { MarkDownModule } from '@core/pipes/markdown/markdown.module'; +import { ResizeAvatarModule } from '@core/pipes/resize-avatar/resize-avatar.module'; +import { TruncateModule } from '@core/pipes/truncate/truncate.module'; +import { UnknownIfZeroModule } from '@core/pipes/unknown-if-zero/unknown-if-zero.module'; +import { UsdBelowTwoDecimalsModule } from '@core/pipes/usd-below-two-decimals/usd-below-two-decimals.module'; +import { LayoutModule } from '@shell/ui/layout/layout.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzCheckboxModule } from 'ng-zorro-antd/checkbox'; +import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; +import { NzDrawerModule } from 'ng-zorro-antd/drawer'; +import { NzDropDownModule } from 'ng-zorro-antd/dropdown'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzGridModule } from 'ng-zorro-antd/grid'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzProgressModule } from 'ng-zorro-antd/progress'; +import { NzRadioModule } from 'ng-zorro-antd/radio'; +import { NzSelectModule } from 'ng-zorro-antd/select'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzToolTipModule } from 'ng-zorro-antd/tooltip'; +import { NzUploadModule } from 'ng-zorro-antd/upload'; +import { NgChartsModule } from 'ng2-charts'; +import { AuditOneModule } from 'src/app/service-modules/audit-one/audit-one.module'; +import { AirdropsPage } from './pages/airdrops/airdrops.page'; +import { MetricsPage } from './pages/metrics/metrics.page'; +import { NewIntroductionComponent } from './pages/new/introduction/introduction.component'; +import { NewMetricsComponent } from './pages/new/metrics/metrics.component'; +import { NewPage } from './pages/new/new.page'; +import { NewOverviewComponent } from './pages/new/overview/overview.component'; +import { NewSummaryComponent } from './pages/new/summary/summary.component'; +import { OverviewPage } from './pages/overview/overview.page'; +import { TokenBuyComponent } from './pages/token/token-buy/token-buy.component'; +import { TokenEditComponent } from './pages/token/token-edit/token-edit.component'; +import { TokenInfoComponent } from './pages/token/token-info/token-info.component'; +import { TokenProgressComponent } from './pages/token/token-progress/token-progress.component'; +import { TokenPage } from './pages/token/token.page'; +import { TradePage } from './pages/trade/trade.page'; +import { HelperService } from './services/helper.service'; +import { TokenRoutingModule } from './token-routing.module'; + +@NgModule({ + declarations: [ + OverviewPage, + TokenPage, + MetricsPage, + AirdropsPage, + NewPage, + TokenInfoComponent, + NewMetricsComponent, + NewOverviewComponent, + NewSummaryComponent, + TokenBuyComponent, + TokenProgressComponent, + NewIntroductionComponent, + TradePage, + TokenEditComponent, + ], + providers: [DecimalPipe, PercentPipe, HelperService], + imports: [ + CommonModule, + TradingViewModule, + TokenRoutingModule, + TabsModule, + LayoutModule, + ShareModule, + NzProgressModule, + UnknownIfZeroModule, + IconModule, + NzCardModule, + DrawerToggleModule, + NzAvatarModule, + NzTagModule, + NzDrawerModule, + NzModalModule, + NzGridModule, + TruncateModule, + NzToolTipModule, + NzButtonModule, + MarkDownModule, + NgChartsModule, + TokenPurchaseModule, + FormatTokenModule, + UsdBelowTwoDecimalsModule, + NzUploadModule, + NzIconModule, + NzTableModule, + FormsModule, + ReactiveFormsModule, + NzInputModule, + NzFormModule, + NzDatePickerModule, + NzSelectModule, + NzCheckboxModule, + SelectSpaceModule, + RadioModule, + NzRadioModule, + DescriptionModule, + CountdownModule, + TokenPublicSaleModule, + NzSkeletonModule, + TokenBidModule, + TokenOfferMintModule, + TokenRefundModule, + AuditOneModule, + TokenOfferModule, + ModalDrawerModule, + NgChartsModule, + ResizeAvatarModule, + TokenInfoDescriptionModule, + TokenCancelSaleModule, + TokenMintNetworkModule, + TokenCancelModule, + ConnectWalletModule, + TokenTradeDetailModalModule, + NzDropDownModule, + TokenTradingPairsTableModule, + TokenAirdropNetworkModule, + ], +}) +export class TokenModule {} diff --git a/src/app/pages/tokens/pages/all-tokens/all-tokens.page.html b/src/app/pages/tokens/pages/all-tokens/all-tokens.page.html new file mode 100644 index 0000000..7211796 --- /dev/null +++ b/src/app/pages/tokens/pages/all-tokens/all-tokens.page.html @@ -0,0 +1,30 @@ + +
    + +
    + + + +
    + + +
    +
    +
    +
    + + + +
    diff --git a/src/app/pages/tokens/pages/all-tokens/all-tokens.page.less b/src/app/pages/tokens/pages/all-tokens/all-tokens.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts b/src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts new file mode 100644 index 0000000..daf70ec --- /dev/null +++ b/src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts @@ -0,0 +1,56 @@ +import { Component, OnInit } from '@angular/core'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { DeviceService } from '@core/services/device'; +import { FilterStorageService } from '@core/services/filter-storage'; +import { SeoService } from '@core/services/seo'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { COL, Timestamp } from '@soonaverse/interfaces'; +import { InstantSearchConfig } from 'angular-instantsearch/instantsearch/instantsearch'; +import { tokensSections } from '../tokens/tokens.page'; + +@UntilDestroy() +// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection +@Component({ + selector: 'wen-all-tokens', + templateUrl: './all-tokens.page.html', + styleUrls: ['./all-tokens.page.less'], + // changeDetection: ChangeDetectionStrategy.OnPush +}) +export class AllTokensPage implements OnInit { + public sections = tokensSections; + public config: InstantSearchConfig; + + constructor( + public deviceService: DeviceService, + public filterStorageService: FilterStorageService, + public algoliaService: AlgoliaService, + private seo: SeoService, + ) { + this.config = { + indexName: COL.TOKEN, + searchClient: this.algoliaService.searchClient, + initialUiState: { + token: this.filterStorageService.tokensAllTokensFilters$.value, + }, + }; + } + + public ngOnInit(): void { + this.seo.setTags( + $localize`Tokens`, + $localize`Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today.`, + ); + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + public convertAllToSoonaverseModel(algoliaItems: any[]) { + return algoliaItems.map((algolia) => ({ + ...algolia, + createdOn: Timestamp.fromMillis(+algolia.createdOn), + mintedClaimedOn: Timestamp.fromMillis(+algolia.mintedClaimedOn), + })); + } +} diff --git a/src/app/pages/tokens/pages/favourites/favourites.page.html b/src/app/pages/tokens/pages/favourites/favourites.page.html new file mode 100644 index 0000000..b370e6a --- /dev/null +++ b/src/app/pages/tokens/pages/favourites/favourites.page.html @@ -0,0 +1,61 @@ +
    + +
    + +
    + + + + +
    + + No Tokens + +
    +
    + + + +
    + + + +
    + +
    + Go to trading pairs to add your favourite tokens. +
    + +
    +
    +
    +
    diff --git a/src/app/pages/tokens/pages/favourites/favourites.page.less b/src/app/pages/tokens/pages/favourites/favourites.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/tokens/pages/favourites/favourites.page.ts b/src/app/pages/tokens/pages/favourites/favourites.page.ts new file mode 100644 index 0000000..25f1f3e --- /dev/null +++ b/src/app/pages/tokens/pages/favourites/favourites.page.ts @@ -0,0 +1,104 @@ +import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { TokenApi } from '@api/token.api'; +import { DeviceService } from '@core/services/device'; +import { SeoService } from '@core/services/seo'; +import { getItem, setItem, StorageItem } from '@core/utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { Token } from '@soonaverse/interfaces'; +import { BehaviorSubject, combineLatest, map, Observable, Subscription } from 'rxjs'; +import { tokensSections } from '../tokens/tokens.page'; + +@UntilDestroy() +@Component({ + selector: 'wen-favourites', + templateUrl: './favourites.page.html', + styleUrls: ['./favourites.page.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class FavouritesPage implements OnInit, OnDestroy { + public tokens$: BehaviorSubject = new BehaviorSubject( + undefined, + ); + public favourites: string[] = []; + public filteredTokens$: Observable; + public filterControl: FormControl; + public sections = tokensSections; + public tradingPairsPath = ROUTER_UTILS.config.tokens.tradingPairs; + private subscriptions$: Subscription[] = []; + + constructor( + public deviceService: DeviceService, + private tokenApi: TokenApi, + private seo: SeoService, + ) { + this.filterControl = new FormControl(''); + + this.filteredTokens$ = combineLatest([this.tokens$, this.filterControl.valueChanges]).pipe( + map(([tokens, filter]) => { + return tokens?.filter((r) => r.name.includes(filter || '')); + }), + ); + + if (this.deviceService.isBrowser) { + this.favourites = (getItem(StorageItem.FavouriteTokens) || []) as string[]; + setItem(StorageItem.FavouriteTokens, this.favourites); + } + } + + public ngOnInit(): void { + this.seo.setTags( + $localize`Tokens - Favourite`, + $localize`Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today.`, + ); + + this.listen(); + } + + private listen(): void { + this.cancelSubscriptions(); + this.tokens$.next(undefined); + if (!this.favourites?.length) return; + // We only support up to 10 favorities for now. + // TODO Improve this and go away from using IN. + this.subscriptions$.push( + this.tokenApi.listenMultiple(this.favourites.slice(0, 10)).subscribe((tokens) => { + this.tokens$.next(tokens); + this.filterControl.setValue(this.filterControl.value); + }), + ); + } + + public isLoading(arr: any): boolean { + return arr === undefined; + } + + public isEmpty(arr: any): boolean { + return Array.isArray(arr) && arr.length === 0; + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } + + public favouriteClick(token: Token): void { + if (this.favourites?.includes(token.uid)) { + this.favourites = this.favourites.filter((t) => t !== token.uid); + } else { + this.favourites = [...this.favourites, token.uid]; + } + + setItem(StorageItem.FavouriteTokens, this.favourites); + } + + private cancelSubscriptions(): void { + this.subscriptions$.forEach((s) => { + s.unsubscribe(); + }); + } + + public ngOnDestroy(): void { + this.cancelSubscriptions(); + } +} diff --git a/src/app/pages/tokens/pages/launchpad/launchpad.page.html b/src/app/pages/tokens/pages/launchpad/launchpad.page.html new file mode 100644 index 0000000..df899e9 --- /dev/null +++ b/src/app/pages/tokens/pages/launchpad/launchpad.page.html @@ -0,0 +1,30 @@ + +
    + +
    + + + +
    + + +
    +
    +
    +
    + + + +
    diff --git a/src/app/pages/tokens/pages/launchpad/launchpad.page.less b/src/app/pages/tokens/pages/launchpad/launchpad.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/tokens/pages/launchpad/launchpad.page.ts b/src/app/pages/tokens/pages/launchpad/launchpad.page.ts new file mode 100644 index 0000000..f05daca --- /dev/null +++ b/src/app/pages/tokens/pages/launchpad/launchpad.page.ts @@ -0,0 +1,56 @@ +import { Component, OnInit } from '@angular/core'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { DeviceService } from '@core/services/device'; +import { FilterStorageService } from '@core/services/filter-storage'; +import { SeoService } from '@core/services/seo'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { COL, Timestamp } from '@soonaverse/interfaces'; +import { InstantSearchConfig } from 'angular-instantsearch/instantsearch/instantsearch'; +import { tokensSections } from '../tokens/tokens.page'; + +@UntilDestroy() +// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection +@Component({ + selector: 'wen-launchpad', + templateUrl: './launchpad.page.html', + styleUrls: ['./launchpad.page.less'], + // changeDetection: ChangeDetectionStrategy.OnPush +}) +export class LaunchpadPage implements OnInit { + public config: InstantSearchConfig; + public sections = tokensSections; + + constructor( + public deviceService: DeviceService, + public filterStorageService: FilterStorageService, + public algoliaService: AlgoliaService, + private seo: SeoService, + ) { + this.config = { + indexName: COL.TOKEN, + searchClient: this.algoliaService.searchClient, + initialUiState: { + token: this.filterStorageService.tokensLaunchpadFilters$.value, + }, + }; + } + + public ngOnInit(): void { + this.seo.setTags( + $localize`Tokens - Launchpad`, + $localize`Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today.`, + ); + } + + public convertAllToSoonaverseModel(algoliaItems: any[]) { + return algoliaItems.map((algolia) => ({ + ...algolia, + createdOn: Timestamp.fromMillis(+algolia.createdOn), + mintedClaimedOn: Timestamp.fromMillis(+algolia.mintedClaimedOn), + })); + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } +} diff --git a/src/app/pages/tokens/pages/tokens/tokens.page.html b/src/app/pages/tokens/pages/tokens/tokens.page.html new file mode 100644 index 0000000..dd32372 --- /dev/null +++ b/src/app/pages/tokens/pages/tokens/tokens.page.html @@ -0,0 +1,63 @@ + +

    Tokens

    + +
    +
    + +
    + Some tokens may not yet be migrated to the decentralized network. Make sure you know what + you are buying. +
    +
    + +
    +
    + I understand +
    + +
    +
    + +
    + + + + + + +
    + + +
    diff --git a/src/app/pages/tokens/pages/tokens/tokens.page.less b/src/app/pages/tokens/pages/tokens/tokens.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/tokens/pages/tokens/tokens.page.ts b/src/app/pages/tokens/pages/tokens/tokens.page.ts new file mode 100644 index 0000000..5445ab5 --- /dev/null +++ b/src/app/pages/tokens/pages/tokens/tokens.page.ts @@ -0,0 +1,113 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { TokenApi } from '@api/token.api'; +import { FavouritesIconComponent } from '@components/icon/favourites/favourites.component'; +import { TabSection } from '@components/tabs/tabs.component'; +import { DeviceService } from '@core/services/device'; +import { StorageItem, getItem, setItem } from '@core/utils'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { environment } from '@env/environment'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { Token } from '@soonaverse/interfaces'; +import { filter } from 'rxjs'; + +export const tokensSections: TabSection[] = [ + { + route: `../${ROUTER_UTILS.config.tokens.favourites}`, + label: $localize`Favorites`, + icon: FavouritesIconComponent, + }, + { route: `../${ROUTER_UTILS.config.tokens.allTokens}`, label: $localize`All tokens` }, + { route: `../${ROUTER_UTILS.config.tokens.tradingPairs}`, label: $localize`Trading pairs` }, + { route: `../${ROUTER_UTILS.config.tokens.launchpad}`, label: $localize`Launchpad` }, +]; + +const HIGHLIGHT_TOKENS = + environment.production === false + ? ['0xf0ae0ebc9c300657168a2fd20653799fbbfc3b48', '0x7eff2c7271851418f792daffe688e662a658950d'] + : ['0xf0ae0ebc9c300657168a2fd20653799fbbfc3b48', '0x9600b5afbb84f15e0d4c0f90ea60b2b8d7bd0f1e']; + +@UntilDestroy() +@Component({ + selector: 'wen-tokens', + templateUrl: './tokens.page.html', + styleUrls: ['./tokens.page.less'], + // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection + changeDetection: ChangeDetectionStrategy.Default, +}) +export class TokensPage implements OnInit { + public isMigrationWarningVisible = false; + public highlightTokens: Token[] = []; + public recentlyListedTokens: Token[] = []; + + constructor( + public deviceService: DeviceService, + private tokenApi: TokenApi, + private cd: ChangeDetectorRef, + private router: Router, + ) {} + + public ngOnInit(): void { + this.deviceService.viewWithSearch$.next(false); + this.handleMigrationWarning(); + this.listenToHighlightTokens(); + this.listenToRecentlyListedTokens(); + + if (this.deviceService.isBrowser) { + const routeSplit: string[] = this.router.url.split('/'); + if ( + ((getItem(StorageItem.FavouriteTokens) as string[]) || [])?.length && + (routeSplit.length === 2 || routeSplit[2] === ROUTER_UTILS.config.tokens.favourites) + ) { + this.router.navigate([ + '/', + ROUTER_UTILS.config.tokens.root, + ROUTER_UTILS.config.tokens.favourites, + ]); + } else if (routeSplit.length === 2) { + this.router.navigate([ + '/', + ROUTER_UTILS.config.tokens.root, + ROUTER_UTILS.config.tokens.allTokens, + ]); + } + } + } + + public understandMigrationWarning(): void { + setItem(StorageItem.TokenMigrationWarningClosed, true); + this.isMigrationWarningVisible = false; + this.cd.markForCheck(); + } + + private handleMigrationWarning(): void { + const migrationWarningClosed = getItem(StorageItem.TokenMigrationWarningClosed); + if (!migrationWarningClosed) { + this.isMigrationWarningVisible = true; + } + this.cd.markForCheck(); + } + + private listenToHighlightTokens(): void { + this.tokenApi + .listenMultiple(HIGHLIGHT_TOKENS) + .pipe( + filter((r) => r.every((token) => token)), + untilDestroyed(this), + ) + .subscribe((r) => { + this.highlightTokens = r as Token[]; + this.cd.markForCheck(); + }); + } + + private listenToRecentlyListedTokens(): void { + this.tokenApi + .topPublic(undefined, 2) + .pipe(untilDestroyed(this)) + .subscribe((r) => { + this.recentlyListedTokens = r; + this.cd.markForCheck(); + }); + } +} diff --git a/src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.html b/src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.html new file mode 100644 index 0000000..c50f1b5 --- /dev/null +++ b/src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.html @@ -0,0 +1,32 @@ + +
    + +
    + + + +
    + + +
    +
    +
    +
    + + + +
    diff --git a/src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.less b/src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts b/src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts new file mode 100644 index 0000000..6ad67fe --- /dev/null +++ b/src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts @@ -0,0 +1,70 @@ +import { Component, OnInit } from '@angular/core'; +import { AlgoliaService } from '@components/algolia/services/algolia.service'; +import { DeviceService } from '@core/services/device'; +import { FilterStorageService } from '@core/services/filter-storage'; +import { SeoService } from '@core/services/seo'; +import { StorageItem, getItem, setItem } from '@core/utils'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { COL, Timestamp, Token } from '@soonaverse/interfaces'; +import { InstantSearchConfig } from 'angular-instantsearch/instantsearch/instantsearch'; +import { tokensSections } from '../tokens/tokens.page'; + +@UntilDestroy() +// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection +@Component({ + selector: 'wen-trading-pairs', + templateUrl: './trading-pairs.page.html', + styleUrls: ['./trading-pairs.page.less'], + // changeDetection: ChangeDetectionStrategy.OnPush +}) +export class TradingPairsPage implements OnInit { + public sections = tokensSections; + public config: InstantSearchConfig; + public favourites: string[] = []; + + constructor( + public deviceService: DeviceService, + public filterStorageService: FilterStorageService, + public algoliaService: AlgoliaService, + private seo: SeoService, + ) { + this.config = { + indexName: COL.TOKEN, + searchClient: this.algoliaService.searchClient, + initialUiState: { + token: this.filterStorageService.tokensTradingPairsFilters$.value, + }, + }; + } + + public ngOnInit(): void { + this.seo.setTags( + $localize`Tokens - Trading Pairs`, + $localize`The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today!`, + ); + + this.favourites = (getItem(StorageItem.FavouriteTokens) as string[]) || []; + } + + public favouriteClick(token: Token): void { + if (this.favourites?.includes(token.uid)) { + this.favourites = this.favourites.filter((t) => t !== token.uid); + } else { + this.favourites = [...this.favourites, token.uid]; + } + + setItem(StorageItem.FavouriteTokens, this.favourites); + } + + public convertAllToSoonaverseModel(algoliaItems: any[]) { + return algoliaItems.map((algolia) => ({ + ...algolia, + createdOn: Timestamp.fromMillis(+algolia.createdOn), + mintedClaimedOn: Timestamp.fromMillis(+algolia.mintedClaimedOn), + })); + } + + public trackByUid(index: number, item: any): number { + return item.uid; + } +} diff --git a/src/app/pages/tokens/services/filter.service.ts b/src/app/pages/tokens/services/filter.service.ts new file mode 100644 index 0000000..56d267a --- /dev/null +++ b/src/app/pages/tokens/services/filter.service.ts @@ -0,0 +1,12 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; + +// Needs to be implemented +@Injectable({ + providedIn: 'any', +}) +export class FilterService { + public search$: BehaviorSubject = new BehaviorSubject( + undefined, + ); +} diff --git a/src/app/pages/tokens/tokens-routing.module.ts b/src/app/pages/tokens/tokens-routing.module.ts new file mode 100644 index 0000000..c803ac5 --- /dev/null +++ b/src/app/pages/tokens/tokens-routing.module.ts @@ -0,0 +1,32 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ROUTER_UTILS } from '@core/utils/router.utils'; +import { AllTokensPage } from './pages/all-tokens/all-tokens.page'; +import { FavouritesPage } from './pages/favourites/favourites.page'; +import { LaunchpadPage } from './pages/launchpad/launchpad.page'; +import { TokensPage } from './pages/tokens/tokens.page'; +import { TradingPairsPage } from './pages/trading-pairs/trading-pairs.page'; + +const routes: Routes = [ + { + path: '', + component: TokensPage, + children: [ + { + path: '', + redirectTo: ROUTER_UTILS.config.tokens.allTokens, + pathMatch: 'full', + }, + { path: ROUTER_UTILS.config.tokens.favourites, component: FavouritesPage }, + { path: ROUTER_UTILS.config.tokens.allTokens, component: AllTokensPage }, + { path: ROUTER_UTILS.config.tokens.tradingPairs, component: TradingPairsPage }, + { path: ROUTER_UTILS.config.tokens.launchpad, component: LaunchpadPage }, + ], + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class TokensRoutingModule {} diff --git a/src/app/pages/tokens/tokens.module.ts b/src/app/pages/tokens/tokens.module.ts new file mode 100644 index 0000000..3604e85 --- /dev/null +++ b/src/app/pages/tokens/tokens.module.ts @@ -0,0 +1,60 @@ +import { CommonModule, PercentPipe } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { AlgoliaModule } from '@components/algolia/algolia.module'; +import { IconModule } from '@components/icon/icon.module'; +import { MobileSearchModule } from '@components/mobile-search/mobile-search.module'; +import { TabsModule } from '@components/tabs/tabs.module'; +import { TokenAllTokenRowModule } from '@components/token/components/token-all-token-row/token-all-token-row.module'; +import { TokenHighlightCardModule } from '@components/token/components/token-highlight-card/token-highlight-card.module'; +import { TokenLaunchpadRowModule } from '@components/token/components/token-launchpad-row/token-launchpad-row.module'; +import { TokenRowModule } from '@components/token/components/token-row/token-row.module'; +import { TokenTradingPairRowModule } from '@components/token/components/token-trading-pair-row/token-trading-pair-row.module'; +import { OnVisibleModule } from '@core/directives/on-visible/on-visible.module'; +import { HelperService } from '@pages/token/services/helper.service'; +import { LayoutModule } from '@shell/ui/layout/layout.module'; +import { NgAisToggleModule } from 'angular-instantsearch'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzSkeletonModule } from 'ng-zorro-antd/skeleton'; +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; + +import { AllTokensPage } from './pages/all-tokens/all-tokens.page'; +import { FavouritesPage } from './pages/favourites/favourites.page'; +import { LaunchpadPage } from './pages/launchpad/launchpad.page'; +import { TokensPage } from './pages/tokens/tokens.page'; +import { TradingPairsPage } from './pages/trading-pairs/trading-pairs.page'; +import { TokensRoutingModule } from './tokens-routing.module'; + +@NgModule({ + declarations: [TokensPage, FavouritesPage, AllTokensPage, TradingPairsPage, LaunchpadPage], + imports: [ + CommonModule, + TokensRoutingModule, + NzCardModule, + LayoutModule, + AlgoliaModule, + IconModule, + TokenHighlightCardModule, + TokenRowModule, + InfiniteScrollModule, + NzInputModule, + NzSkeletonModule, + FormsModule, + ReactiveFormsModule, + NzFormModule, + TabsModule, + MobileSearchModule, + TokenTradingPairRowModule, + TokenAllTokenRowModule, + TokenLaunchpadRowModule, + NzButtonModule, + PercentPipe, + OnVisibleModule, + NgAisToggleModule, + ], + providers: [PercentPipe, HelperService], +}) +export class TokensModule {} diff --git a/src/app/service-modules/audit-one/audit-one.module.ts b/src/app/service-modules/audit-one/audit-one.module.ts new file mode 100644 index 0000000..7b54a13 --- /dev/null +++ b/src/app/service-modules/audit-one/audit-one.module.ts @@ -0,0 +1,32 @@ +import { CommonModule } from '@angular/common'; +import { HttpClientModule } from '@angular/common/http'; +import { NgModule } from '@angular/core'; +import { IconModule } from '@components/icon/icon.module'; +import { ModalDrawerModule } from '@components/modal-drawer/modal-drawer.module'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzBadgeModule } from 'ng-zorro-antd/badge'; +import { NzButtonModule } from 'ng-zorro-antd/button'; +import { NzCardModule } from 'ng-zorro-antd/card'; +import { NzTableModule } from 'ng-zorro-antd/table'; +import { BadgeComponent } from './components/badge/badge.component'; +import { ModalComponent } from './components/modal/modal.component'; +import { WidgetComponent } from './components/widget/widget.component'; +import { AuditOneQueryService } from './services/query.service'; + +@NgModule({ + declarations: [WidgetComponent, ModalComponent, BadgeComponent], + providers: [AuditOneQueryService], + imports: [ + CommonModule, + NzCardModule, + NzAvatarModule, + IconModule, + NzButtonModule, + HttpClientModule, + NzBadgeModule, + NzTableModule, + ModalDrawerModule, + ], + exports: [WidgetComponent, ModalComponent, BadgeComponent], +}) +export class AuditOneModule {} diff --git a/src/app/service-modules/audit-one/components/badge/badge.component.html b/src/app/service-modules/audit-one/components/badge/badge.component.html new file mode 100644 index 0000000..0282b5c --- /dev/null +++ b/src/app/service-modules/audit-one/components/badge/badge.component.html @@ -0,0 +1,10 @@ + + + + + + + diff --git a/src/app/service-modules/audit-one/components/badge/badge.component.less b/src/app/service-modules/audit-one/components/badge/badge.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/service-modules/audit-one/components/badge/badge.component.ts b/src/app/service-modules/audit-one/components/badge/badge.component.ts new file mode 100644 index 0000000..0e99918 --- /dev/null +++ b/src/app/service-modules/audit-one/components/badge/badge.component.ts @@ -0,0 +1,13 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { AuditOneResponse } from '../../services/query.service'; + +@Component({ + selector: 'wen-audit-one-badge', + templateUrl: './badge.component.html', + styleUrls: ['./badge.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class BadgeComponent { + @Input() public entity?: string; + @Input() public dataset?: AuditOneResponse | null; +} diff --git a/src/app/service-modules/audit-one/components/modal/modal.component.html b/src/app/service-modules/audit-one/components/modal/modal.component.html new file mode 100644 index 0000000..4f2e0f2 --- /dev/null +++ b/src/app/service-modules/audit-one/components/modal/modal.component.html @@ -0,0 +1,54 @@ + + + + + + + + Description + Requested On + Last Update + Action + + + + + +
    + {{ att.label }} +
    + + + {{ att.requestedOn ? (att.requestedOn | date) : ' - ' }} + + {{ att.updatedOn ? (att.updatedOn | date) : ' - ' }} + + {{ att.link.label }} + + + +
    + + +
    There are no records.
    +
    +
    diff --git a/src/app/service-modules/audit-one/components/modal/modal.component.less b/src/app/service-modules/audit-one/components/modal/modal.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/service-modules/audit-one/components/modal/modal.component.ts b/src/app/service-modules/audit-one/components/modal/modal.component.ts new file mode 100644 index 0000000..f3f3ed9 --- /dev/null +++ b/src/app/service-modules/audit-one/components/modal/modal.component.ts @@ -0,0 +1,26 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { AuditOneAttribute, AuditOneResponse } from '../../services/query.service'; +@Component({ + selector: 'wen-audit-one-modal', + templateUrl: './modal.component.html', + styleUrls: ['./modal.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ModalComponent { + @Input() public entity?: string; + @Input() public dataset?: AuditOneResponse | null; + @Input() public canManage?: boolean; + @Output() wenOnClose = new EventEmitter(); + + public close(): void { + this.wenOnClose.next(); + } + + public getFilterModal(): AuditOneAttribute[] { + if (!this.dataset?.attributes) { + return []; + } + + return this.dataset.attributes; + } +} diff --git a/src/app/service-modules/audit-one/components/widget/widget.component.html b/src/app/service-modules/audit-one/components/widget/widget.component.html new file mode 100644 index 0000000..cfdca0e --- /dev/null +++ b/src/app/service-modules/audit-one/components/widget/widget.component.html @@ -0,0 +1,63 @@ + +
    +
    + + +
    AuditOne
    +
    + + Manage + + +
    +
    +
    + + +
    + {{ dataset?.status?.label || 'Loading...' }} + Verified +
    +
    + +
    +
    + + diff --git a/src/app/service-modules/audit-one/components/widget/widget.component.less b/src/app/service-modules/audit-one/components/widget/widget.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/app/service-modules/audit-one/components/widget/widget.component.ts b/src/app/service-modules/audit-one/components/widget/widget.component.ts new file mode 100644 index 0000000..e3fc168 --- /dev/null +++ b/src/app/service-modules/audit-one/components/widget/widget.component.ts @@ -0,0 +1,26 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { AuditOneResponse } from '../../services/query.service'; + +@Component({ + selector: 'wen-audit-one-widget', + templateUrl: './widget.component.html', + styleUrls: ['./widget.component.less'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class WidgetComponent { + @Input() public entity?: string; + @Input() public canManage?: boolean; + public isAuditOneModalOpen = false; + @Input() public dataset?: AuditOneResponse | null; + constructor(public cd: ChangeDetectorRef) {} + + public openAuditOneModal() { + this.isAuditOneModalOpen = true; + this.cd.markForCheck(); + } + + public closeAuditOneModal(): void { + this.isAuditOneModalOpen = false; + this.cd.markForCheck(); + } +} diff --git a/src/app/service-modules/audit-one/services/query.service.ts b/src/app/service-modules/audit-one/services/query.service.ts new file mode 100644 index 0000000..e19c368 --- /dev/null +++ b/src/app/service-modules/audit-one/services/query.service.ts @@ -0,0 +1,105 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { UntilDestroy } from '@ngneat/until-destroy'; +import { firstValueFrom } from 'rxjs'; +import { map } from 'rxjs/operators'; + +export interface AuditOneAttribute { + // Validation in progress. + id: string; + label: string; + updatedOn: Date; + requestedOn: Date; + status: { + label: string; + code: number; + }; + link: { + url: string; + label: string; + adminOnly: boolean; + }; +} + +export interface AuditOneResponse { + id: string; + status: { + label: string; + code: number; + }; + isVerified: boolean; + attributes: AuditOneAttribute[]; +} + +export interface AuditOneResponseMember extends AuditOneResponse { + placeholder: void; +} + +export interface AuditOneResponseSpace extends AuditOneResponse { + membersKycStatus: AuditOneResponse[]; +} + +export interface AuditOneResponseCollection extends AuditOneResponse { + placeholder: void; +} + +export interface AuditOneResponseToken extends AuditOneResponse { + placeholder: void; +} + +@UntilDestroy() +@Injectable({ + providedIn: 'any', +}) +export class AuditOneQueryService { + public apiRootUrl = 'https://api.auditone.io'; + constructor(private http: HttpClient) {} + public getMemberStatus(id: string): Promise { + const path = this.apiRootUrl + '/getKycStatusOfMember' + '?id=' + id; + return >firstValueFrom( + this.http.get(path).pipe( + map((v) => { + return this.parseData(v); + }), + ), + ); + } + + public getCollectionStatus(id: string): Promise { + const path = this.apiRootUrl + '/getKycStatusOfCollection' + '?id=' + id; + return >firstValueFrom( + this.http.get(path).pipe( + map((v) => { + return this.parseData(v); + }), + ), + ); + } + + public getTokenStatus(id: string): Promise { + const path = this.apiRootUrl + '/getKycStatusOfToken' + '?id=' + id; + return >firstValueFrom( + this.http.get(path).pipe( + map((v) => { + return this.parseData(v); + }), + ), + ); + } + + public getSpaceStatus(id: string): Promise { + const path = this.apiRootUrl + '/getKycStatusOfSpace' + '?id=' + id; + return >firstValueFrom( + this.http.get(path).pipe( + map((v) => { + return this.parseData(v); + }), + ), + ); + } + + public parseData(obj: any): AuditOneResponseSpace | AuditOneResponseMember { + obj.isVerified = obj.isVerified === 'true' || obj.isVerified === true; + return obj; + } +} diff --git a/src/assets/.gitkeep b/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/logos/audit_one_logo.png b/src/assets/logos/audit_one_logo.png new file mode 100644 index 0000000..31b1602 Binary files /dev/null and b/src/assets/logos/audit_one_logo.png differ diff --git a/src/assets/logos/bee.svg b/src/assets/logos/bee.svg new file mode 100644 index 0000000..4486d59 --- /dev/null +++ b/src/assets/logos/bee.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logos/bee_dark.svg b/src/assets/logos/bee_dark.svg new file mode 100644 index 0000000..3a7f158 --- /dev/null +++ b/src/assets/logos/bee_dark.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/logos/bee_light.svg b/src/assets/logos/bee_light.svg new file mode 100644 index 0000000..3b83b99 --- /dev/null +++ b/src/assets/logos/bee_light.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/logos/firefly.svg b/src/assets/logos/firefly.svg new file mode 100644 index 0000000..dcfd51f --- /dev/null +++ b/src/assets/logos/firefly.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/logos/shimmer.png b/src/assets/logos/shimmer.png new file mode 100644 index 0000000..f071faa Binary files /dev/null and b/src/assets/logos/shimmer.png differ diff --git a/src/assets/logos/shimmer_green.png b/src/assets/logos/shimmer_green.png new file mode 100644 index 0000000..47e5cde Binary files /dev/null and b/src/assets/logos/shimmer_green.png differ diff --git a/src/assets/logos/tanglepay.png b/src/assets/logos/tanglepay.png new file mode 100644 index 0000000..d8837a4 Binary files /dev/null and b/src/assets/logos/tanglepay.png differ diff --git a/src/assets/metamask.svg b/src/assets/metamask.svg new file mode 100644 index 0000000..2348bb3 --- /dev/null +++ b/src/assets/metamask.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/mocks/Iotabee_FIN_1.jpg b/src/assets/mocks/Iotabee_FIN_1.jpg new file mode 100644 index 0000000..3c6fdd5 Binary files /dev/null and b/src/assets/mocks/Iotabee_FIN_1.jpg differ diff --git a/src/assets/mocks/Iotabee_FIN_logo02.mp4 b/src/assets/mocks/Iotabee_FIN_logo02.mp4 new file mode 100644 index 0000000..c148183 Binary files /dev/null and b/src/assets/mocks/Iotabee_FIN_logo02.mp4 differ diff --git a/src/assets/mocks/Skyscraper_FIN.jpg b/src/assets/mocks/Skyscraper_FIN.jpg new file mode 100644 index 0000000..6e56ce0 Binary files /dev/null and b/src/assets/mocks/Skyscraper_FIN.jpg differ diff --git a/src/assets/mocks/about_us.jpg b/src/assets/mocks/about_us.jpg new file mode 100644 index 0000000..999ea98 Binary files /dev/null and b/src/assets/mocks/about_us.jpg differ diff --git a/src/assets/mocks/about_us_dark.jpg b/src/assets/mocks/about_us_dark.jpg new file mode 100644 index 0000000..4612599 Binary files /dev/null and b/src/assets/mocks/about_us_dark.jpg differ diff --git a/src/assets/mocks/bee_soon.png b/src/assets/mocks/bee_soon.png new file mode 100644 index 0000000..8743d89 Binary files /dev/null and b/src/assets/mocks/bee_soon.png differ diff --git a/src/assets/mocks/build_dao_banner.jpg b/src/assets/mocks/build_dao_banner.jpg new file mode 100644 index 0000000..cb454ff Binary files /dev/null and b/src/assets/mocks/build_dao_banner.jpg differ diff --git a/src/assets/mocks/build_dao_banner_dark.jpg b/src/assets/mocks/build_dao_banner_dark.jpg new file mode 100644 index 0000000..2ab975b Binary files /dev/null and b/src/assets/mocks/build_dao_banner_dark.jpg differ diff --git a/src/assets/mocks/default_avatar.jpg b/src/assets/mocks/default_avatar.jpg new file mode 100644 index 0000000..8aef441 Binary files /dev/null and b/src/assets/mocks/default_avatar.jpg differ diff --git a/src/assets/mocks/founders_galaxy.png b/src/assets/mocks/founders_galaxy.png new file mode 100644 index 0000000..db65442 Binary files /dev/null and b/src/assets/mocks/founders_galaxy.png differ diff --git a/src/assets/mocks/iota-token.png b/src/assets/mocks/iota-token.png new file mode 100644 index 0000000..0f85737 Binary files /dev/null and b/src/assets/mocks/iota-token.png differ diff --git a/src/assets/mocks/iota-treasury.png b/src/assets/mocks/iota-treasury.png new file mode 100644 index 0000000..8295dd2 Binary files /dev/null and b/src/assets/mocks/iota-treasury.png differ diff --git a/src/assets/mocks/manage_dao_banner.jpg b/src/assets/mocks/manage_dao_banner.jpg new file mode 100644 index 0000000..16aa73f Binary files /dev/null and b/src/assets/mocks/manage_dao_banner.jpg differ diff --git a/src/assets/mocks/manage_dao_banner_dark.png b/src/assets/mocks/manage_dao_banner_dark.png new file mode 100644 index 0000000..0464bc3 Binary files /dev/null and b/src/assets/mocks/manage_dao_banner_dark.png differ diff --git a/src/assets/mocks/no_avatar.png b/src/assets/mocks/no_avatar.png new file mode 100644 index 0000000..9814162 Binary files /dev/null and b/src/assets/mocks/no_avatar.png differ diff --git a/src/assets/mocks/no_banner.jpg b/src/assets/mocks/no_banner.jpg new file mode 100644 index 0000000..7f78e5a Binary files /dev/null and b/src/assets/mocks/no_banner.jpg differ diff --git a/src/assets/mocks/not_found.jpg b/src/assets/mocks/not_found.jpg new file mode 100644 index 0000000..2a98905 Binary files /dev/null and b/src/assets/mocks/not_found.jpg differ diff --git a/src/assets/mocks/own_dao_banner.jpg b/src/assets/mocks/own_dao_banner.jpg new file mode 100644 index 0000000..8f3e496 Binary files /dev/null and b/src/assets/mocks/own_dao_banner.jpg differ diff --git a/src/assets/mocks/own_dao_banner_dark.jpg b/src/assets/mocks/own_dao_banner_dark.jpg new file mode 100644 index 0000000..a2d2f3d Binary files /dev/null and b/src/assets/mocks/own_dao_banner_dark.jpg differ diff --git a/src/assets/mocks/soon_placeholder.jpg b/src/assets/mocks/soon_placeholder.jpg new file mode 100644 index 0000000..cb75562 Binary files /dev/null and b/src/assets/mocks/soon_placeholder.jpg differ diff --git a/src/assets/mocks/soon_placeholder.png b/src/assets/mocks/soon_placeholder.png new file mode 100644 index 0000000..7c72344 Binary files /dev/null and b/src/assets/mocks/soon_placeholder.png differ diff --git a/src/assets/mocks/soon_placeholder_dark.jpg b/src/assets/mocks/soon_placeholder_dark.jpg new file mode 100644 index 0000000..1a54479 Binary files /dev/null and b/src/assets/mocks/soon_placeholder_dark.jpg differ diff --git a/src/assets/mocks/soon_staking.png b/src/assets/mocks/soon_staking.png new file mode 100644 index 0000000..1342049 Binary files /dev/null and b/src/assets/mocks/soon_staking.png differ diff --git a/src/assets/mocks/soonaverse_banner.jpg b/src/assets/mocks/soonaverse_banner.jpg new file mode 100644 index 0000000..82edac2 Binary files /dev/null and b/src/assets/mocks/soonaverse_banner.jpg differ diff --git a/src/assets/mocks/soonaverse_banner.png b/src/assets/mocks/soonaverse_banner.png new file mode 100644 index 0000000..72ac24b Binary files /dev/null and b/src/assets/mocks/soonaverse_banner.png differ diff --git a/src/assets/mocks/soonaverse_banner_dark.jpg b/src/assets/mocks/soonaverse_banner_dark.jpg new file mode 100644 index 0000000..17df548 Binary files /dev/null and b/src/assets/mocks/soonaverse_banner_dark.jpg differ diff --git a/src/assets/mocks/soonaverse_banner_dark.png b/src/assets/mocks/soonaverse_banner_dark.png new file mode 100644 index 0000000..4849d97 Binary files /dev/null and b/src/assets/mocks/soonaverse_banner_dark.png differ diff --git a/src/assets/mocks/soonlabs-token.png b/src/assets/mocks/soonlabs-token.png new file mode 100644 index 0000000..af9a9f2 Binary files /dev/null and b/src/assets/mocks/soonlabs-token.png differ diff --git a/src/assets/mocks/soonlabs.png b/src/assets/mocks/soonlabs.png new file mode 100644 index 0000000..4438bac Binary files /dev/null and b/src/assets/mocks/soonlabs.png differ diff --git a/src/assets/mocks/treasure_banner.jpg b/src/assets/mocks/treasure_banner.jpg new file mode 100644 index 0000000..4760ece Binary files /dev/null and b/src/assets/mocks/treasure_banner.jpg differ diff --git a/src/assets/mocks/treasure_banner_dark.jpg b/src/assets/mocks/treasure_banner_dark.jpg new file mode 100644 index 0000000..79a2a91 Binary files /dev/null and b/src/assets/mocks/treasure_banner_dark.jpg differ diff --git a/src/assets/mocks/trophy.png b/src/assets/mocks/trophy.png new file mode 100644 index 0000000..79ae973 Binary files /dev/null and b/src/assets/mocks/trophy.png differ diff --git a/src/assets/mocks/video_placeholder.jpg b/src/assets/mocks/video_placeholder.jpg new file mode 100644 index 0000000..bdc2f22 Binary files /dev/null and b/src/assets/mocks/video_placeholder.jpg differ diff --git a/src/assets/static-home/css/normalize.css b/src/assets/static-home/css/normalize.css new file mode 100644 index 0000000..dd0e16a --- /dev/null +++ b/src/assets/static-home/css/normalize.css @@ -0,0 +1,355 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS and IE text size adjust after device orientation change, + * without disabling user zoom. + */ +html { + font-family: sans-serif; + /* 1 */ + -ms-text-size-adjust: 100%; + /* 2 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} +/** + * Remove default margin. + */ +body { + margin: 0; +} +/* HTML5 display definitions + ========================================================================== */ +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ +audio, +canvas, +progress, +video { + display: inline-block; + /* 1 */ + vertical-align: baseline; + /* 2 */ +} +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ +audio:not([controls]) { + display: none; + height: 0; +} +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; +} +/* Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background-color: transparent; +} +/** + * Improve readability of focused elements when they are also in an + * active/hover state. + */ +a:active, +a:hover { + outline: 0; +} +/* Text-level semantics + ========================================================================== */ +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ +abbr[title] { + border-bottom: 1px dotted; +} +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ +b, +strong { + font-weight: bold; +} +/** + * Address styling not present in Safari and Chrome. + */ +dfn { + font-style: italic; +} +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} +/** + * Address styling not present in IE 8/9. + */ +mark { + background: #ff0; + color: #000; +} +/** + * Address inconsistent and variable font size in all browsers. + */ +small { + font-size: 80%; +} +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +/* Embedded content + ========================================================================== */ +/** + * Remove border when inside `a` element in IE 8/9/10. + */ +img { + border: 0; +} +/** + * Correct overflow not hidden in IE 9/10/11. + */ +svg:not(:root) { + overflow: hidden; +} +/* Grouping content + ========================================================================== */ +/** + * Address margin not present in IE 8/9 and Safari. + */ +figure { + margin: 1em 40px; +} +/** + * Address differences between Firefox and other browsers. + */ +hr { + box-sizing: content-box; + height: 0; +} +/** + * Contain overflow in all browsers. + */ +pre { + overflow: auto; +} +/** + * Address odd `em`-unit font size rendering in all browsers. + */ +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +/* Forms + ========================================================================== */ +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ +button, +input, +optgroup, +select, +textarea { + color: inherit; + /* 1 */ + font: inherit; + /* 2 */ + margin: 0; + /* 3 */ +} +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ +button { + overflow: visible; +} +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ +button, +select { + text-transform: none; +} +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + * 4. CUSTOM FOR WEBFLOW: Removed the input[type="submit"] selector to reduce + * specificity and defer to the .w-button selector + */ +button, +html input[type='button'], +input[type='reset'] { + -webkit-appearance: button; + /* 2 */ + cursor: pointer; + /* 3 */ +} +/** + * Re-set default cursor for disabled elements. + */ +button[disabled], +html input[disabled] { + cursor: default; +} +/** + * Remove inner padding and border in Firefox 4+. + */ +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ +input { + line-height: normal; +} +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ +input[type='checkbox'], +input[type='radio'] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ +input[type='number']::-webkit-inner-spin-button, +input[type='number']::-webkit-outer-spin-button { + height: auto; +} +/** + * 1. CUSTOM FOR WEBFLOW: changed from `textfield` to `none` to normalize iOS rounded input + * 2. CUSTOM FOR WEBFLOW: box-sizing: content-box rule removed + * (similar to normalize.css >=4.0.0) + */ +input[type='search'] { + -webkit-appearance: none; + /* 1 */ +} +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ +input[type='search']::-webkit-search-cancel-button, +input[type='search']::-webkit-search-decoration { + -webkit-appearance: none; +} +/** + * Define consistent border, margin, and padding. + */ +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ +legend { + border: 0; + /* 1 */ + padding: 0; + /* 2 */ +} +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ +textarea { + overflow: auto; +} +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ +optgroup { + font-weight: bold; +} +/* Tables + ========================================================================== */ +/** + * Remove most spacing between table cells. + */ +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} diff --git a/src/assets/static-home/css/soonaverse-f61cb6.webflow.css b/src/assets/static-home/css/soonaverse-f61cb6.webflow.css new file mode 100644 index 0000000..46626cd --- /dev/null +++ b/src/assets/static-home/css/soonaverse-f61cb6.webflow.css @@ -0,0 +1,1625 @@ +body { + font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; + color: #333; + font-size: 1vw; + line-height: 1vw; +} + +.section-main { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + overflow: hidden; + height: 60em; + margin-top: 4em; + margin-bottom: 4em; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} + +.section-main.what-we-do { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 90em; + height: auto; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; +} + +.section-main.hero { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + overflow: hidden; + height: 80em; + margin-top: 0em; + margin-bottom: 0em; +} + +.section-main.footer { + height: 80em; + margin-bottom: 0em; +} + +.hero-png { + position: absolute; + left: auto; + top: 0%; + right: auto; + bottom: 0%; + z-index: 4; + width: auto; + height: 80em; + max-width: none; + min-width: auto; +} + +.hero-png._1 { + z-index: 15; + display: block; + height: 80em; +} + +.hero-png._1.light { + display: block; + opacity: 0; +} + +.hero-png._2 { + z-index: 14; + display: block; + height: 80em; +} + +.hero-png._2.light { + opacity: 0; +} + +.hero-png._3 { + z-index: 13; + height: 80em; +} + +.hero-png._3.light { + z-index: 13; + opacity: 0; +} + +.hero-png._4 { + z-index: 7; + height: 80em; +} + +.hero-png._4.light { + opacity: 0; +} + +.hero-png._5 { + z-index: 6; + height: 80em; +} + +.hero-png._5.light { + opacity: 0; +} + +.hero-png._5.light.m { + top: -0.5em; + opacity: 0; +} + +.hero-png.light { + display: block; +} + +.hero-png.back.light { + top: 0%; + z-index: 5; + display: block; + opacity: 0; +} + +.hero-png.nap { + z-index: 10; +} + +.hero-png.nap.light { + z-index: 6; + opacity: 0; +} + +.body { + background-color: #06141d; +} + +.hero-text { + position: absolute; + top: 23.4em; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 50em; + height: 30em; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; +} + +.nav-bar { + position: absolute; + left: auto; + top: 7.9em; + right: auto; + z-index: 100; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 100em; + height: 6em; + max-width: 1440px; + margin-right: auto; + margin-left: auto; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} + +.logo-div { + width: 8em; +} + +.link { + margin-right: 2.5em; + margin-left: 2.5em; + font-family: Gilroy, sans-serif; + color: #fff; + font-size: 1.1em; + font-weight: 500; + text-decoration: none; +} + +.link.footer { + font-weight: 600; +} + +.nav-element-div { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 60em; + height: 6em; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} + +.button { + padding: 0.9em 2.2em; + border-radius: 8em; + background-color: #f6a13a; + box-shadow: 0 17px 1.8em -0.7em rgba(246, 161, 58, 0.19); + font-family: Gilroy, sans-serif; + font-size: 1.3em; + line-height: 1em; + font-weight: 600; +} + +.button._2 { + padding-top: 1em; + padding-bottom: 1em; + background-color: #26a9e0; + box-shadow: 0 17px 1.8em -0.7em rgba(37, 169, 224, 0.3); + font-size: 1em; +} + +.lottie-animation { + width: 10em; + height: 3em; + cursor: pointer; +} + +.div-block { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 20em; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} + +.div-block-2 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} + +.lottie-animation-2 { + position: relative; + top: 14.3em; + z-index: 20; + width: 5em; + height: 5em; +} + +.what-we-do { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 82em; + height: 20em; + margin: 3em auto; +} + +.what-we-div { + width: 25em; + height: 30em; +} + +.what-we-div.right { + width: 75em; + height: 20em; +} + +.what-we-main { + height: 20em; +} + +.what-we-main.bottom { + display: none; + height: 10em; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; +} + +.how-we-help { + width: 90em; + height: auto; +} + +.how-we-help.text { + margin-top: 0em; + margin-bottom: 0em; + margin-left: 4em; + padding-top: 2em; + padding-bottom: 4.9em; + padding-left: 0em; +} + +.how-we-help.icons { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 90em; + height: auto; + margin-right: auto; + margin-left: auto; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; +} + +.icon { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 30em; + height: 40em; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + border-radius: 1.5em; + background-color: rgba(10, 32, 42, 0); +} + +.icon.inside { + position: relative; + width: 22em; + height: 33em; + margin-top: 1.9em; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + border-radius: 1em; + background-color: #0a202a; +} + +.icon-bottom { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + height: 14em; + padding-right: 2em; + padding-bottom: 1.8em; + padding-left: 2em; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; +} + +.icon-top { + position: absolute; + z-index: 10; + width: 27em; + height: 20em; +} + +.image { + position: absolute; + z-index: 5; +} + +.image._2icon_layer6 { + display: block; +} + +.image-2 { + position: absolute; + display: block; +} + +.image-2._2icon_layer5 { + z-index: 6; + display: block; +} + +.image-2._3icon_layer3 { + z-index: 6; + display: block; +} + +.image-3 { + position: absolute; + z-index: 10; + display: block; +} + +.image-3._3icon_layer2 { + display: block; +} + +.image-3._3icon_layer2.characters { + top: 1em; + display: block; +} + +.image-3.planet { + display: block; + width: 30em; +} + +.image-4 { + position: absolute; + z-index: 11; + display: block; +} + +.image-5 { + position: absolute; + z-index: 12; + display: block; +} + +.image-6 { + position: absolute; + z-index: 13; + display: block; +} + +.image-7 { + position: absolute; + z-index: 14; + display: block; +} + +.image-7._2icon_layer1 { + display: block; +} + +.image-8 { + position: absolute; + z-index: 30; + display: block; +} + +.image-9 { + position: absolute; + z-index: 20; + display: block; +} + +.image-9._2icon_layer3 { + display: block; +} + +.image-9._3icon_layer1 { + display: block; +} + +.image-9._3icon_layer1.table { + top: 1.6em; +} + +.illustration-container { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 80em; + background-color: hsla(0, 0%, 100%, 0); +} + +.columns { + width: 50em; +} + +.columns.text { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + height: 50em; + padding-right: 6.6em; + padding-left: 5em; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; +} + +.columns.text.middle { + position: relative; + z-index: 101; + padding-right: 0em; + padding-left: 8em; +} + +.columns.animation { + position: relative; + z-index: 2; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + overflow: hidden; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + border-radius: 2.8em; +} + +.columns.animation.middle { + overflow: visible; +} + +.columns.animation.bottom { + overflow: visible; +} + +.background-video { + z-index: 1; + overflow: visible; + width: 40em; + height: 50em; +} + +.image-10 { + position: absolute; + left: auto; + top: -1em; + right: -8.5em; + bottom: auto; + z-index: 3; + width: 20em; +} + +.html-embed-2 { + position: absolute; + width: 77em; + height: 77em; +} + +.html-embed-2.mobile { + display: none; +} + +.header { + position: relative; + z-index: 30; + font-family: Gilroy, sans-serif; + color: #fff; +} + +.header.hero { + position: absolute; + top: 1.4em; + z-index: 20; + height: 1em; + margin-top: 0px; + margin-bottom: 0px; + font-size: 5.5em; +} + +.header.welchome { + position: absolute; + top: 2.6em; + right: 18.4em; + font-size: 1.4em; + line-height: 1em; + font-weight: 600; +} + +.header.explore { + position: absolute; + top: 14.3em; + font-size: 1.4em; + line-height: 1em; + font-weight: 600; +} + +.header.dao-on-demand { + color: hsla(0, 0%, 100%, 0.44); + font-size: 2em; + line-height: 1.4em; + font-weight: 600; +} + +.header.what-we { + margin-top: 0px; + margin-bottom: 0px; + font-size: 2.2em; + line-height: 2em; + font-weight: 600; +} + +.header.what-we-bottom-right { + position: relative; + width: 15em; + font-size: 1.1em; + line-height: 1.6em; + font-weight: 500; +} + +.header.what-we-bottom-left { + position: relative; + font-weight: 600; +} + +.header.how-we { + margin-top: 0px; + margin-bottom: 1em; + font-size: 2.2em; + font-weight: 600; +} + +.header.how-we.sub { + width: 50em; + margin-bottom: 0em; + color: hsla(0, 0%, 100%, 0.55); + font-size: 1em; + line-height: 2em; + font-weight: 500; +} + +.header.icon-header { + height: 3.2em; + margin-top: 0px; + margin-bottom: 0px; + font-size: 1.3em; + line-height: 1.5em; + font-weight: 600; +} + +.header._3 { + margin-top: 0.5em; + margin-bottom: 1em; + font-size: 2.3em; + line-height: 1.2em; + font-weight: 600; +} + +.header._4 { + color: hsla(0, 0%, 100%, 0.49); + font-size: 1em; + line-height: 1em; + font-weight: 600; +} + +.paragraphs { + margin-bottom: 0px; + font-family: Gilroy, sans-serif; +} + +.paragraphs.icon-para { + font-family: Gilroy, sans-serif; + color: hsla(0, 0%, 100%, 0.62); + font-size: 1em; + line-height: 1.6em; + font-weight: 400; +} + +.paragraphs._1 { + width: 30em; + margin-bottom: 5em; + font-family: Gilroy, sans-serif; + color: hsla(0, 0%, 100%, 0.51); + font-size: 1em; + line-height: 2em; + font-weight: 500; +} + +.hero-div { + position: absolute; + left: auto; + top: auto; + right: auto; + bottom: 0%; + z-index: 40; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 90em; + height: 5em; + margin-bottom: 4em; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + border-radius: 8em; + background-color: #06141d; +} + +.social { + width: 5.5em; + margin-right: 0em; + margin-left: 0em; +} + +.footer-div { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + height: 5em; + margin-right: 0.8em; + margin-left: 0em; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + border-radius: 8em; +} + +.footer-div.social { + width: 10em; + margin-left: 1em; +} + +.footer-png { + position: absolute; + z-index: 20; + width: auto; + height: 80em; + max-width: none; + min-width: auto; +} + +.footer-png._4 { + z-index: 10; + display: block; +} + +.footer-png._4.sun.light { + z-index: 11; + opacity: 0; +} + +.footer-png._4.light { + opacity: 0; +} + +.footer-png._3 { + z-index: 11; +} + +.footer-png._3.light { + z-index: 13; + opacity: 0; +} + +.footer-png._3.dark { + z-index: 13; +} + +.footer-png._2 { + z-index: 12; + display: block; +} + +.footer-png._2.light { + z-index: 14; + display: block; + opacity: 0; +} + +.footer-png._2.dark { + z-index: 14; +} + +.footer-png._1.dark { + display: block; +} + +.footer-png._1.light { + opacity: 0; +} + +.lottie-animation-3 { + display: none; +} + +.mobile-menu-open { + display: none; +} + +.heading { + display: none; +} + +.bold-text { + font-weight: 600; +} + +.bold-text-2 { + font-weight: 600; +} + +.bold-text-3 { + font-weight: 600; +} + +@media screen and (max-width: 991px) { + .section-main { + height: auto; + margin-bottom: 10em; + } + + .section-main.what-we-do { + height: auto; + margin-top: 10em; + margin-bottom: 10em; + } + + .section-main.hero { + height: 102em; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + + .section-main.footer { + height: 130em; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; + } + + .hero-png { + top: 23.8em; + } + + .hero-png._5.light.m { + top: 23.4em; + opacity: 0; + } + + .hero-png.back.light { + height: 110em; + } + + .hero-png.back.dark { + top: 0em; + height: 110em; + } + + .nav-bar { + top: 4.1em; + height: 15em; + } + + .logo-div { + width: 15em; + } + + .link.footer { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 5em; + height: 2em; + margin-right: 1.6em; + margin-left: 1.6em; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + font-size: 3em; + } + + .link.footer.powered { + display: none; + } + + .nav-element-div { + display: none; + } + + .button { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + } + + .button._2 { + font-size: 3em; + } + + .button.nav { + display: none; + } + + .lottie-animation { + width: 20em; + height: 15em; + } + + .div-block-2 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + } + + .lottie-animation-2 { + top: 25.5em; + width: 10em; + height: 10em; + } + + .what-we-do { + height: 90em; + } + + .what-we-div { + display: block; + } + + .what-we-div.right { + height: 90em; + } + + .what-we-div.mobile { + display: none; + } + + .what-we-main { + height: auto; + } + + .what-we-main.bottom { + height: auto; + padding-top: 10em; + } + + .how-we-help.icons { + padding-top: 9.5em; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + + .icon { + position: relative; + width: 60em; + height: 90em; + margin-bottom: 11.9em; + } + + .icon.inside { + width: 58em; + height: 84em; + margin-top: 1.5em; + border-radius: 2.6em; + } + + .icon-bottom { + height: 38em; + padding-right: 4.8em; + padding-left: 4.8em; + } + + .icon-top { + top: -5.6em; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 70em; + height: 60em; + margin-top: -1.6em; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + + .icon-top.middle { + top: -7.4em; + } + + .icon-top.middle2 { + top: -8.1em; + } + + .image { + display: block; + } + + .image._2icon_layer6 { + top: 5.6em; + width: 100em; + } + + .image.mobile { + top: auto; + width: 100em; + } + + .image.mobile2 { + top: 3.6em; + width: 100em; + } + + .image-2 { + top: 3.2em; + width: 100em; + } + + .image-3 { + width: 100em; + } + + .image-3._3icon_layer2.characters { + top: 6em; + } + + .image-3.planet { + width: 100em; + } + + .image-4 { + width: 100em; + height: auto; + } + + .image-5 { + width: 100em; + height: auto; + } + + .image-6 { + width: 100em; + height: auto; + } + + .image-7 { + width: 100em; + height: auto; + } + + .image-8 { + width: 100em; + height: auto; + } + + .image-9 { + width: 100em; + height: auto; + } + + .image-9._3icon_layer1 { + display: block; + } + + .image-9._3icon_layer1.table { + top: 8.5em; + } + + .illustration-container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 85em; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + grid-auto-columns: 1fr; + grid-column-gap: 16px; + grid-row-gap: 16px; + -ms-grid-columns: 1fr 1fr; + grid-template-columns: 1fr 1fr; + -ms-grid-rows: auto auto; + grid-template-rows: auto auto; + border-style: solid; + border-width: 0.4em; + border-color: #0a202a; + border-radius: 6.8em; + background-color: rgba(10, 32, 42, 0); + } + + .illustration-container.middle { + -webkit-box-orient: vertical; + -webkit-box-direction: reverse; + -webkit-flex-direction: column-reverse; + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; + } + + .columns.text { + height: auto; + padding: 15em 0em 10em; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + + .columns.text.middle { + padding-left: 0em; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-align-content: stretch; + -ms-flex-line-pack: stretch; + align-content: stretch; + } + + .columns.animation { + width: 70em; + margin-bottom: 9.5em; + } + + .background-video { + width: 70em; + height: 80em; + } + + .image-10 { + display: none; + } + + .html-embed-2 { + display: none; + } + + .html-embed-2.mobile { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + + .header.hero { + top: 1.2em; + font-size: 11em; + } + + .header.welchome { + top: 3.2em; + right: 11.9em; + margin-top: 0px; + margin-bottom: 0px; + font-size: 2.6em; + } + + .header.explore { + top: 11.1em; + margin-top: 0px; + margin-bottom: 0px; + font-size: 3.5em; + } + + .header.dao-on-demand { + font-size: 4em; + } + + .header.what-we-bottom-right { + font-size: 2.7em; + } + + .header.what-we-bottom-left { + font-size: 2.7em; + line-height: 1em; + } + + .header.how-we { + font-size: 7em; + } + + .header.how-we.sub { + width: 35em; + font-size: 2.5em; + } + + .header.icon-header { + height: 4em; + font-size: 3.6em; + } + + .header._3 { + font-size: 6em; + text-align: center; + } + + .header._4 { + font-size: 2.5em; + } + + .paragraphs.icon-para { + font-size: 2.7em; + } + + .paragraphs._1 { + width: 20em; + margin-bottom: 2.9em; + font-size: 2.4em; + text-align: center; + } + + .hero-div { + height: 40em; + padding-top: 3.6em; + padding-bottom: 3.6em; + padding-left: 0em; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + + .social { + width: 15em; + } + + .footer-div { + width: auto; + height: 10em; + margin-right: 0em; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + + .footer-div.social { + width: 34em; + height: 16em; + margin-right: 0em; + margin-bottom: 3.7em; + margin-left: 0em; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + } + + .footer-png._4.light { + height: 135em; + } + + .footer-png._4.dark { + display: block; + height: 135em; + } + + .footer-png._1.dark { + display: block; + } + + .lottie-animation-3 { + position: relative; + z-index: 200; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 10em; + margin-right: 5em; + margin-left: 5em; + cursor: pointer; + } + + .div-block-3 { + position: fixed; + width: 100em; + height: 100em; + } + + .mobile-menu-open { + position: absolute; + left: auto; + top: auto; + right: auto; + bottom: auto; + z-index: 100; + display: none; + width: 100em; + height: 190em; + padding-right: 0px; + padding-bottom: 0px; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + background-color: rgba(5, 20, 29, 0.67); + opacity: 0; + } + + .image-11 { + position: relative; + left: auto; + right: auto; + width: 90em; + height: 140em; + } + + .mobile-nav-item { + position: relative; + top: auto; + z-index: 101; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 10em; + height: 3em; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + font-family: Gilroy, sans-serif; + color: #fff; + font-size: 5em; + line-height: 1em; + font-weight: 600; + text-align: center; + text-decoration: none; + } + + .nav-manu-items { + position: absolute; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 60em; + height: 90em; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + + .button-2 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + margin-top: 3.2em; + padding: 1.2em 2.2em; + border-radius: 8em; + background-color: #f6a13a; + box-shadow: 0 20px 20px -7px rgba(246, 161, 58, 0.21); + font-family: Gilroy, sans-serif; + font-size: 5em; + font-weight: 600; + } + + .heading { + position: relative; + z-index: 90; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + margin-top: 0px; + margin-bottom: 1.1em; + font-family: Gilroy, sans-serif; + color: #fff; + font-size: 7em; + font-weight: 600; + } + + .heading-2 { + font-family: Gilroy, sans-serif; + color: #fff; + font-size: 2em; + line-height: 1em; + font-weight: 500; + } +} + +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-MediumItalic.woff') format('woff'); + font-weight: 500; + font-style: italic; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-ExtraBold.woff') format('woff'), + url('../fonts/Gilroy-Bold.woff') format('woff'); + font-weight: 700; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-Regular.woff') format('woff'); + font-weight: 400; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-SemiBold.woff') format('woff'); + font-weight: 600; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-UltraLight.woff') format('woff'); + font-weight: 200; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-ExtraBoldItalic.woff') format('woff'), + url('../fonts/Gilroy-BoldItalic.woff') format('woff'); + font-weight: 700; + font-style: italic; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-RegularItalic.woff') format('woff'); + font-weight: 400; + font-style: italic; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-ThinItalic.woff') format('woff'); + font-weight: 100; + font-style: italic; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-UltraLightItalic.woff') format('woff'); + font-weight: 200; + font-style: italic; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-Black.woff') format('woff'), + url('../fonts/Gilroy-Heavy.woff') format('woff'); + font-weight: 900; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-BlackItalic.woff') format('woff'), + url('../fonts/Gilroy-HeavyItalic.woff') format('woff'); + font-weight: 900; + font-style: italic; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-SemiBoldItalic.woff') format('woff'); + font-weight: 600; + font-style: italic; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-Light.woff') format('woff'); + font-weight: 300; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-LightItalic.woff') format('woff'); + font-weight: 300; + font-style: italic; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-Medium.woff') format('woff'); + font-weight: 500; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: 'Gilroy'; + src: url('../fonts/Gilroy-Thin.woff') format('woff'); + font-weight: 100; + font-style: normal; + font-display: swap; +} diff --git a/src/assets/static-home/css/webflow.css b/src/assets/static-home/css/webflow.css new file mode 100644 index 0000000..8d78a6b --- /dev/null +++ b/src/assets/static-home/css/webflow.css @@ -0,0 +1,1827 @@ +@font-face { + font-family: 'webflow-icons'; + src: url('data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBiUAAAC8AAAAYGNtYXDpP+a4AAABHAAAAFxnYXNwAAAAEAAAAXgAAAAIZ2x5ZmhS2XEAAAGAAAADHGhlYWQTFw3HAAAEnAAAADZoaGVhCXYFgQAABNQAAAAkaG10eCe4A1oAAAT4AAAAMGxvY2EDtALGAAAFKAAAABptYXhwABAAPgAABUQAAAAgbmFtZSoCsMsAAAVkAAABznBvc3QAAwAAAAAHNAAAACAAAwP4AZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpAwPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAQAAAAAwACAACAAQAAQAg5gPpA//9//8AAAAAACDmAOkA//3//wAB/+MaBBcIAAMAAQAAAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEBIAAAAyADgAAFAAAJAQcJARcDIP5AQAGA/oBAAcABwED+gP6AQAABAOAAAALgA4AABQAAEwEXCQEH4AHAQP6AAYBAAcABwED+gP6AQAAAAwDAAOADQALAAA8AHwAvAAABISIGHQEUFjMhMjY9ATQmByEiBh0BFBYzITI2PQE0JgchIgYdARQWMyEyNj0BNCYDIP3ADRMTDQJADRMTDf3ADRMTDQJADRMTDf3ADRMTDQJADRMTAsATDSANExMNIA0TwBMNIA0TEw0gDRPAEw0gDRMTDSANEwAAAAABAJ0AtAOBApUABQAACQIHCQEDJP7r/upcAXEBcgKU/usBFVz+fAGEAAAAAAL//f+9BAMDwwAEAAkAABcBJwEXAwE3AQdpA5ps/GZsbAOabPxmbEMDmmz8ZmwDmvxmbAOabAAAAgAA/8AEAAPAAB0AOwAABSInLgEnJjU0Nz4BNzYzMTIXHgEXFhUUBw4BBwYjNTI3PgE3NjU0Jy4BJyYjMSIHDgEHBhUUFx4BFxYzAgBqXV6LKCgoKIteXWpqXV6LKCgoKIteXWpVSktvICEhIG9LSlVVSktvICEhIG9LSlVAKCiLXl1qal1eiygoKCiLXl1qal1eiygoZiEgb0tKVVVKS28gISEgb0tKVVVKS28gIQABAAABwAIAA8AAEgAAEzQ3PgE3NjMxFSIHDgEHBhUxIwAoKIteXWpVSktvICFmAcBqXV6LKChmISBvS0pVAAAAAgAA/8AFtgPAADIAOgAAARYXHgEXFhUUBw4BBwYHIxUhIicuAScmNTQ3PgE3NjMxOAExNDc+ATc2MzIXHgEXFhcVATMJATMVMzUEjD83NlAXFxYXTjU1PQL8kz01Nk8XFxcXTzY1PSIjd1BQWlJJSXInJw3+mdv+2/7c25MCUQYcHFg5OUA/ODlXHBwIAhcXTzY1PTw1Nk8XF1tQUHcjIhwcYUNDTgL+3QFt/pOTkwABAAAAAQAAmM7nP18PPPUACwQAAAAAANciZKUAAAAA1yJkpf/9/70FtgPDAAAACAACAAAAAAAAAAEAAAPA/8AAAAW3//3//QW2AAEAAAAAAAAAAAAAAAAAAAAMBAAAAAAAAAAAAAAAAgAAAAQAASAEAADgBAAAwAQAAJ0EAP/9BAAAAAQAAAAFtwAAAAAAAAAKABQAHgAyAEYAjACiAL4BFgE2AY4AAAABAAAADAA8AAMAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADQAAAAEAAAAAAAIABwCWAAEAAAAAAAMADQBIAAEAAAAAAAQADQCrAAEAAAAAAAUACwAnAAEAAAAAAAYADQBvAAEAAAAAAAoAGgDSAAMAAQQJAAEAGgANAAMAAQQJAAIADgCdAAMAAQQJAAMAGgBVAAMAAQQJAAQAGgC4AAMAAQQJAAUAFgAyAAMAAQQJAAYAGgB8AAMAAQQJAAoANADsd2ViZmxvdy1pY29ucwB3AGUAYgBmAGwAbwB3AC0AaQBjAG8AbgBzVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwd2ViZmxvdy1pY29ucwB3AGUAYgBmAGwAbwB3AC0AaQBjAG8AbgBzd2ViZmxvdy1pY29ucwB3AGUAYgBmAGwAbwB3AC0AaQBjAG8AbgBzUmVndWxhcgBSAGUAZwB1AGwAYQByd2ViZmxvdy1pY29ucwB3AGUAYgBmAGwAbwB3AC0AaQBjAG8AbgBzRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==') + format('truetype'); + font-weight: normal; + font-style: normal; +} +[class^='w-icon-'], +[class*=' w-icon-'] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'webflow-icons' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.w-icon-slider-right:before { + content: '\e600'; +} +.w-icon-slider-left:before { + content: '\e601'; +} +.w-icon-nav-menu:before { + content: '\e602'; +} +.w-icon-arrow-down:before, +.w-icon-dropdown-toggle:before { + content: '\e603'; +} +.w-icon-file-upload-remove:before { + content: '\e900'; +} +.w-icon-file-upload-icon:before { + content: '\e903'; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + height: 100%; +} +body { + margin: 0; + min-height: 100%; + background-color: #fff; + font-family: Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333; +} +img { + max-width: 100%; + vertical-align: middle; + display: inline-block; +} +html.w-mod-touch * { + background-attachment: scroll !important; +} +.w-block { + display: block; +} +.w-inline-block { + max-width: 100%; + display: inline-block; +} +.w-clearfix:before, +.w-clearfix:after { + content: ' '; + display: table; + grid-column-start: 1; + grid-row-start: 1; + grid-column-end: 2; + grid-row-end: 2; +} +.w-clearfix:after { + clear: both; +} +.w-hidden { + display: none; +} +.w-button { + display: inline-block; + padding: 9px 15px; + background-color: #3898ec; + color: white; + border: 0; + line-height: inherit; + text-decoration: none; + cursor: pointer; + border-radius: 0; +} +input.w-button { + -webkit-appearance: button; +} +html[data-w-dynpage] [data-w-cloak] { + color: transparent !important; +} +.w-webflow-badge, +.w-webflow-badge * { + position: static; + left: auto; + top: auto; + right: auto; + bottom: auto; + z-index: auto; + display: block; + visibility: visible; + overflow: visible; + overflow-x: visible; + overflow-y: visible; + box-sizing: border-box; + width: auto; + height: auto; + max-height: none; + max-width: none; + min-height: 0; + min-width: 0; + margin: 0; + padding: 0; + float: none; + clear: none; + border: 0 none transparent; + border-radius: 0; + background: none; + background-image: none; + background-position: 0% 0%; + background-size: auto auto; + background-repeat: repeat; + background-origin: padding-box; + background-clip: border-box; + background-attachment: scroll; + background-color: transparent; + box-shadow: none; + opacity: 1; + transform: none; + transition: none; + direction: ltr; + font-family: inherit; + font-weight: inherit; + color: inherit; + font-size: inherit; + line-height: inherit; + font-style: inherit; + font-variant: inherit; + text-align: inherit; + letter-spacing: inherit; + text-decoration: inherit; + text-indent: 0; + text-transform: inherit; + list-style-type: disc; + text-shadow: none; + font-smoothing: auto; + vertical-align: baseline; + cursor: inherit; + white-space: inherit; + word-break: normal; + word-spacing: normal; + word-wrap: normal; +} +.w-webflow-badge { + position: fixed !important; + display: inline-block !important; + visibility: visible !important; + opacity: 1 !important; + z-index: 2147483647 !important; + top: auto !important; + right: 12px !important; + bottom: 12px !important; + left: auto !important; + color: #aaadb0 !important; + background-color: #fff !important; + border-radius: 3px !important; + padding: 6px 8px 6px 6px !important; + font-size: 12px !important; + opacity: 1 !important; + line-height: 14px !important; + text-decoration: none !important; + transform: none !important; + margin: 0 !important; + width: auto !important; + height: auto !important; + overflow: visible !important; + white-space: nowrap; + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), 0px 1px 3px rgba(0, 0, 0, 0.1); + cursor: pointer; +} +.w-webflow-badge > img { + display: inline-block !important; + visibility: visible !important; + opacity: 1 !important; + vertical-align: middle !important; +} +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: bold; + margin-bottom: 10px; +} +h1 { + font-size: 38px; + line-height: 44px; + margin-top: 20px; +} +h2 { + font-size: 32px; + line-height: 36px; + margin-top: 20px; +} +h3 { + font-size: 24px; + line-height: 30px; + margin-top: 20px; +} +h4 { + font-size: 18px; + line-height: 24px; + margin-top: 10px; +} +h5 { + font-size: 14px; + line-height: 20px; + margin-top: 10px; +} +h6 { + font-size: 12px; + line-height: 18px; + margin-top: 10px; +} +p { + margin-top: 0; + margin-bottom: 10px; +} +blockquote { + margin: 0 0 10px 0; + padding: 10px 20px; + border-left: 5px solid #e2e2e2; + font-size: 18px; + line-height: 22px; +} +figure { + margin: 0; + margin-bottom: 10px; +} +figcaption { + margin-top: 5px; + text-align: center; +} +ul, +ol { + margin-top: 0px; + margin-bottom: 10px; + padding-left: 40px; +} +.w-list-unstyled { + padding-left: 0; + list-style: none; +} +.w-embed:before, +.w-embed:after { + content: ' '; + display: table; + grid-column-start: 1; + grid-row-start: 1; + grid-column-end: 2; + grid-row-end: 2; +} +.w-embed:after { + clear: both; +} +.w-video { + width: 100%; + position: relative; + padding: 0; +} +.w-video iframe, +.w-video object, +.w-video embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border: none; +} +fieldset { + padding: 0; + margin: 0; + border: 0; +} +button, +html input[type='button'], +input[type='reset'] { + border: 0; + cursor: pointer; + -webkit-appearance: button; +} +.w-form { + margin: 0 0 15px; +} +.w-form-done { + display: none; + padding: 20px; + text-align: center; + background-color: #dddddd; +} +.w-form-fail { + display: none; + margin-top: 10px; + padding: 10px; + background-color: #ffdede; +} +label { + display: block; + margin-bottom: 5px; + font-weight: bold; +} +.w-input, +.w-select { + display: block; + width: 100%; + height: 38px; + padding: 8px 12px; + margin-bottom: 10px; + font-size: 14px; + line-height: 1.428571429; + color: #333333; + vertical-align: middle; + background-color: #ffffff; + border: 1px solid #cccccc; +} +.w-input:-moz-placeholder, +.w-select:-moz-placeholder { + color: #999; +} +.w-input::-moz-placeholder, +.w-select::-moz-placeholder { + color: #999; + opacity: 1; +} +.w-input:-ms-input-placeholder, +.w-select:-ms-input-placeholder { + color: #999; +} +.w-input::-webkit-input-placeholder, +.w-select::-webkit-input-placeholder { + color: #999; +} +.w-input:focus, +.w-select:focus { + border-color: #3898ec; + outline: 0; +} +.w-input[disabled], +.w-select[disabled], +.w-input[readonly], +.w-select[readonly], +fieldset[disabled] .w-input, +fieldset[disabled] .w-select { + cursor: not-allowed; + background-color: #eeeeee; +} +textarea.w-input, +textarea.w-select { + height: auto; +} +.w-select { + background-color: #f3f3f3; +} +.w-select[multiple] { + height: auto; +} +.w-form-label { + display: inline-block; + cursor: pointer; + font-weight: normal; + margin-bottom: 0px; +} +.w-radio { + display: block; + margin-bottom: 5px; + padding-left: 20px; +} +.w-radio:before, +.w-radio:after { + content: ' '; + display: table; + grid-column-start: 1; + grid-row-start: 1; + grid-column-end: 2; + grid-row-end: 2; +} +.w-radio:after { + clear: both; +} +.w-radio-input { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; + float: left; + margin-left: -20px; +} +.w-radio-input { + margin-top: 3px; +} +.w-file-upload { + display: block; + margin-bottom: 10px; +} +.w-file-upload-input { + width: 0.1px; + height: 0.1px; + opacity: 0; + overflow: hidden; + position: absolute; + z-index: -100; +} +.w-file-upload-default, +.w-file-upload-uploading, +.w-file-upload-success { + display: inline-block; + color: #333333; +} +.w-file-upload-error { + display: block; + margin-top: 10px; +} +.w-file-upload-default.w-hidden, +.w-file-upload-uploading.w-hidden, +.w-file-upload-error.w-hidden, +.w-file-upload-success.w-hidden { + display: none; +} +.w-file-upload-uploading-btn { + display: flex; + font-size: 14px; + font-weight: normal; + cursor: pointer; + margin: 0; + padding: 8px 12px; + border: 1px solid #cccccc; + background-color: #fafafa; +} +.w-file-upload-file { + display: flex; + flex-grow: 1; + justify-content: space-between; + margin: 0; + padding: 8px 9px 8px 11px; + border: 1px solid #cccccc; + background-color: #fafafa; +} +.w-file-upload-file-name { + font-size: 14px; + font-weight: normal; + display: block; +} +.w-file-remove-link { + margin-top: 3px; + margin-left: 10px; + width: auto; + height: auto; + padding: 3px; + display: block; + cursor: pointer; +} +.w-icon-file-upload-remove { + margin: auto; + font-size: 10px; +} +.w-file-upload-error-msg { + display: inline-block; + color: #ea384c; + padding: 2px 0; +} +.w-file-upload-info { + display: inline-block; + line-height: 38px; + padding: 0 12px; +} +.w-file-upload-label { + display: inline-block; + font-size: 14px; + font-weight: normal; + cursor: pointer; + margin: 0; + padding: 8px 12px; + border: 1px solid #cccccc; + background-color: #fafafa; +} +.w-icon-file-upload-icon, +.w-icon-file-upload-uploading { + display: inline-block; + margin-right: 8px; + width: 20px; +} +.w-icon-file-upload-uploading { + height: 20px; +} +.w-container { + margin-left: auto; + margin-right: auto; + max-width: 940px; +} +.w-container:before, +.w-container:after { + content: ' '; + display: table; + grid-column-start: 1; + grid-row-start: 1; + grid-column-end: 2; + grid-row-end: 2; +} +.w-container:after { + clear: both; +} +.w-container .w-row { + margin-left: -10px; + margin-right: -10px; +} +.w-row:before, +.w-row:after { + content: ' '; + display: table; + grid-column-start: 1; + grid-row-start: 1; + grid-column-end: 2; + grid-row-end: 2; +} +.w-row:after { + clear: both; +} +.w-row .w-row { + margin-left: 0; + margin-right: 0; +} +.w-col { + position: relative; + float: left; + width: 100%; + min-height: 1px; + padding-left: 10px; + padding-right: 10px; +} +.w-col .w-col { + padding-left: 0; + padding-right: 0; +} +.w-col-1 { + width: 8.33333333%; +} +.w-col-2 { + width: 16.66666667%; +} +.w-col-3 { + width: 25%; +} +.w-col-4 { + width: 33.33333333%; +} +.w-col-5 { + width: 41.66666667%; +} +.w-col-6 { + width: 50%; +} +.w-col-7 { + width: 58.33333333%; +} +.w-col-8 { + width: 66.66666667%; +} +.w-col-9 { + width: 75%; +} +.w-col-10 { + width: 83.33333333%; +} +.w-col-11 { + width: 91.66666667%; +} +.w-col-12 { + width: 100%; +} +.w-hidden-main { + display: none !important; +} +@media screen and (max-width: 991px) { + .w-container { + max-width: 728px; + } + .w-hidden-main { + display: inherit !important; + } + .w-hidden-medium { + display: none !important; + } + .w-col-medium-1 { + width: 8.33333333%; + } + .w-col-medium-2 { + width: 16.66666667%; + } + .w-col-medium-3 { + width: 25%; + } + .w-col-medium-4 { + width: 33.33333333%; + } + .w-col-medium-5 { + width: 41.66666667%; + } + .w-col-medium-6 { + width: 50%; + } + .w-col-medium-7 { + width: 58.33333333%; + } + .w-col-medium-8 { + width: 66.66666667%; + } + .w-col-medium-9 { + width: 75%; + } + .w-col-medium-10 { + width: 83.33333333%; + } + .w-col-medium-11 { + width: 91.66666667%; + } + .w-col-medium-12 { + width: 100%; + } + .w-col-stack { + width: 100%; + left: auto; + right: auto; + } +} +@media screen and (max-width: 767px) { + .w-hidden-main { + display: inherit !important; + } + .w-hidden-medium { + display: inherit !important; + } + .w-hidden-small { + display: none !important; + } + .w-row, + .w-container .w-row { + margin-left: 0; + margin-right: 0; + } + .w-col { + width: 100%; + left: auto; + right: auto; + } + .w-col-small-1 { + width: 8.33333333%; + } + .w-col-small-2 { + width: 16.66666667%; + } + .w-col-small-3 { + width: 25%; + } + .w-col-small-4 { + width: 33.33333333%; + } + .w-col-small-5 { + width: 41.66666667%; + } + .w-col-small-6 { + width: 50%; + } + .w-col-small-7 { + width: 58.33333333%; + } + .w-col-small-8 { + width: 66.66666667%; + } + .w-col-small-9 { + width: 75%; + } + .w-col-small-10 { + width: 83.33333333%; + } + .w-col-small-11 { + width: 91.66666667%; + } + .w-col-small-12 { + width: 100%; + } +} +@media screen and (max-width: 479px) { + .w-container { + max-width: none; + } + .w-hidden-main { + display: inherit !important; + } + .w-hidden-medium { + display: inherit !important; + } + .w-hidden-small { + display: inherit !important; + } + .w-hidden-tiny { + display: none !important; + } + .w-col { + width: 100%; + } + .w-col-tiny-1 { + width: 8.33333333%; + } + .w-col-tiny-2 { + width: 16.66666667%; + } + .w-col-tiny-3 { + width: 25%; + } + .w-col-tiny-4 { + width: 33.33333333%; + } + .w-col-tiny-5 { + width: 41.66666667%; + } + .w-col-tiny-6 { + width: 50%; + } + .w-col-tiny-7 { + width: 58.33333333%; + } + .w-col-tiny-8 { + width: 66.66666667%; + } + .w-col-tiny-9 { + width: 75%; + } + .w-col-tiny-10 { + width: 83.33333333%; + } + .w-col-tiny-11 { + width: 91.66666667%; + } + .w-col-tiny-12 { + width: 100%; + } +} +.w-widget { + position: relative; +} +.w-widget-map { + width: 100%; + height: 400px; +} +.w-widget-map label { + width: auto; + display: inline; +} +.w-widget-map img { + max-width: inherit; +} +.w-widget-map .gm-style-iw { + text-align: center; +} +.w-widget-map .gm-style-iw > button { + display: none !important; +} +.w-widget-twitter { + overflow: hidden; +} +.w-widget-twitter-count-shim { + display: inline-block; + vertical-align: top; + position: relative; + width: 28px; + height: 20px; + text-align: center; + background: white; + border: #758696 solid 1px; + border-radius: 3px; +} +.w-widget-twitter-count-shim * { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.w-widget-twitter-count-shim .w-widget-twitter-count-inner { + position: relative; + font-size: 15px; + line-height: 12px; + text-align: center; + color: #999; + font-family: serif; +} +.w-widget-twitter-count-shim .w-widget-twitter-count-clear { + position: relative; + display: block; +} +.w-widget-twitter-count-shim.w--large { + width: 36px; + height: 28px; +} +.w-widget-twitter-count-shim.w--large .w-widget-twitter-count-inner { + font-size: 18px; + line-height: 18px; +} +.w-widget-twitter-count-shim:not(.w--vertical) { + margin-left: 5px; + margin-right: 8px; +} +.w-widget-twitter-count-shim:not(.w--vertical).w--large { + margin-left: 6px; +} +.w-widget-twitter-count-shim:not(.w--vertical):before, +.w-widget-twitter-count-shim:not(.w--vertical):after { + top: 50%; + left: 0; + border: solid transparent; + content: ' '; + height: 0; + width: 0; + position: absolute; + pointer-events: none; +} +.w-widget-twitter-count-shim:not(.w--vertical):before { + border-color: rgba(117, 134, 150, 0); + border-right-color: #5d6c7b; + border-width: 4px; + margin-left: -9px; + margin-top: -4px; +} +.w-widget-twitter-count-shim:not(.w--vertical).w--large:before { + border-width: 5px; + margin-left: -10px; + margin-top: -5px; +} +.w-widget-twitter-count-shim:not(.w--vertical):after { + border-color: rgba(255, 255, 255, 0); + border-right-color: white; + border-width: 4px; + margin-left: -8px; + margin-top: -4px; +} +.w-widget-twitter-count-shim:not(.w--vertical).w--large:after { + border-width: 5px; + margin-left: -9px; + margin-top: -5px; +} +.w-widget-twitter-count-shim.w--vertical { + width: 61px; + height: 33px; + margin-bottom: 8px; +} +.w-widget-twitter-count-shim.w--vertical:before, +.w-widget-twitter-count-shim.w--vertical:after { + top: 100%; + left: 50%; + border: solid transparent; + content: ' '; + height: 0; + width: 0; + position: absolute; + pointer-events: none; +} +.w-widget-twitter-count-shim.w--vertical:before { + border-color: rgba(117, 134, 150, 0); + border-top-color: #5d6c7b; + border-width: 5px; + margin-left: -5px; +} +.w-widget-twitter-count-shim.w--vertical:after { + border-color: rgba(255, 255, 255, 0); + border-top-color: white; + border-width: 4px; + margin-left: -4px; +} +.w-widget-twitter-count-shim.w--vertical .w-widget-twitter-count-inner { + font-size: 18px; + line-height: 22px; +} +.w-widget-twitter-count-shim.w--vertical.w--large { + width: 76px; +} +.w-background-video { + position: relative; + overflow: hidden; + height: 500px; + color: white; +} +.w-background-video > video { + background-size: cover; + background-position: 50% 50%; + position: absolute; + margin: auto; + width: 100%; + height: 100%; + right: -100%; + bottom: -100%; + top: -100%; + left: -100%; + object-fit: cover; + z-index: -100; +} +.w-background-video > video::-webkit-media-controls-start-playback-button { + display: none !important; + -webkit-appearance: none; +} +.w-background-video--control { + position: absolute; + bottom: 1em; + right: 1em; + background-color: transparent; + padding: 0; +} +.w-background-video--control > [hidden] { + display: none !important; +} +.w-slider { + position: relative; + height: 300px; + text-align: center; + background: #dddddd; + clear: both; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + tap-highlight-color: rgba(0, 0, 0, 0); +} +.w-slider-mask { + position: relative; + display: block; + overflow: hidden; + z-index: 1; + left: 0; + right: 0; + height: 100%; + white-space: nowrap; +} +.w-slide { + position: relative; + display: inline-block; + vertical-align: top; + width: 100%; + height: 100%; + white-space: normal; + text-align: left; +} +.w-slider-nav { + position: absolute; + z-index: 2; + top: auto; + right: 0; + bottom: 0; + left: 0; + margin: auto; + padding-top: 10px; + height: 40px; + text-align: center; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + tap-highlight-color: rgba(0, 0, 0, 0); +} +.w-slider-nav.w-round > div { + border-radius: 100%; +} +.w-slider-nav.w-num > div { + width: auto; + height: auto; + padding: 0.2em 0.5em; + font-size: inherit; + line-height: inherit; +} +.w-slider-nav.w-shadow > div { + box-shadow: 0 0 3px rgba(51, 51, 51, 0.4); +} +.w-slider-nav-invert { + color: #fff; +} +.w-slider-nav-invert > div { + background-color: rgba(34, 34, 34, 0.4); +} +.w-slider-nav-invert > div.w-active { + background-color: #222; +} +.w-slider-dot { + position: relative; + display: inline-block; + width: 1em; + height: 1em; + background-color: rgba(255, 255, 255, 0.4); + cursor: pointer; + margin: 0 3px 0.5em; + transition: background-color 100ms, color 100ms; +} +.w-slider-dot.w-active { + background-color: #fff; +} +.w-slider-dot:focus { + outline: none; + box-shadow: 0px 0px 0px 2px #fff; +} +.w-slider-dot:focus.w-active { + box-shadow: none; +} +.w-slider-arrow-left, +.w-slider-arrow-right { + position: absolute; + width: 80px; + top: 0; + right: 0; + bottom: 0; + left: 0; + margin: auto; + cursor: pointer; + overflow: hidden; + color: white; + font-size: 40px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + tap-highlight-color: rgba(0, 0, 0, 0); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.w-slider-arrow-left [class^='w-icon-'], +.w-slider-arrow-right [class^='w-icon-'], +.w-slider-arrow-left [class*=' w-icon-'], +.w-slider-arrow-right [class*=' w-icon-'] { + position: absolute; +} +.w-slider-arrow-left:focus, +.w-slider-arrow-right:focus { + outline: 0; +} +.w-slider-arrow-left { + z-index: 3; + right: auto; +} +.w-slider-arrow-right { + z-index: 4; + left: auto; +} +.w-icon-slider-left, +.w-icon-slider-right { + top: 0; + right: 0; + bottom: 0; + left: 0; + margin: auto; + width: 1em; + height: 1em; +} +.w-slider-aria-label { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.w-slider-force-show { + display: block !important; +} +.w-dropdown { + display: inline-block; + position: relative; + text-align: left; + margin-left: auto; + margin-right: auto; + z-index: 900; +} +.w-dropdown-btn, +.w-dropdown-toggle, +.w-dropdown-link { + position: relative; + vertical-align: top; + text-decoration: none; + color: #222222; + padding: 20px; + text-align: left; + margin-left: auto; + margin-right: auto; + white-space: nowrap; +} +.w-dropdown-toggle { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + display: inline-block; + cursor: pointer; + padding-right: 40px; +} +.w-dropdown-toggle:focus { + outline: 0; +} +.w-icon-dropdown-toggle { + position: absolute; + top: 0; + right: 0; + bottom: 0; + margin: auto; + margin-right: 20px; + width: 1em; + height: 1em; +} +.w-dropdown-list { + position: absolute; + background: #dddddd; + display: none; + min-width: 100%; +} +.w-dropdown-list.w--open { + display: block; +} +.w-dropdown-link { + padding: 10px 20px; + display: block; + color: #222222; +} +.w-dropdown-link.w--current { + color: #0082f3; +} +.w-dropdown-link:focus { + outline: 0; +} +@media screen and (max-width: 767px) { + .w-nav-brand { + padding-left: 10px; + } +} +/** + * ## Note + * Safari (on both iOS and OS X) does not handle viewport units (vh, vw) well. + * For example percentage units do not work on descendants of elements that + * have any dimensions expressed in viewport units. It also doesn’t handle them at + * all in `calc()`. + */ +/** + * Wrapper around all lightbox elements + * + * 1. Since the lightbox can receive focus, IE also gives it an outline. + * 2. Fixes flickering on Chrome when a transition is in progress + * underneath the lightbox. + */ +.w-lightbox-backdrop { + color: #000; + cursor: auto; + font-family: serif; + font-size: medium; + font-style: normal; + font-variant: normal; + font-weight: normal; + letter-spacing: normal; + line-height: normal; + list-style: disc; + text-align: start; + text-indent: 0; + text-shadow: none; + text-transform: none; + visibility: visible; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + color: #fff; + font-family: 'Helvetica Neue', Helvetica, Ubuntu, 'Segoe UI', Verdana, sans-serif; + font-size: 17px; + line-height: 1.2; + font-weight: 300; + text-align: center; + background: rgba(0, 0, 0, 0.9); + z-index: 2000; + outline: 0; + /* 1 */ + opacity: 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -webkit-tap-highlight-color: transparent; + -webkit-transform: translate(0, 0); + /* 2 */ +} +/** + * Neat trick to bind the rubberband effect to our canvas instead of the whole + * document on iOS. It also prevents a bug that causes the document underneath to scroll. + */ +.w-lightbox-backdrop, +.w-lightbox-container { + height: 100%; + overflow: auto; + -webkit-overflow-scrolling: touch; +} +.w-lightbox-content { + position: relative; + height: 100vh; + overflow: hidden; +} +.w-lightbox-view { + position: absolute; + width: 100vw; + height: 100vh; + opacity: 0; +} +.w-lightbox-view:before { + content: ''; + height: 100vh; +} +/* .w-lightbox-content */ +.w-lightbox-group, +.w-lightbox-group .w-lightbox-view, +.w-lightbox-group .w-lightbox-view:before { + height: 86vh; +} +.w-lightbox-frame, +.w-lightbox-view:before { + display: inline-block; + vertical-align: middle; +} +/* + * 1. Remove default margin set by user-agent on the
    element. + */ +.w-lightbox-figure { + position: relative; + margin: 0; + /* 1 */ +} +.w-lightbox-group .w-lightbox-figure { + cursor: pointer; +} +/** + * IE adds image dimensions as width and height attributes on the IMG tag, + * but we need both width and height to be set to auto to enable scaling. + */ +.w-lightbox-img { + width: auto; + height: auto; + max-width: none; +} +/** + * 1. Reset if style is set by user on "All Images" + */ +.w-lightbox-image { + display: block; + float: none; + /* 1 */ + max-width: 100vw; + max-height: 100vh; +} +.w-lightbox-group .w-lightbox-image { + max-height: 86vh; +} +.w-lightbox-caption { + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 0.5em 1em; + background: rgba(0, 0, 0, 0.4); + text-align: left; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} +.w-lightbox-embed { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; +} +.w-lightbox-control { + position: absolute; + top: 0; + width: 4em; + background-size: 24px; + background-repeat: no-repeat; + background-position: center; + cursor: pointer; + -webkit-transition: all 0.3s; + transition: all 0.3s; +} +.w-lightbox-left { + display: none; + bottom: 0; + left: 0; + /* */ + background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0yMCAwIDI0IDQwIiB3aWR0aD0iMjQiIGhlaWdodD0iNDAiPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1KSI+PHBhdGggZD0ibTAgMGg1djIzaDIzdjVoLTI4eiIgb3BhY2l0eT0iLjQiLz48cGF0aCBkPSJtMSAxaDN2MjNoMjN2M2gtMjZ6IiBmaWxsPSIjZmZmIi8+PC9nPjwvc3ZnPg=='); +} +.w-lightbox-right { + display: none; + right: 0; + bottom: 0; + /* */ + background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IDAgMjQgNDAiIHdpZHRoPSIyNCIgaGVpZ2h0PSI0MCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cGF0aCBkPSJtMC0waDI4djI4aC01di0yM2gtMjN6IiBvcGFjaXR5PSIuNCIvPjxwYXRoIGQ9Im0xIDFoMjZ2MjZoLTN2LTIzaC0yM3oiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+'); +} +/* + * Without specifying the with and height inside the SVG, all versions of IE render the icon too small. + * The bug does not seem to manifest itself if the elements are tall enough such as the above arrows. + * (http://stackoverflow.com/questions/16092114/background-size-differs-in-internet-explorer) + */ +.w-lightbox-close { + right: 0; + height: 2.6em; + /* */ + background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IDAgMTggMTciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNyI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUpIj48cGF0aCBkPSJtMCAwaDd2LTdoNXY3aDd2NWgtN3Y3aC01di03aC03eiIgb3BhY2l0eT0iLjQiLz48cGF0aCBkPSJtMSAxaDd2LTdoM3Y3aDd2M2gtN3Y3aC0zdi03aC03eiIgZmlsbD0iI2ZmZiIvPjwvZz48L3N2Zz4='); + background-size: 18px; +} +/** + * 1. All IE versions add extra space at the bottom without this. + */ +.w-lightbox-strip { + position: absolute; + bottom: 0; + left: 0; + right: 0; + padding: 0 1vh; + line-height: 0; + /* 1 */ + white-space: nowrap; + overflow-x: auto; + overflow-y: hidden; +} +/* + * 1. We use content-box to avoid having to do `width: calc(10vh + 2vw)` + * which doesn’t work in Safari anyway. + * 2. Chrome renders images pixelated when switching to GPU. Making sure + * the parent is also rendered on the GPU (by setting translate3d for + * example) fixes this behavior. + */ +.w-lightbox-item { + display: inline-block; + width: 10vh; + padding: 2vh 1vh; + box-sizing: content-box; + /* 1 */ + cursor: pointer; + -webkit-transform: translate3d(0, 0, 0); + /* 2 */ +} +.w-lightbox-active { + opacity: 0.3; +} +.w-lightbox-thumbnail { + position: relative; + height: 10vh; + background: #222; + overflow: hidden; +} +.w-lightbox-thumbnail-image { + position: absolute; + top: 0; + left: 0; +} +.w-lightbox-thumbnail .w-lightbox-tall { + top: 50%; + width: 100%; + -webkit-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +.w-lightbox-thumbnail .w-lightbox-wide { + left: 50%; + height: 100%; + -webkit-transform: translate(-50%, 0); + -ms-transform: translate(-50%, 0); + transform: translate(-50%, 0); +} +/* + * Spinner + * + * Absolute pixel values are used to avoid rounding errors that would cause + * the white spinning element to be misaligned with the track. + */ +.w-lightbox-spinner { + position: absolute; + top: 50%; + left: 50%; + box-sizing: border-box; + width: 40px; + height: 40px; + margin-top: -20px; + margin-left: -20px; + border: 5px solid rgba(0, 0, 0, 0.4); + border-radius: 50%; + -webkit-animation: spin 0.8s infinite linear; + animation: spin 0.8s infinite linear; +} +.w-lightbox-spinner:after { + content: ''; + position: absolute; + top: -4px; + right: -4px; + bottom: -4px; + left: -4px; + border: 3px solid transparent; + border-bottom-color: #fff; + border-radius: 50%; +} +/* + * Utility classes + */ +.w-lightbox-hide { + display: none; +} +.w-lightbox-noscroll { + overflow: hidden; +} +@media (min-width: 768px) { + .w-lightbox-content { + height: 96vh; + margin-top: 2vh; + } + .w-lightbox-view, + .w-lightbox-view:before { + height: 96vh; + } + /* .w-lightbox-content */ + .w-lightbox-group, + .w-lightbox-group .w-lightbox-view, + .w-lightbox-group .w-lightbox-view:before { + height: 84vh; + } + .w-lightbox-image { + max-width: 96vw; + max-height: 96vh; + } + .w-lightbox-group .w-lightbox-image { + max-width: 82.3vw; + max-height: 84vh; + } + .w-lightbox-left, + .w-lightbox-right { + display: block; + opacity: 0.5; + } + .w-lightbox-close { + opacity: 0.8; + } + .w-lightbox-control:hover { + opacity: 1; + } +} +.w-lightbox-inactive, +.w-lightbox-inactive:hover { + opacity: 0; +} +.w-richtext:before, +.w-richtext:after { + content: ' '; + display: table; + grid-column-start: 1; + grid-row-start: 1; + grid-column-end: 2; + grid-row-end: 2; +} +.w-richtext:after { + clear: both; +} +.w-richtext[contenteditable='true']:before, +.w-richtext[contenteditable='true']:after { + white-space: initial; +} +.w-richtext ol, +.w-richtext ul { + overflow: hidden; +} +.w-richtext .w-richtext-figure-selected.w-richtext-figure-type-video div:after, +.w-richtext .w-richtext-figure-selected[data-rt-type='video'] div:after { + outline: 2px solid #2895f7; +} +.w-richtext .w-richtext-figure-selected.w-richtext-figure-type-image div, +.w-richtext .w-richtext-figure-selected[data-rt-type='image'] div { + outline: 2px solid #2895f7; +} +.w-richtext figure.w-richtext-figure-type-video > div:after, +.w-richtext figure[data-rt-type='video'] > div:after { + content: ''; + position: absolute; + display: none; + left: 0; + top: 0; + right: 0; + bottom: 0; +} +.w-richtext figure { + position: relative; + max-width: 60%; +} +.w-richtext figure > div:before { + cursor: default !important; +} +.w-richtext figure img { + width: 100%; +} +.w-richtext figure figcaption.w-richtext-figcaption-placeholder { + opacity: 0.6; +} +.w-richtext figure div { + /* fix incorrectly sized selection border in the data manager */ + font-size: 0px; + color: transparent; +} +.w-richtext figure.w-richtext-figure-type-image, +.w-richtext figure[data-rt-type='image'] { + display: table; +} +.w-richtext figure.w-richtext-figure-type-image > div, +.w-richtext figure[data-rt-type='image'] > div { + display: inline-block; +} +.w-richtext figure.w-richtext-figure-type-image > figcaption, +.w-richtext figure[data-rt-type='image'] > figcaption { + display: table-caption; + caption-side: bottom; +} +.w-richtext figure.w-richtext-figure-type-video, +.w-richtext figure[data-rt-type='video'] { + width: 60%; + height: 0; +} +.w-richtext figure.w-richtext-figure-type-video iframe, +.w-richtext figure[data-rt-type='video'] iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.w-richtext figure.w-richtext-figure-type-video > div, +.w-richtext figure[data-rt-type='video'] > div { + width: 100%; +} +.w-richtext figure.w-richtext-align-center { + margin-right: auto; + margin-left: auto; + clear: both; +} +.w-richtext figure.w-richtext-align-center.w-richtext-figure-type-image > div, +.w-richtext figure.w-richtext-align-center[data-rt-type='image'] > div { + max-width: 100%; +} +.w-richtext figure.w-richtext-align-normal { + clear: both; +} +.w-richtext figure.w-richtext-align-fullwidth { + width: 100%; + max-width: 100%; + text-align: center; + clear: both; + display: block; + margin-right: auto; + margin-left: auto; +} +.w-richtext figure.w-richtext-align-fullwidth > div { + display: inline-block; + /* padding-bottom is used for aspect ratios in video figures + we want the div to inherit that so hover/selection borders in the designer-canvas + fit right*/ + padding-bottom: inherit; +} +.w-richtext figure.w-richtext-align-fullwidth > figcaption { + display: block; +} +.w-richtext figure.w-richtext-align-floatleft { + float: left; + margin-right: 15px; + clear: none; +} +.w-richtext figure.w-richtext-align-floatright { + float: right; + margin-left: 15px; + clear: none; +} +.w-nav { + position: relative; + background: #dddddd; + z-index: 1000; +} +.w-nav:before, +.w-nav:after { + content: ' '; + display: table; + grid-column-start: 1; + grid-row-start: 1; + grid-column-end: 2; + grid-row-end: 2; +} +.w-nav:after { + clear: both; +} +.w-nav-brand { + position: relative; + float: left; + text-decoration: none; + color: #333333; +} +.w-nav-link { + position: relative; + display: inline-block; + vertical-align: top; + text-decoration: none; + color: #222222; + padding: 20px; + text-align: left; + margin-left: auto; + margin-right: auto; +} +.w-nav-link.w--current { + color: #0082f3; +} +.w-nav-menu { + position: relative; + float: right; +} +[data-nav-menu-open] { + display: block !important; + position: absolute; + top: 100%; + left: 0; + right: 0; + background: #c8c8c8; + text-align: center; + overflow: visible; + min-width: 200px; +} +.w--nav-link-open { + display: block; + position: relative; +} +.w-nav-overlay { + position: absolute; + overflow: hidden; + display: none; + top: 100%; + left: 0; + right: 0; + width: 100%; +} +.w-nav-overlay [data-nav-menu-open] { + top: 0; +} +.w-nav[data-animation='over-left'] .w-nav-overlay { + width: auto; +} +.w-nav[data-animation='over-left'] .w-nav-overlay, +.w-nav[data-animation='over-left'] [data-nav-menu-open] { + right: auto; + z-index: 1; + top: 0; +} +.w-nav[data-animation='over-right'] .w-nav-overlay { + width: auto; +} +.w-nav[data-animation='over-right'] .w-nav-overlay, +.w-nav[data-animation='over-right'] [data-nav-menu-open] { + left: auto; + z-index: 1; + top: 0; +} +.w-nav-button { + position: relative; + float: right; + padding: 18px; + font-size: 24px; + display: none; + cursor: pointer; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + tap-highlight-color: rgba(0, 0, 0, 0); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.w-nav-button:focus { + outline: 0; +} +.w-nav-button.w--open { + background-color: #c8c8c8; + color: white; +} +.w-nav[data-collapse='all'] .w-nav-menu { + display: none; +} +.w-nav[data-collapse='all'] .w-nav-button { + display: block; +} +.w--nav-dropdown-open { + display: block; +} +.w--nav-dropdown-toggle-open { + display: block; +} +.w--nav-dropdown-list-open { + position: static; +} +@media screen and (max-width: 991px) { + .w-nav[data-collapse='medium'] .w-nav-menu { + display: none; + } + .w-nav[data-collapse='medium'] .w-nav-button { + display: block; + } +} +@media screen and (max-width: 767px) { + .w-nav[data-collapse='small'] .w-nav-menu { + display: none; + } + .w-nav[data-collapse='small'] .w-nav-button { + display: block; + } + .w-nav-brand { + padding-left: 10px; + } +} +@media screen and (max-width: 479px) { + .w-nav[data-collapse='tiny'] .w-nav-menu { + display: none; + } + .w-nav[data-collapse='tiny'] .w-nav-button { + display: block; + } +} +.w-tabs { + position: relative; +} +.w-tabs:before, +.w-tabs:after { + content: ' '; + display: table; + grid-column-start: 1; + grid-row-start: 1; + grid-column-end: 2; + grid-row-end: 2; +} +.w-tabs:after { + clear: both; +} +.w-tab-menu { + position: relative; +} +.w-tab-link { + position: relative; + display: inline-block; + vertical-align: top; + text-decoration: none; + padding: 9px 30px; + text-align: left; + cursor: pointer; + color: #222222; + background-color: #dddddd; +} +.w-tab-link.w--current { + background-color: #c8c8c8; +} +.w-tab-link:focus { + outline: 0; +} +.w-tab-content { + position: relative; + display: block; + overflow: hidden; +} +.w-tab-pane { + position: relative; + display: none; +} +.w--tab-active { + display: block; +} +@media screen and (max-width: 479px) { + .w-tab-link { + display: block; + } +} +.w-ix-emptyfix:after { + content: ''; +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.w-dyn-empty { + padding: 10px; + background-color: #dddddd; +} +.w-dyn-hide { + display: none !important; +} +.w-dyn-bind-empty { + display: none !important; +} +.w-condition-invisible { + display: none !important; +} +.wf-layout-layout { + display: grid !important; +} +.wf-layout-cell { + display: flex !important; +} diff --git a/src/assets/static-home/documents/explore.json b/src/assets/static-home/documents/explore.json new file mode 100644 index 0000000..066e166 --- /dev/null +++ b/src/assets/static-home/documents/explore.json @@ -0,0 +1,296 @@ +{ + "v": "5.7.7", + "fr": 24, + "ip": 0, + "op": 84, + "w": 300, + "h": 300, + "nm": "Comp 1", + "ddd": 0, + "assets": [], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "Shape Layer 2", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 11, + "s": [20] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 21.863, + "s": [100] + }, + { "t": 32.7255859375, "s": [20] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 50.75, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [1.5, -21.25, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [30.5, 30.5], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 0, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.956862804936, 0.627450980392, 0.196078446332, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [1.5, -21], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 2", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 500, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 28.548, + "s": [20] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 40.246, + "s": [100] + }, + { "t": 51.9453125, "s": [20] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 151.25, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [1.5, -21.25, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [30.5, 30.5], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 0, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.956862804936, 0.627450980392, 0.196078446332, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [1.5, -21], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 2", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 500, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "Shape Layer 3", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 46.932, + "s": [20] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 60.302, + "s": [100] + }, + { "t": 72, "s": [20] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 251.75, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [1.5, -21.25, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [30.5, 30.5], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 0, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.956862804936, 0.627450980392, 0.196078446332, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [1.5, -21], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 2", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 500, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} diff --git a/src/assets/static-home/documents/menu-button.json b/src/assets/static-home/documents/menu-button.json new file mode 100644 index 0000000..3a91b02 --- /dev/null +++ b/src/assets/static-home/documents/menu-button.json @@ -0,0 +1,372 @@ +{ + "v": "5.7.7", + "fr": 24, + "ip": 0, + "op": 16, + "w": 300, + "h": 300, + "nm": "Comp 1", + "ddd": 0, + "assets": [], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "Shape Layer 4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { "i": { "x": [0.211], "y": [1] }, "o": { "x": [0.789], "y": [0] }, "t": 0, "s": [0] }, + { "t": 16, "s": [45] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.211, "y": 1 }, + "o": { "x": 0.789, "y": 0 }, + "t": 0, + "s": [149.125, 194.25, 0], + "to": [0, -7.333, 0], + "ti": [0, 7.333, 0] + }, + { "t": 16, "s": [149.125, 150.25, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [-0.875, -49.25, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [139.75, 17.5], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 276, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 0, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-0.875, -49.25], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 500, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Shape Layer 3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { "i": { "x": [0.211], "y": [1] }, "o": { "x": [0.789], "y": [0] }, "t": 0, "s": [0] }, + { "t": 16, "s": [45] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [150, 150, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [-0.875, -49.25, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [139.75, 17.5], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 276, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 0, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-0.875, -49.25], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 500, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "Shape Layer 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { "i": { "x": [0.211], "y": [1] }, "o": { "x": [0.789], "y": [0] }, "t": 0, "s": [0] }, + { "t": 16, "s": [-45] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.211, "y": 1 }, + "o": { "x": 0.789, "y": 0 }, + "t": 0, + "s": [149.125, 106.75, 0], + "to": [0, 7.208, 0], + "ti": [0, -7.208, 0] + }, + { "t": 16, "s": [149.125, 150, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [-0.875, -49.25, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [139.75, 17.5], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 276, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 0, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-0.875, -49.25], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 500, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 150, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [2.5, -4, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [181.962, 181.962, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [158, 158], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 0, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.964705882353, 0.63137254902, 0.227450980392, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [2.5, -4], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 500, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} diff --git a/src/assets/static-home/fonts/Gilroy-Black.woff b/src/assets/static-home/fonts/Gilroy-Black.woff new file mode 100644 index 0000000..2520288 Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-Black.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-BlackItalic.woff b/src/assets/static-home/fonts/Gilroy-BlackItalic.woff new file mode 100644 index 0000000..2b841b8 Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-BlackItalic.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-Bold.woff b/src/assets/static-home/fonts/Gilroy-Bold.woff new file mode 100644 index 0000000..8db9403 Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-Bold.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-BoldItalic.woff b/src/assets/static-home/fonts/Gilroy-BoldItalic.woff new file mode 100644 index 0000000..8b2a3a5 Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-BoldItalic.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-ExtraBold.woff b/src/assets/static-home/fonts/Gilroy-ExtraBold.woff new file mode 100644 index 0000000..c83a59d Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-ExtraBold.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-ExtraBoldItalic.woff b/src/assets/static-home/fonts/Gilroy-ExtraBoldItalic.woff new file mode 100644 index 0000000..21086d3 Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-ExtraBoldItalic.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-Heavy.woff b/src/assets/static-home/fonts/Gilroy-Heavy.woff new file mode 100644 index 0000000..3105ccc Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-Heavy.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-HeavyItalic.woff b/src/assets/static-home/fonts/Gilroy-HeavyItalic.woff new file mode 100644 index 0000000..0495349 Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-HeavyItalic.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-Light.woff b/src/assets/static-home/fonts/Gilroy-Light.woff new file mode 100644 index 0000000..f5fb531 Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-Light.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-LightItalic.woff b/src/assets/static-home/fonts/Gilroy-LightItalic.woff new file mode 100644 index 0000000..5acb0e3 Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-LightItalic.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-Medium.woff b/src/assets/static-home/fonts/Gilroy-Medium.woff new file mode 100644 index 0000000..7e6cd8e Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-Medium.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-MediumItalic.woff b/src/assets/static-home/fonts/Gilroy-MediumItalic.woff new file mode 100644 index 0000000..361a890 Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-MediumItalic.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-Regular.woff b/src/assets/static-home/fonts/Gilroy-Regular.woff new file mode 100644 index 0000000..65da963 Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-Regular.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-RegularItalic.woff b/src/assets/static-home/fonts/Gilroy-RegularItalic.woff new file mode 100644 index 0000000..b76d32a Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-RegularItalic.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-SemiBold.woff b/src/assets/static-home/fonts/Gilroy-SemiBold.woff new file mode 100644 index 0000000..53aaed3 Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-SemiBold.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-SemiBoldItalic.woff b/src/assets/static-home/fonts/Gilroy-SemiBoldItalic.woff new file mode 100644 index 0000000..b6884b6 Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-SemiBoldItalic.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-Thin.woff b/src/assets/static-home/fonts/Gilroy-Thin.woff new file mode 100644 index 0000000..e06c2ed Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-Thin.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-ThinItalic.woff b/src/assets/static-home/fonts/Gilroy-ThinItalic.woff new file mode 100644 index 0000000..727dad7 Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-ThinItalic.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-UltraLight.woff b/src/assets/static-home/fonts/Gilroy-UltraLight.woff new file mode 100644 index 0000000..193159d Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-UltraLight.woff differ diff --git a/src/assets/static-home/fonts/Gilroy-UltraLightItalic.woff b/src/assets/static-home/fonts/Gilroy-UltraLightItalic.woff new file mode 100644 index 0000000..25996f8 Binary files /dev/null and b/src/assets/static-home/fonts/Gilroy-UltraLightItalic.woff differ diff --git a/src/assets/static-home/images/1icon_background.png b/src/assets/static-home/images/1icon_background.png new file mode 100644 index 0000000..c02384c Binary files /dev/null and b/src/assets/static-home/images/1icon_background.png differ diff --git a/src/assets/static-home/images/2icon_layer4.png b/src/assets/static-home/images/2icon_layer4.png new file mode 100644 index 0000000..a2c953e Binary files /dev/null and b/src/assets/static-home/images/2icon_layer4.png differ diff --git a/src/assets/static-home/images/2icon_layer5.png b/src/assets/static-home/images/2icon_layer5.png new file mode 100644 index 0000000..45189f8 Binary files /dev/null and b/src/assets/static-home/images/2icon_layer5.png differ diff --git a/src/assets/static-home/images/2icon_layer6.png b/src/assets/static-home/images/2icon_layer6.png new file mode 100644 index 0000000..8030219 Binary files /dev/null and b/src/assets/static-home/images/2icon_layer6.png differ diff --git a/src/assets/static-home/images/3icon_layer4.png b/src/assets/static-home/images/3icon_layer4.png new file mode 100644 index 0000000..dc0b177 Binary files /dev/null and b/src/assets/static-home/images/3icon_layer4.png differ diff --git a/src/assets/static-home/images/Discord-logo.svg b/src/assets/static-home/images/Discord-logo.svg new file mode 100644 index 0000000..04eb7fd --- /dev/null +++ b/src/assets/static-home/images/Discord-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/static-home/images/Marketplace_background_0002-p-500.png b/src/assets/static-home/images/Marketplace_background_0002-p-500.png new file mode 100644 index 0000000..091dbd7 Binary files /dev/null and b/src/assets/static-home/images/Marketplace_background_0002-p-500.png differ diff --git a/src/assets/static-home/images/Marketplace_background_0002.png b/src/assets/static-home/images/Marketplace_background_0002.png new file mode 100644 index 0000000..3fc8c72 Binary files /dev/null and b/src/assets/static-home/images/Marketplace_background_0002.png differ diff --git a/src/assets/static-home/images/Mask-group-1.png b/src/assets/static-home/images/Mask-group-1.png new file mode 100644 index 0000000..44c72ff Binary files /dev/null and b/src/assets/static-home/images/Mask-group-1.png differ diff --git a/src/assets/static-home/images/Mask-group-1_1.png b/src/assets/static-home/images/Mask-group-1_1.png new file mode 100644 index 0000000..a73c3f1 Binary files /dev/null and b/src/assets/static-home/images/Mask-group-1_1.png differ diff --git a/src/assets/static-home/images/Mask-group-2.png b/src/assets/static-home/images/Mask-group-2.png new file mode 100644 index 0000000..2b4d2d1 Binary files /dev/null and b/src/assets/static-home/images/Mask-group-2.png differ diff --git a/src/assets/static-home/images/Mask-group-2_1.png b/src/assets/static-home/images/Mask-group-2_1.png new file mode 100644 index 0000000..a793aae Binary files /dev/null and b/src/assets/static-home/images/Mask-group-2_1.png differ diff --git a/src/assets/static-home/images/Mask-group-2_2.png b/src/assets/static-home/images/Mask-group-2_2.png new file mode 100644 index 0000000..6b74f78 Binary files /dev/null and b/src/assets/static-home/images/Mask-group-2_2.png differ diff --git a/src/assets/static-home/images/Mask-group-3.png b/src/assets/static-home/images/Mask-group-3.png new file mode 100644 index 0000000..2d4b023 Binary files /dev/null and b/src/assets/static-home/images/Mask-group-3.png differ diff --git a/src/assets/static-home/images/Mask-group-3_1.png b/src/assets/static-home/images/Mask-group-3_1.png new file mode 100644 index 0000000..e447288 Binary files /dev/null and b/src/assets/static-home/images/Mask-group-3_1.png differ diff --git a/src/assets/static-home/images/Mask-group-4.png b/src/assets/static-home/images/Mask-group-4.png new file mode 100644 index 0000000..e876e01 Binary files /dev/null and b/src/assets/static-home/images/Mask-group-4.png differ diff --git a/src/assets/static-home/images/Mask-group-4_1.png b/src/assets/static-home/images/Mask-group-4_1.png new file mode 100644 index 0000000..72b06db Binary files /dev/null and b/src/assets/static-home/images/Mask-group-4_1.png differ diff --git a/src/assets/static-home/images/Mask-group-5.png b/src/assets/static-home/images/Mask-group-5.png new file mode 100644 index 0000000..218be23 Binary files /dev/null and b/src/assets/static-home/images/Mask-group-5.png differ diff --git a/src/assets/static-home/images/Mask-group-6.png b/src/assets/static-home/images/Mask-group-6.png new file mode 100644 index 0000000..df07d4d Binary files /dev/null and b/src/assets/static-home/images/Mask-group-6.png differ diff --git a/src/assets/static-home/images/Mask-group-7.png b/src/assets/static-home/images/Mask-group-7.png new file mode 100644 index 0000000..6def8f4 Binary files /dev/null and b/src/assets/static-home/images/Mask-group-7.png differ diff --git a/src/assets/static-home/images/Mask-group.png b/src/assets/static-home/images/Mask-group.png new file mode 100644 index 0000000..aed9d10 Binary files /dev/null and b/src/assets/static-home/images/Mask-group.png differ diff --git a/src/assets/static-home/images/Mask-group_1-p-500.png b/src/assets/static-home/images/Mask-group_1-p-500.png new file mode 100644 index 0000000..6be3b30 Binary files /dev/null and b/src/assets/static-home/images/Mask-group_1-p-500.png differ diff --git a/src/assets/static-home/images/Mask-group_1.png b/src/assets/static-home/images/Mask-group_1.png new file mode 100644 index 0000000..a61329b Binary files /dev/null and b/src/assets/static-home/images/Mask-group_1.png differ diff --git a/src/assets/static-home/images/Mask-group_2.png b/src/assets/static-home/images/Mask-group_2.png new file mode 100644 index 0000000..640e3a0 Binary files /dev/null and b/src/assets/static-home/images/Mask-group_2.png differ diff --git a/src/assets/static-home/images/Mask-group_3.png b/src/assets/static-home/images/Mask-group_3.png new file mode 100644 index 0000000..c9a9843 Binary files /dev/null and b/src/assets/static-home/images/Mask-group_3.png differ diff --git a/src/assets/static-home/images/Soonaverse-logo.svg b/src/assets/static-home/images/Soonaverse-logo.svg new file mode 100644 index 0000000..6a892ac --- /dev/null +++ b/src/assets/static-home/images/Soonaverse-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-1080.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-1080.png new file mode 100644 index 0000000..f067e94 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-1600.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-1600.png new file mode 100644 index 0000000..fc25896 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-2000.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-2000.png new file mode 100644 index 0000000..5c9e09c Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-2600.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-2600.png new file mode 100644 index 0000000..0b543a8 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-3200.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-3200.png new file mode 100644 index 0000000..7752ec5 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-3200.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-500.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-500.png new file mode 100644 index 0000000..219ec28 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-800.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-800.png new file mode 100644 index 0000000..57b7ed5 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer1-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer1.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer1.png new file mode 100644 index 0000000..634a12e Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer1.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-1080.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-1080.png new file mode 100644 index 0000000..f292be3 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-1600.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-1600.png new file mode 100644 index 0000000..52d347c Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-2000.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-2000.png new file mode 100644 index 0000000..4e11e57 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-2600.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-2600.png new file mode 100644 index 0000000..003b019 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-3200.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-3200.png new file mode 100644 index 0000000..664c561 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-3200.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-500.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-500.png new file mode 100644 index 0000000..75c1d69 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-800.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-800.png new file mode 100644 index 0000000..ed63169 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer2-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer2.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer2.png new file mode 100644 index 0000000..7cf262b Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer2.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-1080.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-1080.png new file mode 100644 index 0000000..f175014 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-1600.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-1600.png new file mode 100644 index 0000000..f775c27 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-2000.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-2000.png new file mode 100644 index 0000000..c84a7a2 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-2600.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-2600.png new file mode 100644 index 0000000..b3642a8 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-500.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-500.png new file mode 100644 index 0000000..e594e00 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-800.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-800.png new file mode 100644 index 0000000..35fc61b Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer3-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer3.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer3.png new file mode 100644 index 0000000..d2d87db Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer3.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-1080.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-1080.png new file mode 100644 index 0000000..68a8c33 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-1600.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-1600.png new file mode 100644 index 0000000..11655f9 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-2000.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-2000.png new file mode 100644 index 0000000..09d2ee1 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-2600.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-2600.png new file mode 100644 index 0000000..14b396d Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-500.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-500.png new file mode 100644 index 0000000..1ddab50 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-800.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-800.png new file mode 100644 index 0000000..e8a3f96 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer4-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_dark_layer4.png b/src/assets/static-home/images/Soonaverse_footer_dark_layer4.png new file mode 100644 index 0000000..045c8c1 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_dark_layer4.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-1080.png b/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-1080.png new file mode 100644 index 0000000..0cbaae1 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-1600.png b/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-1600.png new file mode 100644 index 0000000..e406d24 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-2000.png b/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-2000.png new file mode 100644 index 0000000..90fa9ed Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-2600.png b/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-2600.png new file mode 100644 index 0000000..94306c7 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-3200.png b/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-3200.png new file mode 100644 index 0000000..0e0b539 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-3200.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-500.png b/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-500.png new file mode 100644 index 0000000..bf01965 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-800.png b/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-800.png new file mode 100644 index 0000000..c3ab281 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer1-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer1.png b/src/assets/static-home/images/Soonaverse_footer_light_layer1.png new file mode 100644 index 0000000..994c154 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer1.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-1080.png b/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-1080.png new file mode 100644 index 0000000..0b3e7fb Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-1600.png b/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-1600.png new file mode 100644 index 0000000..fe9d01d Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-2000.png b/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-2000.png new file mode 100644 index 0000000..ac1c51a Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-2600.png b/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-2600.png new file mode 100644 index 0000000..f3b4e5d Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-3200.png b/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-3200.png new file mode 100644 index 0000000..8911c02 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-3200.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-500.png b/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-500.png new file mode 100644 index 0000000..16f3c94 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-800.png b/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-800.png new file mode 100644 index 0000000..49fdcfe Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer2-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer2.png b/src/assets/static-home/images/Soonaverse_footer_light_layer2.png new file mode 100644 index 0000000..d55914c Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer2.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-1080.png b/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-1080.png new file mode 100644 index 0000000..38724de Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-1600.png b/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-1600.png new file mode 100644 index 0000000..b39d89b Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-2000.png b/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-2000.png new file mode 100644 index 0000000..59445e6 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-2600.png b/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-2600.png new file mode 100644 index 0000000..cf0aea7 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-3200.png b/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-3200.png new file mode 100644 index 0000000..6728d49 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-3200.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-500.png b/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-500.png new file mode 100644 index 0000000..91486a2 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-800.png b/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-800.png new file mode 100644 index 0000000..3bcc53a Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer3-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer3.png b/src/assets/static-home/images/Soonaverse_footer_light_layer3.png new file mode 100644 index 0000000..b3f19a6 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer3.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer4-p-1080.png b/src/assets/static-home/images/Soonaverse_footer_light_layer4-p-1080.png new file mode 100644 index 0000000..790dc86 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer4-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer4-p-500.png b/src/assets/static-home/images/Soonaverse_footer_light_layer4-p-500.png new file mode 100644 index 0000000..7626471 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer4-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer4-p-800.png b/src/assets/static-home/images/Soonaverse_footer_light_layer4-p-800.png new file mode 100644 index 0000000..f721a16 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer4-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer4.png b/src/assets/static-home/images/Soonaverse_footer_light_layer4.png new file mode 100644 index 0000000..510a799 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer4.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-1080.png b/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-1080.png new file mode 100644 index 0000000..9798caa Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-1600.png b/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-1600.png new file mode 100644 index 0000000..da0c93c Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-2000.png b/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-2000.png new file mode 100644 index 0000000..c845e32 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-2600.png b/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-2600.png new file mode 100644 index 0000000..0adeae3 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-500.png b/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-500.png new file mode 100644 index 0000000..75ee57d Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-800.png b/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-800.png new file mode 100644 index 0000000..58efd79 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer5-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_footer_light_layer5.png b/src/assets/static-home/images/Soonaverse_footer_light_layer5.png new file mode 100644 index 0000000..8b55fbe Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_footer_light_layer5.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-1080.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-1080.png new file mode 100644 index 0000000..e4834f6 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-1600.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-1600.png new file mode 100644 index 0000000..2022ba0 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-2000.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-2000.png new file mode 100644 index 0000000..1a535ec Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-2600.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-2600.png new file mode 100644 index 0000000..e4205f2 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-3200.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-3200.png new file mode 100644 index 0000000..f5e6b41 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-3200.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-500.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-500.png new file mode 100644 index 0000000..1c866e7 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-800.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-800.png new file mode 100644 index 0000000..36a0cdd Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1.png new file mode 100644 index 0000000..ee676be Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer1.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-1080.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-1080.png new file mode 100644 index 0000000..25fccb1 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-1600.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-1600.png new file mode 100644 index 0000000..d145732 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-2000.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-2000.png new file mode 100644 index 0000000..be57040 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-2600.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-2600.png new file mode 100644 index 0000000..9394e62 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-3200.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-3200.png new file mode 100644 index 0000000..fc8d8f3 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-3200.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-500.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-500.png new file mode 100644 index 0000000..d7b989e Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-800.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-800.png new file mode 100644 index 0000000..e6f12bb Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2.png new file mode 100644 index 0000000..b19452a Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer2.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-1080.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-1080.png new file mode 100644 index 0000000..a5df5d2 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-1600.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-1600.png new file mode 100644 index 0000000..8752688 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-2000.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-2000.png new file mode 100644 index 0000000..9972e36 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-2600.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-2600.png new file mode 100644 index 0000000..02af231 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-3200.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-3200.png new file mode 100644 index 0000000..c6f28c3 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-3200.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-500.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-500.png new file mode 100644 index 0000000..5b690b2 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-800.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-800.png new file mode 100644 index 0000000..b52b281 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3.png new file mode 100644 index 0000000..597ad3b Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer3.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-1080.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-1080.png new file mode 100644 index 0000000..b04098c Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-1600.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-1600.png new file mode 100644 index 0000000..de4feb8 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-2000.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-2000.png new file mode 100644 index 0000000..6e7e532 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-2600.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-2600.png new file mode 100644 index 0000000..ca87688 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-500.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-500.png new file mode 100644 index 0000000..56553c9 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-800.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-800.png new file mode 100644 index 0000000..7d644c9 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4.png new file mode 100644 index 0000000..abb0715 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer4.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-1080.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-1080.png new file mode 100644 index 0000000..d03479e Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-1600.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-1600.png new file mode 100644 index 0000000..57931c5 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-2000.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-2000.png new file mode 100644 index 0000000..a05bfdf Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-2600.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-2600.png new file mode 100644 index 0000000..4b3a2e8 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-500.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-500.png new file mode 100644 index 0000000..a615d5e Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-800.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-800.png new file mode 100644 index 0000000..8bc292e Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5.png new file mode 100644 index 0000000..2a4c37b Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer5.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-1080.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-1080.png new file mode 100644 index 0000000..50f5d9e Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-1600.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-1600.png new file mode 100644 index 0000000..cbe936a Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-2000.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-2000.png new file mode 100644 index 0000000..6feccac Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-2600.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-2600.png new file mode 100644 index 0000000..8379a24 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-500.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-500.png new file mode 100644 index 0000000..e8be7a0 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-800.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-800.png new file mode 100644 index 0000000..469aa80 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6.png b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6.png new file mode 100644 index 0000000..d2d0013 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_dark_layer6.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-1080.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-1080.png new file mode 100644 index 0000000..543bb4d Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-1600.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-1600.png new file mode 100644 index 0000000..7beafa4 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-2000.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-2000.png new file mode 100644 index 0000000..679b0b2 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-2600.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-2600.png new file mode 100644 index 0000000..68feef9 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-500.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-500.png new file mode 100644 index 0000000..ba60a97 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-800.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-800.png new file mode 100644 index 0000000..7df0d16 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer1-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer1.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer1.png new file mode 100644 index 0000000..9e83577 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer1.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-1080.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-1080.png new file mode 100644 index 0000000..243c2ee Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-1600.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-1600.png new file mode 100644 index 0000000..a654466 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-2000.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-2000.png new file mode 100644 index 0000000..4062e49 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-2600.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-2600.png new file mode 100644 index 0000000..9a9ddc7 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-3200.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-3200.png new file mode 100644 index 0000000..17a5926 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-3200.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-500.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-500.png new file mode 100644 index 0000000..7dc816a Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-800.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-800.png new file mode 100644 index 0000000..61d82ec Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer2.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2.png new file mode 100644 index 0000000..ee1c2ff Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer2.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-1080.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-1080.png new file mode 100644 index 0000000..a0cfb55 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-1600.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-1600.png new file mode 100644 index 0000000..673052e Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-2000.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-2000.png new file mode 100644 index 0000000..58e047a Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-2600.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-2600.png new file mode 100644 index 0000000..c20250d Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-3200.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-3200.png new file mode 100644 index 0000000..8ff942c Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-3200.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-500.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-500.png new file mode 100644 index 0000000..4552b61 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-800.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-800.png new file mode 100644 index 0000000..fb4b031 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer3.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3.png new file mode 100644 index 0000000..6825457 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer3.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-1080.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-1080.png new file mode 100644 index 0000000..ee86995 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-1600.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-1600.png new file mode 100644 index 0000000..c934d12 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-2000.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-2000.png new file mode 100644 index 0000000..d2e594b Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-2600.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-2600.png new file mode 100644 index 0000000..8873a3c Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-500.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-500.png new file mode 100644 index 0000000..b3c4564 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-800.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-800.png new file mode 100644 index 0000000..189fe5d Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer4-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer4.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer4.png new file mode 100644 index 0000000..b2c3a24 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer4.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-1080.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-1080.png new file mode 100644 index 0000000..5fa5a3c Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-1600.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-1600.png new file mode 100644 index 0000000..b445ec0 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-2000.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-2000.png new file mode 100644 index 0000000..3aca34a Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-2600.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-2600.png new file mode 100644 index 0000000..2648752 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-500.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-500.png new file mode 100644 index 0000000..0b87eca Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-800.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-800.png new file mode 100644 index 0000000..ee21596 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer5-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer5.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer5.png new file mode 100644 index 0000000..190935a Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer5.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-1080.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-1080.png new file mode 100644 index 0000000..9dcaf14 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-1600.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-1600.png new file mode 100644 index 0000000..f8a7802 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-2000.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-2000.png new file mode 100644 index 0000000..b7ed039 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-2600.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-2600.png new file mode 100644 index 0000000..d0c64ad Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-3200.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-3200.png new file mode 100644 index 0000000..1390181 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-3200.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-500.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-500.png new file mode 100644 index 0000000..cc04010 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-800.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-800.png new file mode 100644 index 0000000..cccd2bc Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer6.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6.png new file mode 100644 index 0000000..b3b76b5 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer6.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-1080.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-1080.png new file mode 100644 index 0000000..bc6f637 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-1080.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-1600.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-1600.png new file mode 100644 index 0000000..5fed50d Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-1600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-2000.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-2000.png new file mode 100644 index 0000000..b9780a4 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-2000.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-2600.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-2600.png new file mode 100644 index 0000000..09be786 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-2600.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-500.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-500.png new file mode 100644 index 0000000..db65246 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-500.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-800.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-800.png new file mode 100644 index 0000000..7c18b7c Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer7-p-800.png differ diff --git a/src/assets/static-home/images/Soonaverse_hero_image_light_layer7.png b/src/assets/static-home/images/Soonaverse_hero_image_light_layer7.png new file mode 100644 index 0000000..d5801d1 Binary files /dev/null and b/src/assets/static-home/images/Soonaverse_hero_image_light_layer7.png differ diff --git a/src/assets/static-home/images/Twitter-logo.svg b/src/assets/static-home/images/Twitter-logo.svg new file mode 100644 index 0000000..0053ddb --- /dev/null +++ b/src/assets/static-home/images/Twitter-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/static-home/images/favicon.ico b/src/assets/static-home/images/favicon.ico new file mode 100644 index 0000000..1939648 Binary files /dev/null and b/src/assets/static-home/images/favicon.ico differ diff --git a/src/assets/static-home/images/github_logo.svg b/src/assets/static-home/images/github_logo.svg new file mode 100644 index 0000000..2aaa026 --- /dev/null +++ b/src/assets/static-home/images/github_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/static-home/images/mobile-menu-open-3-p-1080.png b/src/assets/static-home/images/mobile-menu-open-3-p-1080.png new file mode 100644 index 0000000..e354940 Binary files /dev/null and b/src/assets/static-home/images/mobile-menu-open-3-p-1080.png differ diff --git a/src/assets/static-home/images/mobile-menu-open-3-p-500.png b/src/assets/static-home/images/mobile-menu-open-3-p-500.png new file mode 100644 index 0000000..7676875 Binary files /dev/null and b/src/assets/static-home/images/mobile-menu-open-3-p-500.png differ diff --git a/src/assets/static-home/images/mobile-menu-open-3-p-800.png b/src/assets/static-home/images/mobile-menu-open-3-p-800.png new file mode 100644 index 0000000..d8492ed Binary files /dev/null and b/src/assets/static-home/images/mobile-menu-open-3-p-800.png differ diff --git a/src/assets/static-home/images/mobile-menu-open-3.png b/src/assets/static-home/images/mobile-menu-open-3.png new file mode 100644 index 0000000..796003f Binary files /dev/null and b/src/assets/static-home/images/mobile-menu-open-3.png differ diff --git a/src/assets/static-home/images/webclip.png b/src/assets/static-home/images/webclip.png new file mode 100644 index 0000000..c99fb8b Binary files /dev/null and b/src/assets/static-home/images/webclip.png differ diff --git a/src/assets/static-home/index.html b/src/assets/static-home/index.html new file mode 100644 index 0000000..5236ebe --- /dev/null +++ b/src/assets/static-home/index.html @@ -0,0 +1,877 @@ + + + + + + + Soonaverse + + + + + + + + + + + + +
    + +
    +
    +

    Welcome to the

    +

    Soonaverse

    +

    Explore

    +
    + +
    + +
    +
    +
    +
    +

    What we do

    +
    +
    +
    +

    What we do

    +

    + Soonaverse is a platform for communities to create and manage decentralized autonomous + organizations (DAOs), NFTs, projects, companies, and markets, on the feeless + infrastructure of the IOTA network. Any organization can launch and trade liquid + assets through our Marketplace, Launchpad, and Token Exchange products. +

    +
    +
    +

    + Many professionals have at least two calendars, one for work and one for personal + events. +

    +

    NFT and tokens

    +
    +
    +
    +
    +
    +
    +
    +

    How we help

    +

    + A flourishing crypto ecosystem is built on top of reliable infrastructure. The + Soonaverse provides an intuitive platform that allows anybody in the world to easily + manage their communities and the digital assets they create. Those digital assets then + become fully liquid through various marketplaces seamlessly woven into one simple user + experience. +

    +
    +
    +
    +
    + +
    +
    +
    +

    + Community Management +

    +

    + Spin up a space where members can join, engage, and be rewarded for their efforts. +

    +
    +
    +
    +
    +
    + +
    +
    +
    +

    + Digital Asset Creation +

    +

    + Easily create digital assets like NFTs or tokens for your community to enjoy.
    ‍ +

    +
    +
    +
    +
    +
    + +
    +
    +
    +

    + Access to Markets +

    +

    + All property created on the platform can be freely traded through various + marketplaces. +

    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    NFTs and Voting
    +
    A Feeless Base
    Layer
    +

    + The unique features of the IOTA and Shimmer networks allow the Soonaverse to provide + certain services like voting as well as NFT minting and trading free of charge. +

    + Explore Now +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    + +
    + + +
    + +
    +
    +
    +
    Exchanges and Liquid Assets
    +
    L1 Assets and
    Exchanges
    +

    + The power of feeless base layers should not be underestimated. All assets created + directly on IOTA or Shimmer will have marketplaces where they are traded without + requiring a transfer to a smart contract chain. +

    + Start Trading +
    +
    +
    +
    +
    +
    +
    dApp integration
    +
    3rd party Service
    Modules
    +

    + To make the Soonaverse a true all-in-one platform, other projects are empowered to + launch modules that will be attached to the core system and provide synergies that + benefit all users. +

    + Learn More +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    + +
    + +
    + + + + + diff --git a/src/assets/static-home/js/webflow.js b/src/assets/static-home/js/webflow.js new file mode 100644 index 0000000..4484662 --- /dev/null +++ b/src/assets/static-home/js/webflow.js @@ -0,0 +1,27614 @@ +/*! + * Webflow: Front-end site library + * @license MIT + * Inline scripts may access the api using an async handler: + * var Webflow = Webflow || []; + * Webflow.push(readyFunction); + */ !(function (t) { + var e = {}; + function r(n) { + if (e[n]) return e[n].exports; + var i = (e[n] = { i: n, l: !1, exports: {} }); + return t[n].call(i.exports, i, i.exports, r), (i.l = !0), i.exports; + } + (r.m = t), + (r.c = e), + (r.d = function (t, e, n) { + r.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: n }); + }), + (r.r = function (t) { + 'undefined' != typeof Symbol && + Symbol.toStringTag && + Object.defineProperty(t, Symbol.toStringTag, { value: 'Module' }), + Object.defineProperty(t, '__esModule', { value: !0 }); + }), + (r.t = function (t, e) { + if ((1 & e && (t = r(t)), 8 & e)) return t; + if (4 & e && 'object' == typeof t && t && t.__esModule) return t; + var n = Object.create(null); + if ( + (r.r(n), + Object.defineProperty(n, 'default', { enumerable: !0, value: t }), + 2 & e && 'string' != typeof t) + ) + for (var i in t) + r.d( + n, + i, + function (e) { + return t[e]; + }.bind(null, i), + ); + return n; + }), + (r.n = function (t) { + var e = + t && t.__esModule + ? function () { + return t.default; + } + : function () { + return t; + }; + return r.d(e, 'a', e), e; + }), + (r.o = function (t, e) { + return Object.prototype.hasOwnProperty.call(t, e); + }), + (r.p = ''), + r((r.s = 190)); +})([ + function (t, e, r) { + (function (e) { + var r = function (t) { + return t && t.Math == Math && t; + }; + t.exports = + r('object' == typeof globalThis && globalThis) || + r('object' == typeof window && window) || + r('object' == typeof self && self) || + r('object' == typeof e && e) || + (function () { + return this; + })() || + Function('return this')(); + }).call(this, r(60)); + }, + function (t, e, r) { + var n = r(0), + i = r(95).f, + a = r(71), + s = r(27), + o = r(98), + h = r(272), + l = r(105); + t.exports = function (t, e) { + var r, + c, + u, + f, + p, + d = t.target, + m = t.global, + v = t.stat; + if ((r = m ? n : v ? n[d] || o(d, {}) : (n[d] || {}).prototype)) + for (c in e) { + if ( + ((f = e[c]), + (u = t.noTargetGet ? (p = i(r, c)) && p.value : r[c]), + !l(m ? c : d + (v ? '.' : '#') + c, t.forced) && void 0 !== u) + ) { + if (typeof f == typeof u) continue; + h(f, u); + } + (t.sham || (u && u.sham)) && a(f, 'sham', !0), s(r, c, f, t); + } + }; + }, + function (t, e) { + var r = Function.prototype, + n = r.bind, + i = r.call, + a = n && n.bind(i); + t.exports = n + ? function (t) { + return t && a(i, t); + } + : function (t) { + return ( + t && + function () { + return i.apply(t, arguments); + } + ); + }; + }, + function (t, e) { + t.exports = function (t) { + return t && t.__esModule ? t : { default: t }; + }; + }, + function (t, e, r) { + var n = r(274); + t.exports = function (t) { + return n(t.length); + }; + }, + function (t, e) { + t.exports = function (t) { + return 'function' == typeof t; + }; + }, + function (t, e, r) { + var n = r(0), + i = r(148), + a = r(16), + s = r(99), + o = r(147), + h = r(146), + l = i('wks'), + c = n.Symbol, + u = c && c.for, + f = h ? c : (c && c.withoutSetter) || s; + t.exports = function (t) { + if (!a(l, t) || (!o && 'string' != typeof l[t])) { + var e = 'Symbol.' + t; + o && a(c, t) ? (l[t] = c[t]) : (l[t] = h && u ? u(e) : f(e)); + } + return l[t]; + }; + }, + function (t, e, r) { + var n = r(0), + i = r(96), + a = n.Object; + t.exports = function (t) { + return a(i(t)); + }; + }, + function (t, e, r) { + var n = r(6), + i = r(36), + a = r(17), + s = n('unscopables'), + o = Array.prototype; + null == o[s] && a.f(o, s, { configurable: !0, value: i(null) }), + (t.exports = function (t) { + o[s][t] = !0; + }); + }, + function (t, e) { + t.exports = function (t) { + try { + return !!t(); + } catch (t) { + return !0; + } + }; + }, + function (t, e) { + var r = Array.isArray; + t.exports = r; + }, + function (t, e, r) { + var n = r(0), + i = r(12), + a = n.String, + s = n.TypeError; + t.exports = function (t) { + if (i(t)) return t; + throw s(a(t) + ' is not an object'); + }; + }, + function (t, e, r) { + var n = r(5); + t.exports = function (t) { + return 'object' == typeof t ? null !== t : n(t); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(56); + Object.defineProperty(e, '__esModule', { value: !0 }); + var i = { IX2EngineActionTypes: !0, IX2EngineConstants: !0 }; + e.IX2EngineConstants = e.IX2EngineActionTypes = void 0; + var a = r(387); + Object.keys(a).forEach(function (t) { + 'default' !== t && + '__esModule' !== t && + (Object.prototype.hasOwnProperty.call(i, t) || + Object.defineProperty(e, t, { + enumerable: !0, + get: function () { + return a[t]; + }, + })); + }); + var s = r(174); + Object.keys(s).forEach(function (t) { + 'default' !== t && + '__esModule' !== t && + (Object.prototype.hasOwnProperty.call(i, t) || + Object.defineProperty(e, t, { + enumerable: !0, + get: function () { + return s[t]; + }, + })); + }); + var o = r(388); + Object.keys(o).forEach(function (t) { + 'default' !== t && + '__esModule' !== t && + (Object.prototype.hasOwnProperty.call(i, t) || + Object.defineProperty(e, t, { + enumerable: !0, + get: function () { + return o[t]; + }, + })); + }); + var h = r(389); + Object.keys(h).forEach(function (t) { + 'default' !== t && + '__esModule' !== t && + (Object.prototype.hasOwnProperty.call(i, t) || + Object.defineProperty(e, t, { + enumerable: !0, + get: function () { + return h[t]; + }, + })); + }); + var l = n(r(390)); + e.IX2EngineActionTypes = l; + var c = n(r(391)); + e.IX2EngineConstants = c; + }, + function (t, e) { + var r = Function.prototype.call; + t.exports = r.bind + ? r.bind(r) + : function () { + return r.apply(r, arguments); + }; + }, + function (t, e, r) { + var n = r(0), + i = r(5); + t.exports = function (t, e) { + return arguments.length < 2 ? ((r = n[t]), i(r) ? r : void 0) : n[t] && n[t][e]; + var r; + }; + }, + function (t, e, r) { + var n = r(2), + i = r(7), + a = n({}.hasOwnProperty); + t.exports = + Object.hasOwn || + function (t, e) { + return a(i(t), e); + }; + }, + function (t, e, r) { + var n = r(0), + i = r(19), + a = r(149), + s = r(11), + o = r(68), + h = n.TypeError, + l = Object.defineProperty; + e.f = i + ? l + : function (t, e, r) { + if ((s(t), (e = o(e)), s(r), a)) + try { + return l(t, e, r); + } catch (t) {} + if ('get' in r || 'set' in r) throw h('Accessors not supported'); + return 'value' in r && (t[e] = r.value), t; + }; + }, + function (t, e, r) { + var n = r(129), + i = 'object' == typeof self && self && self.Object === Object && self, + a = n || i || Function('return this')(); + t.exports = a; + }, + function (t, e, r) { + var n = r(9); + t.exports = !n(function () { + return ( + 7 != + Object.defineProperty({}, 1, { + get: function () { + return 7; + }, + })[1] + ); + }); + }, + function (t, e, r) { + var n = r(0), + i = r(5), + a = r(69), + s = n.TypeError; + t.exports = function (t) { + if (i(t)) return t; + throw s(a(t) + ' is not a function'); + }; + }, + function (t, e, r) { + var n = r(2), + i = r(20), + a = n(n.bind); + t.exports = function (t, e) { + return ( + i(t), + void 0 === e + ? t + : a + ? a(t, e) + : function () { + return t.apply(e, arguments); + } + ); + }; + }, + function (t, e, r) { + 'use strict'; + var n = {}, + i = {}, + a = [], + s = window.Webflow || [], + o = window.jQuery, + h = o(window), + l = o(document), + c = o.isFunction, + u = (n._ = r(192)), + f = (n.tram = r(124) && o.tram), + p = !1, + d = !1; + function m(t) { + n.env() && + (c(t.design) && h.on('__wf_design', t.design), + c(t.preview) && h.on('__wf_preview', t.preview)), + c(t.destroy) && h.on('__wf_destroy', t.destroy), + t.ready && + c(t.ready) && + (function (t) { + if (p) return void t.ready(); + if (u.contains(a, t.ready)) return; + a.push(t.ready); + })(t); + } + function v(t) { + c(t.design) && h.off('__wf_design', t.design), + c(t.preview) && h.off('__wf_preview', t.preview), + c(t.destroy) && h.off('__wf_destroy', t.destroy), + t.ready && + c(t.ready) && + (function (t) { + a = u.filter(a, function (e) { + return e !== t.ready; + }); + })(t); + } + (f.config.hideBackface = !1), + (f.config.keepInherited = !0), + (n.define = function (t, e, r) { + i[t] && v(i[t]); + var n = (i[t] = e(o, u, r) || {}); + return m(n), n; + }), + (n.require = function (t) { + return i[t]; + }), + (n.push = function (t) { + p ? c(t) && t() : s.push(t); + }), + (n.env = function (t) { + var e = window.__wf_design, + r = void 0 !== e; + return t + ? 'design' === t + ? r && e + : 'preview' === t + ? r && !e + : 'slug' === t + ? r && window.__wf_slug + : 'editor' === t + ? window.WebflowEditor + : 'test' === t + ? window.__wf_test + : 'frame' === t + ? window !== window.top + : void 0 + : r; + }); + var y, + g = navigator.userAgent.toLowerCase(), + E = (n.env.touch = + 'ontouchstart' in window || + (window.DocumentTouch && document instanceof window.DocumentTouch)), + b = (n.env.chrome = + /chrome/.test(g) && + /Google/.test(navigator.vendor) && + parseInt(g.match(/chrome\/(\d+)\./)[1], 10)), + _ = (n.env.ios = /(ipod|iphone|ipad)/.test(g)); + (n.env.safari = /safari/.test(g) && !b && !_), + E && + l.on('touchstart mousedown', function (t) { + y = t.target; + }), + (n.validClick = E + ? function (t) { + return t === y || o.contains(t, y); + } + : function () { + return !0; + }); + var x, + S = 'resize.webflow orientationchange.webflow load.webflow'; + function T(t, e) { + var r = [], + n = {}; + return ( + (n.up = u.throttle(function (t) { + u.each(r, function (e) { + e(t); + }); + })), + t && e && t.on(e, n.up), + (n.on = function (t) { + 'function' == typeof t && (u.contains(r, t) || r.push(t)); + }), + (n.off = function (t) { + r = arguments.length + ? u.filter(r, function (e) { + return e !== t; + }) + : []; + }), + n + ); + } + function A(t) { + c(t) && t(); + } + function I() { + x && (x.reject(), h.off('load', x.resolve)), (x = new o.Deferred()), h.on('load', x.resolve); + } + (n.resize = T(h, S)), + (n.scroll = T(h, 'scroll.webflow resize.webflow orientationchange.webflow load.webflow')), + (n.redraw = T()), + (n.location = function (t) { + window.location = t; + }), + n.env() && (n.location = function () {}), + (n.ready = function () { + (p = !0), d ? ((d = !1), u.each(i, m)) : u.each(a, A), u.each(s, A), n.resize.up(); + }), + (n.load = function (t) { + x.then(t); + }), + (n.destroy = function (t) { + (t = t || {}), + (d = !0), + h.triggerHandler('__wf_destroy'), + null != t.domready && (p = t.domready), + u.each(i, v), + n.resize.off(), + n.scroll.off(), + n.redraw.off(), + (a = []), + (s = []), + 'pending' === x.state() && I(); + }), + o(n.ready), + I(), + (t.exports = window.Webflow = n); + }, + function (t, e) { + t.exports = function (t) { + var e = typeof t; + return null != t && ('object' == e || 'function' == e); + }; + }, + function (t, e, r) { + var n = r(41), + i = r(96); + t.exports = function (t) { + return n(i(t)); + }; + }, + function (t, e, r) { + var n = r(21), + i = r(2), + a = r(41), + s = r(7), + o = r(4), + h = r(44), + l = i([].push), + c = function (t) { + var e = 1 == t, + r = 2 == t, + i = 3 == t, + c = 4 == t, + u = 6 == t, + f = 7 == t, + p = 5 == t || u; + return function (d, m, v, y) { + for ( + var g, + E, + b = s(d), + _ = a(b), + x = n(m, v), + S = o(_), + T = 0, + A = y || h, + I = e ? A(d, S) : r || f ? A(d, 0) : void 0; + S > T; + T++ + ) + if ((p || T in _) && ((E = x((g = _[T]), T, b)), t)) + if (e) I[T] = E; + else if (E) + switch (t) { + case 3: + return !0; + case 5: + return g; + case 6: + return T; + case 2: + l(I, g); + } + else + switch (t) { + case 4: + return !1; + case 7: + l(I, g); + } + return u ? -1 : i || c ? c : I; + }; + }; + t.exports = { + forEach: c(0), + map: c(1), + filter: c(2), + some: c(3), + every: c(4), + find: c(5), + findIndex: c(6), + filterReject: c(7), + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(9); + t.exports = function (t, e) { + var r = [][t]; + return ( + !!r && + n(function () { + r.call( + null, + e || + function () { + throw 1; + }, + 1, + ); + }) + ); + }; + }, + function (t, e, r) { + var n = r(0), + i = r(5), + a = r(16), + s = r(71), + o = r(98), + h = r(72), + l = r(42), + c = r(150).CONFIGURABLE, + u = l.get, + f = l.enforce, + p = String(String).split('String'); + (t.exports = function (t, e, r, h) { + var l, + u = !!h && !!h.unsafe, + d = !!h && !!h.enumerable, + m = !!h && !!h.noTargetGet, + v = h && void 0 !== h.name ? h.name : e; + i(r) && + ('Symbol(' === String(v).slice(0, 7) && + (v = '[' + String(v).replace(/^Symbol\(([^)]*)\)/, '$1') + ']'), + (!a(r, 'name') || (c && r.name !== v)) && s(r, 'name', v), + (l = f(r)).source || (l.source = p.join('string' == typeof v ? v : ''))), + t !== n + ? (u ? !m && t[e] && (d = !0) : delete t[e], d ? (t[e] = r) : s(t, e, r)) + : d + ? (t[e] = r) + : o(e, r); + })(Function.prototype, 'toString', function () { + return (i(this) && u(this).source) || h(this); + }); + }, + function (t, e, r) { + var n = r(196), + i = r(250), + a = r(93), + s = r(10), + o = r(259); + t.exports = function (t) { + return 'function' == typeof t + ? t + : null == t + ? a + : 'object' == typeof t + ? s(t) + ? i(t[0], t[1]) + : n(t) + : o(t); + }; + }, + function (t, e, r) { + var n = r(208), + i = r(213); + t.exports = function (t, e) { + var r = i(t, e); + return n(r) ? r : void 0; + }; + }, + function (t, e) { + t.exports = function (t) { + return null != t && 'object' == typeof t; + }; + }, + function (t, e, r) { + var n, + i, + a = r(0), + s = r(32), + o = a.process, + h = a.Deno, + l = (o && o.versions) || (h && h.version), + c = l && l.v8; + c && (i = (n = c.split('.'))[0] > 0 && n[0] < 4 ? 1 : +(n[0] + n[1])), + !i && + s && + (!(n = s.match(/Edge\/(\d+)/)) || n[1] >= 74) && + (n = s.match(/Chrome\/(\d+)/)) && + (i = +n[1]), + (t.exports = i); + }, + function (t, e, r) { + var n = r(15); + t.exports = n('navigator', 'userAgent') || ''; + }, + function (t, e, r) { + var n = r(20); + t.exports = function (t, e) { + var r = t[e]; + return null == r ? void 0 : n(r); + }; + }, + function (t, e) { + var r = Math.ceil, + n = Math.floor; + t.exports = function (t) { + var e = +t; + return e != e || 0 === e ? 0 : (e > 0 ? n : r)(e); + }; + }, + function (t, e, r) { + var n = r(49); + t.exports = + Array.isArray || + function (t) { + return 'Array' == n(t); + }; + }, + function (t, e, r) { + var n, + i = r(11), + a = r(280), + s = r(104), + o = r(73), + h = r(155), + l = r(100), + c = r(101), + u = c('IE_PROTO'), + f = function () {}, + p = function (t) { + return ''; + }, + d = function (t) { + t.write(p('')), t.close(); + var e = t.parentWindow.Object; + return (t = null), e; + }, + m = function () { + try { + n = new ActiveXObject('htmlfile'); + } catch (t) {} + var t, e; + m = + 'undefined' != typeof document + ? document.domain && n + ? d(n) + : (((e = l('iframe')).style.display = 'none'), + h.appendChild(e), + (e.src = String('javascript:')), + (t = e.contentWindow.document).open(), + t.write(p('document.F=Object')), + t.close(), + t.F) + : d(n); + for (var r = s.length; r--; ) delete m.prototype[s[r]]; + return m(); + }; + (o[u] = !0), + (t.exports = + Object.create || + function (t, e) { + var r; + return ( + null !== t + ? ((f.prototype = i(t)), (r = new f()), (f.prototype = null), (r[u] = t)) + : (r = m()), + void 0 === e ? r : a(r, e) + ); + }); + }, + function (t, e) { + function r(t) { + return (r = + 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator + ? function (t) { + return typeof t; + } + : function (t) { + return t && + 'function' == typeof Symbol && + t.constructor === Symbol && + t !== Symbol.prototype + ? 'symbol' + : typeof t; + })(t); + } + function n(e) { + return ( + 'function' == typeof Symbol && 'symbol' === r(Symbol.iterator) + ? (t.exports = n = + function (t) { + return r(t); + }) + : (t.exports = n = + function (t) { + return t && + 'function' == typeof Symbol && + t.constructor === Symbol && + t !== Symbol.prototype + ? 'symbol' + : r(t); + }), + n(e) + ); + } + t.exports = n; + }, + function (t, e) { + t.exports = function (t, e, r) { + return ( + e in t + ? Object.defineProperty(t, e, { + value: r, + enumerable: !0, + configurable: !0, + writable: !0, + }) + : (t[e] = r), + t + ); + }; + }, + function (t, e, r) { + var n = r(47), + i = r(209), + a = r(210), + s = '[object Null]', + o = '[object Undefined]', + h = n ? n.toStringTag : void 0; + t.exports = function (t) { + return null == t ? (void 0 === t ? o : s) : h && h in Object(t) ? i(t) : a(t); + }; + }, + function (t, e, r) { + var n = r(128), + i = r(86); + t.exports = function (t) { + return null != t && i(t.length) && !n(t); + }; + }, + function (t, e, r) { + var n = r(0), + i = r(2), + a = r(9), + s = r(49), + o = n.Object, + h = i(''.split); + t.exports = a(function () { + return !o('z').propertyIsEnumerable(0); + }) + ? function (t) { + return 'String' == s(t) ? h(t, '') : o(t); + } + : o; + }, + function (t, e, r) { + var n, + i, + a, + s = r(271), + o = r(0), + h = r(2), + l = r(12), + c = r(71), + u = r(16), + f = r(70), + p = r(101), + d = r(73), + m = o.TypeError, + v = o.WeakMap; + if (s || f.state) { + var y = f.state || (f.state = new v()), + g = h(y.get), + E = h(y.has), + b = h(y.set); + (n = function (t, e) { + if (E(y, t)) throw new m('Object already initialized'); + return (e.facade = t), b(y, t, e), e; + }), + (i = function (t) { + return g(y, t) || {}; + }), + (a = function (t) { + return E(y, t); + }); + } else { + var _ = p('state'); + (d[_] = !0), + (n = function (t, e) { + if (u(t, _)) throw new m('Object already initialized'); + return (e.facade = t), c(t, _, e), e; + }), + (i = function (t) { + return u(t, _) ? t[_] : {}; + }), + (a = function (t) { + return u(t, _); + }); + } + t.exports = { + set: n, + get: i, + has: a, + enforce: function (t) { + return a(t) ? i(t) : n(t, {}); + }, + getterFor: function (t) { + return function (e) { + var r; + if (!l(e) || (r = i(e)).type !== t) throw m('Incompatible receiver, ' + t + ' required'); + return r; + }; + }, + }; + }, + function (t, e, r) { + var n = r(2), + i = r(9), + a = r(5), + s = r(74), + o = r(15), + h = r(72), + l = function () {}, + c = [], + u = o('Reflect', 'construct'), + f = /^\s*(?:class|function)\b/, + p = n(f.exec), + d = !f.exec(l), + m = function (t) { + if (!a(t)) return !1; + try { + return u(l, c, t), !0; + } catch (t) { + return !1; + } + }; + t.exports = + !u || + i(function () { + var t; + return ( + m(m.call) || + !m(Object) || + !m(function () { + t = !0; + }) || + t + ); + }) + ? function (t) { + if (!a(t)) return !1; + switch (s(t)) { + case 'AsyncFunction': + case 'GeneratorFunction': + case 'AsyncGeneratorFunction': + return !1; + } + return d || !!p(f, h(t)); + } + : m; + }, + function (t, e, r) { + var n = r(156); + t.exports = function (t, e) { + return new (n(t))(0 === e ? 0 : e); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(56); + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.IX2VanillaUtils = + e.IX2VanillaPlugins = + e.IX2ElementsReducer = + e.IX2EasingUtils = + e.IX2Easings = + e.IX2BrowserSupport = + void 0); + var i = n(r(119)); + e.IX2BrowserSupport = i; + var a = n(r(177)); + e.IX2Easings = a; + var s = n(r(179)); + e.IX2EasingUtils = s; + var o = n(r(397)); + e.IX2ElementsReducer = o; + var h = n(r(181)); + e.IX2VanillaPlugins = h; + var l = n(r(399)); + e.IX2VanillaUtils = l; + }, + function (t, e) { + function r() { + return ( + (t.exports = r = + Object.assign || + function (t) { + for (var e = 1; e < arguments.length; e++) { + var r = arguments[e]; + for (var n in r) Object.prototype.hasOwnProperty.call(r, n) && (t[n] = r[n]); + } + return t; + }), + r.apply(this, arguments) + ); + } + t.exports = r; + }, + function (t, e, r) { + var n = r(18).Symbol; + t.exports = n; + }, + function (t, e, r) { + var n = r(66), + i = 1 / 0; + t.exports = function (t) { + if ('string' == typeof t || n(t)) return t; + var e = t + ''; + return '0' == e && 1 / t == -i ? '-0' : e; + }; + }, + function (t, e, r) { + var n = r(2), + i = n({}.toString), + a = n(''.slice); + t.exports = function (t) { + return a(i(t), 8, -1); + }; + }, + function (t, e) { + t.exports = !1; + }, + function (t, e, r) { + var n = r(34), + i = Math.max, + a = Math.min; + t.exports = function (t, e) { + var r = n(t); + return r < 0 ? i(r + e, 0) : a(r, e); + }; + }, + function (t, e) { + t.exports = {}; + }, + function (t, e, r) { + 'use strict'; + var n = r(68), + i = r(17), + a = r(67); + t.exports = function (t, e, r) { + var s = n(e); + s in t ? i.f(t, s, a(0, r)) : (t[s] = r); + }; + }, + function (t, e, r) { + var n = r(9), + i = r(6), + a = r(31), + s = i('species'); + t.exports = function (t) { + return ( + a >= 51 || + !n(function () { + var e = []; + return ( + ((e.constructor = {})[s] = function () { + return { foo: 1 }; + }), + 1 !== e[t](Boolean).foo + ); + }) + ); + }; + }, + function (t, e, r) { + var n = r(49), + i = r(0); + t.exports = 'process' == n(i.process); + }, + function (t, e) { + t.exports = function (t) { + if (t && t.__esModule) return t; + var e = {}; + if (null != t) + for (var r in t) + if (Object.prototype.hasOwnProperty.call(t, r)) { + var n = + Object.defineProperty && Object.getOwnPropertyDescriptor + ? Object.getOwnPropertyDescriptor(t, r) + : {}; + n.get || n.set ? Object.defineProperty(e, r, n) : (e[r] = t[r]); + } + return (e.default = t), e; + }; + }, + function (t, e, r) { + 'use strict'; + Object.defineProperty(e, '__esModule', { value: !0 }); + var n = + 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator + ? function (t) { + return typeof t; + } + : function (t) { + return t && + 'function' == typeof Symbol && + t.constructor === Symbol && + t !== Symbol.prototype + ? 'symbol' + : typeof t; + }; + (e.clone = h), + (e.addLast = u), + (e.addFirst = f), + (e.removeLast = p), + (e.removeFirst = d), + (e.insert = m), + (e.removeAt = v), + (e.replaceAt = y), + (e.getIn = g), + (e.set = E), + (e.setIn = b), + (e.update = _), + (e.updateIn = x), + (e.merge = S), + (e.mergeDeep = T), + (e.mergeIn = A), + (e.omit = I), + (e.addDefaults = P); + /*! + * Timm + * + * Immutability helpers with fast reads and acceptable writes. + * + * @copyright Guillermo Grau Panea 2016 + * @license MIT + */ + var i = 'INVALID_ARGS'; + function a(t) { + throw new Error(t); + } + function s(t) { + var e = Object.keys(t); + return Object.getOwnPropertySymbols ? e.concat(Object.getOwnPropertySymbols(t)) : e; + } + var o = {}.hasOwnProperty; + function h(t) { + if (Array.isArray(t)) return t.slice(); + for (var e = s(t), r = {}, n = 0; n < e.length; n++) { + var i = e[n]; + r[i] = t[i]; + } + return r; + } + function l(t, e, r) { + var n = r; + null == n && a(i); + for (var o = !1, u = arguments.length, f = Array(u > 3 ? u - 3 : 0), p = 3; p < u; p++) + f[p - 3] = arguments[p]; + for (var d = 0; d < f.length; d++) { + var m = f[d]; + if (null != m) { + var v = s(m); + if (v.length) + for (var y = 0; y <= v.length; y++) { + var g = v[y]; + if (!t || void 0 === n[g]) { + var E = m[g]; + e && c(n[g]) && c(E) && (E = l(t, e, n[g], E)), + void 0 !== E && E !== n[g] && (o || ((o = !0), (n = h(n))), (n[g] = E)); + } + } + } + } + return n; + } + function c(t) { + var e = void 0 === t ? 'undefined' : n(t); + return null != t && ('object' === e || 'function' === e); + } + function u(t, e) { + return Array.isArray(e) ? t.concat(e) : t.concat([e]); + } + function f(t, e) { + return Array.isArray(e) ? e.concat(t) : [e].concat(t); + } + function p(t) { + return t.length ? t.slice(0, t.length - 1) : t; + } + function d(t) { + return t.length ? t.slice(1) : t; + } + function m(t, e, r) { + return t + .slice(0, e) + .concat(Array.isArray(r) ? r : [r]) + .concat(t.slice(e)); + } + function v(t, e) { + return e >= t.length || e < 0 ? t : t.slice(0, e).concat(t.slice(e + 1)); + } + function y(t, e, r) { + if (t[e] === r) return t; + for (var n = t.length, i = Array(n), a = 0; a < n; a++) i[a] = t[a]; + return (i[e] = r), i; + } + function g(t, e) { + if ((!Array.isArray(e) && a(i), null != t)) { + for (var r = t, n = 0; n < e.length; n++) { + var s = e[n]; + if (void 0 === (r = null != r ? r[s] : void 0)) return r; + } + return r; + } + } + function E(t, e, r) { + var n = null == t ? ('number' == typeof e ? [] : {}) : t; + if (n[e] === r) return n; + var i = h(n); + return (i[e] = r), i; + } + function b(t, e, r) { + return e.length + ? (function t(e, r, n, i) { + var a = void 0, + s = r[i]; + a = + i === r.length - 1 + ? n + : t(c(e) && c(e[s]) ? e[s] : 'number' == typeof r[i + 1] ? [] : {}, r, n, i + 1); + return E(e, s, a); + })(t, e, r, 0) + : r; + } + function _(t, e, r) { + return E(t, e, r(null == t ? void 0 : t[e])); + } + function x(t, e, r) { + return b(t, e, r(g(t, e))); + } + function S(t, e, r, n, i, a) { + for (var s = arguments.length, o = Array(s > 6 ? s - 6 : 0), h = 6; h < s; h++) + o[h - 6] = arguments[h]; + return o.length + ? l.call.apply(l, [null, !1, !1, t, e, r, n, i, a].concat(o)) + : l(!1, !1, t, e, r, n, i, a); + } + function T(t, e, r, n, i, a) { + for (var s = arguments.length, o = Array(s > 6 ? s - 6 : 0), h = 6; h < s; h++) + o[h - 6] = arguments[h]; + return o.length + ? l.call.apply(l, [null, !1, !0, t, e, r, n, i, a].concat(o)) + : l(!1, !0, t, e, r, n, i, a); + } + function A(t, e, r, n, i, a, s) { + var o = g(t, e); + null == o && (o = {}); + for (var h = arguments.length, c = Array(h > 7 ? h - 7 : 0), u = 7; u < h; u++) + c[u - 7] = arguments[u]; + return b( + t, + e, + c.length + ? l.call.apply(l, [null, !1, !1, o, r, n, i, a, s].concat(c)) + : l(!1, !1, o, r, n, i, a, s), + ); + } + function I(t, e) { + for (var r = Array.isArray(e) ? e : [e], n = !1, i = 0; i < r.length; i++) + if (o.call(t, r[i])) { + n = !0; + break; + } + if (!n) return t; + for (var a = {}, h = s(t), l = 0; l < h.length; l++) { + var c = h[l]; + r.indexOf(c) >= 0 || (a[c] = t[c]); + } + return a; + } + function P(t, e, r, n, i, a) { + for (var s = arguments.length, o = Array(s > 6 ? s - 6 : 0), h = 6; h < s; h++) + o[h - 6] = arguments[h]; + return o.length + ? l.call.apply(l, [null, !0, !1, t, e, r, n, i, a].concat(o)) + : l(!0, !1, t, e, r, n, i, a); + } + var w = { + clone: h, + addLast: u, + addFirst: f, + removeLast: p, + removeFirst: d, + insert: m, + removeAt: v, + replaceAt: y, + getIn: g, + set: E, + setIn: b, + update: _, + updateIn: x, + merge: S, + mergeDeep: T, + mergeIn: A, + omit: I, + addDefaults: P, + }; + e.default = w; + }, + function (t, e, r) { + var n = r(198), + i = r(199), + a = r(200), + s = r(201), + o = r(202); + function h(t) { + var e = -1, + r = null == t ? 0 : t.length; + for (this.clear(); ++e < r; ) { + var n = t[e]; + this.set(n[0], n[1]); + } + } + (h.prototype.clear = n), + (h.prototype.delete = i), + (h.prototype.get = a), + (h.prototype.has = s), + (h.prototype.set = o), + (t.exports = h); + }, + function (t, e, r) { + var n = r(79); + t.exports = function (t, e) { + for (var r = t.length; r--; ) if (n(t[r][0], e)) return r; + return -1; + }; + }, + function (t, e) { + var r; + r = (function () { + return this; + })(); + try { + r = r || new Function('return this')(); + } catch (t) { + 'object' == typeof window && (r = window); + } + t.exports = r; + }, + function (t, e, r) { + var n = r(29)(Object, 'create'); + t.exports = n; + }, + function (t, e, r) { + var n = r(222); + t.exports = function (t, e) { + var r = t.__data__; + return n(e) ? r['string' == typeof e ? 'string' : 'hash'] : r.map; + }; + }, + function (t, e, r) { + var n = r(136), + i = r(87), + a = r(40); + t.exports = function (t) { + return a(t) ? n(t) : i(t); + }; + }, + function (t, e, r) { + var n = r(240), + i = r(30), + a = Object.prototype, + s = a.hasOwnProperty, + o = a.propertyIsEnumerable, + h = n( + (function () { + return arguments; + })(), + ) + ? n + : function (t) { + return i(t) && s.call(t, 'callee') && !o.call(t, 'callee'); + }; + t.exports = h; + }, + function (t, e, r) { + var n = r(10), + i = r(92), + a = r(251), + s = r(254); + t.exports = function (t, e) { + return n(t) ? t : i(t, e) ? [t] : a(s(t)); + }; + }, + function (t, e, r) { + var n = r(39), + i = r(30), + a = '[object Symbol]'; + t.exports = function (t) { + return 'symbol' == typeof t || (i(t) && n(t) == a); + }; + }, + function (t, e) { + t.exports = function (t, e) { + return { enumerable: !(1 & t), configurable: !(2 & t), writable: !(4 & t), value: e }; + }; + }, + function (t, e, r) { + var n = r(269), + i = r(145); + t.exports = function (t) { + var e = n(t, 'string'); + return i(e) ? e : e + ''; + }; + }, + function (t, e, r) { + var n = r(0).String; + t.exports = function (t) { + try { + return n(t); + } catch (t) { + return 'Object'; + } + }; + }, + function (t, e, r) { + var n = r(0), + i = r(98), + a = n['__core-js_shared__'] || i('__core-js_shared__', {}); + t.exports = a; + }, + function (t, e, r) { + var n = r(19), + i = r(17), + a = r(67); + t.exports = n + ? function (t, e, r) { + return i.f(t, e, a(1, r)); + } + : function (t, e, r) { + return (t[e] = r), t; + }; + }, + function (t, e, r) { + var n = r(2), + i = r(5), + a = r(70), + s = n(Function.toString); + i(a.inspectSource) || + (a.inspectSource = function (t) { + return s(t); + }), + (t.exports = a.inspectSource); + }, + function (t, e) { + t.exports = {}; + }, + function (t, e, r) { + var n = r(0), + i = r(106), + a = r(5), + s = r(49), + o = r(6)('toStringTag'), + h = n.Object, + l = + 'Arguments' == + s( + (function () { + return arguments; + })(), + ); + t.exports = i + ? s + : function (t) { + var e, r, n; + return void 0 === t + ? 'Undefined' + : null === t + ? 'Null' + : 'string' == + typeof (r = (function (t, e) { + try { + return t[e]; + } catch (t) {} + })((e = h(t)), o)) + ? r + : l + ? s(e) + : 'Object' == (n = s(e)) && a(e.callee) + ? 'Arguments' + : n; + }; + }, + function (t, e, r) { + var n = r(0), + i = r(14), + a = r(20), + s = r(11), + o = r(69), + h = r(76), + l = n.TypeError; + t.exports = function (t, e) { + var r = arguments.length < 2 ? h(t) : e; + if (a(r)) return s(i(r, t)); + throw l(o(t) + ' is not iterable'); + }; + }, + function (t, e, r) { + var n = r(74), + i = r(33), + a = r(52), + s = r(6)('iterator'); + t.exports = function (t) { + if (null != t) return i(t, s) || i(t, '@@iterator') || a[n(t)]; + }; + }, + function (t, e, r) { + var n = r(17).f, + i = r(16), + a = r(6)('toStringTag'); + t.exports = function (t, e, r) { + t && !i((t = r ? t : t.prototype), a) && n(t, a, { configurable: !0, value: e }); + }; + }, + function (t, e, r) { + var n = r(2); + t.exports = n([].slice); + }, + function (t, e) { + t.exports = function (t, e) { + return t === e || (t != t && e != e); + }; + }, + function (t, e, r) { + var n = r(29)(r(18), 'Map'); + t.exports = n; + }, + function (t, e, r) { + var n = r(214), + i = r(221), + a = r(223), + s = r(224), + o = r(225); + function h(t) { + var e = -1, + r = null == t ? 0 : t.length; + for (this.clear(); ++e < r; ) { + var n = t[e]; + this.set(n[0], n[1]); + } + } + (h.prototype.clear = n), + (h.prototype.delete = i), + (h.prototype.get = a), + (h.prototype.has = s), + (h.prototype.set = o), + (t.exports = h); + }, + function (t, e) { + t.exports = function (t, e) { + for (var r = -1, n = e.length, i = t.length; ++r < n; ) t[i + r] = e[r]; + return t; + }; + }, + function (t, e, r) { + (function (t) { + var n = r(18), + i = r(241), + a = e && !e.nodeType && e, + s = a && 'object' == typeof t && t && !t.nodeType && t, + o = s && s.exports === a ? n.Buffer : void 0, + h = (o ? o.isBuffer : void 0) || i; + t.exports = h; + }).call(this, r(137)(t)); + }, + function (t, e) { + var r = 9007199254740991, + n = /^(?:0|[1-9]\d*)$/; + t.exports = function (t, e) { + var i = typeof t; + return ( + !!(e = null == e ? r : e) && + ('number' == i || ('symbol' != i && n.test(t))) && + t > -1 && + t % 1 == 0 && + t < e + ); + }; + }, + function (t, e, r) { + var n = r(242), + i = r(243), + a = r(244), + s = a && a.isTypedArray, + o = s ? i(s) : n; + t.exports = o; + }, + function (t, e) { + var r = 9007199254740991; + t.exports = function (t) { + return 'number' == typeof t && t > -1 && t % 1 == 0 && t <= r; + }; + }, + function (t, e, r) { + var n = r(88), + i = r(245), + a = Object.prototype.hasOwnProperty; + t.exports = function (t) { + if (!n(t)) return i(t); + var e = []; + for (var r in Object(t)) a.call(t, r) && 'constructor' != r && e.push(r); + return e; + }; + }, + function (t, e) { + var r = Object.prototype; + t.exports = function (t) { + var e = t && t.constructor; + return t === (('function' == typeof e && e.prototype) || r); + }; + }, + function (t, e, r) { + var n = r(246), + i = r(80), + a = r(247), + s = r(248), + o = r(139), + h = r(39), + l = r(130), + c = l(n), + u = l(i), + f = l(a), + p = l(s), + d = l(o), + m = h; + ((n && '[object DataView]' != m(new n(new ArrayBuffer(1)))) || + (i && '[object Map]' != m(new i())) || + (a && '[object Promise]' != m(a.resolve())) || + (s && '[object Set]' != m(new s())) || + (o && '[object WeakMap]' != m(new o()))) && + (m = function (t) { + var e = h(t), + r = '[object Object]' == e ? t.constructor : void 0, + n = r ? l(r) : ''; + if (n) + switch (n) { + case c: + return '[object DataView]'; + case u: + return '[object Map]'; + case f: + return '[object Promise]'; + case p: + return '[object Set]'; + case d: + return '[object WeakMap]'; + } + return e; + }), + (t.exports = m); + }, + function (t, e, r) { + var n = r(91); + t.exports = function (t, e, r) { + var i = null == t ? void 0 : n(t, e); + return void 0 === i ? r : i; + }; + }, + function (t, e, r) { + var n = r(65), + i = r(48); + t.exports = function (t, e) { + for (var r = 0, a = (e = n(e, t)).length; null != t && r < a; ) t = t[i(e[r++])]; + return r && r == a ? t : void 0; + }; + }, + function (t, e, r) { + var n = r(10), + i = r(66), + a = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + s = /^\w*$/; + t.exports = function (t, e) { + if (n(t)) return !1; + var r = typeof t; + return ( + !('number' != r && 'symbol' != r && 'boolean' != r && null != t && !i(t)) || + s.test(t) || + !a.test(t) || + (null != e && t in Object(e)) + ); + }; + }, + function (t, e) { + t.exports = function (t) { + return t; + }; + }, + function (t, e, r) { + var n = r(262), + i = r(23), + a = r(66), + s = NaN, + o = /^[-+]0x[0-9a-f]+$/i, + h = /^0b[01]+$/i, + l = /^0o[0-7]+$/i, + c = parseInt; + t.exports = function (t) { + if ('number' == typeof t) return t; + if (a(t)) return s; + if (i(t)) { + var e = 'function' == typeof t.valueOf ? t.valueOf() : t; + t = i(e) ? e + '' : e; + } + if ('string' != typeof t) return 0 === t ? t : +t; + t = n(t); + var r = h.test(t); + return r || l.test(t) ? c(t.slice(2), r ? 2 : 8) : o.test(t) ? s : +t; + }; + }, + function (t, e, r) { + var n = r(19), + i = r(14), + a = r(268), + s = r(67), + o = r(24), + h = r(68), + l = r(16), + c = r(149), + u = Object.getOwnPropertyDescriptor; + e.f = n + ? u + : function (t, e) { + if (((t = o(t)), (e = h(e)), c)) + try { + return u(t, e); + } catch (t) {} + if (l(t, e)) return s(!i(a.f, t, e), t[e]); + }; + }, + function (t, e, r) { + var n = r(0).TypeError; + t.exports = function (t) { + if (null == t) throw n("Can't call method on " + t); + return t; + }; + }, + function (t, e, r) { + var n = r(2); + t.exports = n({}.isPrototypeOf); + }, + function (t, e, r) { + var n = r(0), + i = Object.defineProperty; + t.exports = function (t, e) { + try { + i(n, t, { value: e, configurable: !0, writable: !0 }); + } catch (r) { + n[t] = e; + } + return e; + }; + }, + function (t, e, r) { + var n = r(2), + i = 0, + a = Math.random(), + s = n((1).toString); + t.exports = function (t) { + return 'Symbol(' + (void 0 === t ? '' : t) + ')_' + s(++i + a, 36); + }; + }, + function (t, e, r) { + var n = r(0), + i = r(12), + a = n.document, + s = i(a) && i(a.createElement); + t.exports = function (t) { + return s ? a.createElement(t) : {}; + }; + }, + function (t, e, r) { + var n = r(148), + i = r(99), + a = n('keys'); + t.exports = function (t) { + return a[t] || (a[t] = i(t)); + }; + }, + function (t, e, r) { + var n = r(151), + i = r(104).concat('length', 'prototype'); + e.f = + Object.getOwnPropertyNames || + function (t) { + return n(t, i); + }; + }, + function (t, e, r) { + var n = r(24), + i = r(51), + a = r(4), + s = function (t) { + return function (e, r, s) { + var o, + h = n(e), + l = a(h), + c = i(s, l); + if (t && r != r) { + for (; l > c; ) if ((o = h[c++]) != o) return !0; + } else for (; l > c; c++) if ((t || c in h) && h[c] === r) return t || c || 0; + return !t && -1; + }; + }; + t.exports = { includes: s(!0), indexOf: s(!1) }; + }, + function (t, e) { + t.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf', + ]; + }, + function (t, e, r) { + var n = r(9), + i = r(5), + a = /#|\.prototype\./, + s = function (t, e) { + var r = h[o(t)]; + return r == c || (r != l && (i(e) ? n(e) : !!e)); + }, + o = (s.normalize = function (t) { + return String(t).replace(a, '.').toLowerCase(); + }), + h = (s.data = {}), + l = (s.NATIVE = 'N'), + c = (s.POLYFILL = 'P'); + t.exports = s; + }, + function (t, e, r) { + var n = {}; + (n[r(6)('toStringTag')] = 'z'), (t.exports = '[object z]' === String(n)); + }, + function (t, e, r) { + var n = r(6)('iterator'), + i = !1; + try { + var a = 0, + s = { + next: function () { + return { done: !!a++ }; + }, + return: function () { + i = !0; + }, + }; + (s[n] = function () { + return this; + }), + Array.from(s, function () { + throw 2; + }); + } catch (t) {} + t.exports = function (t, e) { + if (!e && !i) return !1; + var r = !1; + try { + var a = {}; + (a[n] = function () { + return { + next: function () { + return { done: (r = !0) }; + }, + }; + }), + t(a); + } catch (t) {} + return r; + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(14), + a = r(50), + s = r(150), + o = r(5), + h = r(297), + l = r(109), + c = r(110), + u = r(77), + f = r(71), + p = r(27), + d = r(6), + m = r(52), + v = r(159), + y = s.PROPER, + g = s.CONFIGURABLE, + E = v.IteratorPrototype, + b = v.BUGGY_SAFARI_ITERATORS, + _ = d('iterator'), + x = function () { + return this; + }; + t.exports = function (t, e, r, s, d, v, S) { + h(r, e, s); + var T, + A, + I, + P = function (t) { + if (t === d && O) return O; + if (!b && t in D) return D[t]; + switch (t) { + case 'keys': + case 'values': + case 'entries': + return function () { + return new r(this, t); + }; + } + return function () { + return new r(this); + }; + }, + w = e + ' Iterator', + C = !1, + D = t.prototype, + M = D[_] || D['@@iterator'] || (d && D[d]), + O = (!b && M) || P(d), + F = ('Array' == e && D.entries) || M; + if ( + (F && + (T = l(F.call(new t()))) !== Object.prototype && + T.next && + (a || l(T) === E || (c ? c(T, E) : o(T[_]) || p(T, _, x)), + u(T, w, !0, !0), + a && (m[w] = x)), + y && + 'values' == d && + M && + 'values' !== M.name && + (!a && g + ? f(D, 'name', 'values') + : ((C = !0), + (O = function () { + return i(M, this); + }))), + d) + ) + if (((A = { values: P('values'), keys: v ? O : P('keys'), entries: P('entries') }), S)) + for (I in A) (!b && !C && I in D) || p(D, I, A[I]); + else n({ target: e, proto: !0, forced: b || C }, A); + return (a && !S) || D[_] === O || p(D, _, O, { name: d }), (m[e] = O), A; + }; + }, + function (t, e, r) { + var n = r(0), + i = r(16), + a = r(5), + s = r(7), + o = r(101), + h = r(298), + l = o('IE_PROTO'), + c = n.Object, + u = c.prototype; + t.exports = h + ? c.getPrototypeOf + : function (t) { + var e = s(t); + if (i(e, l)) return e[l]; + var r = e.constructor; + return a(r) && e instanceof r ? r.prototype : e instanceof c ? u : null; + }; + }, + function (t, e, r) { + var n = r(2), + i = r(11), + a = r(299); + t.exports = + Object.setPrototypeOf || + ('__proto__' in {} + ? (function () { + var t, + e = !1, + r = {}; + try { + (t = n(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set))(r, []), + (e = r instanceof Array); + } catch (t) {} + return function (r, n) { + return i(r), a(n), e ? t(r, n) : (r.__proto__ = n), r; + }; + })() + : void 0); + }, + function (t, e) { + var r = Function.prototype, + n = r.apply, + i = r.bind, + a = r.call; + t.exports = + ('object' == typeof Reflect && Reflect.apply) || + (i + ? a.bind(n) + : function () { + return a.apply(n, arguments); + }); + }, + function (t, e, r) { + var n = r(0), + i = r(74), + a = n.String; + t.exports = function (t) { + if ('Symbol' === i(t)) throw TypeError('Cannot convert a Symbol value to a string'); + return a(t); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(15), + i = r(17), + a = r(6), + s = r(19), + o = a('species'); + t.exports = function (t) { + var e = n(t), + r = i.f; + s && + e && + !e[o] && + r(e, o, { + configurable: !0, + get: function () { + return this; + }, + }); + }; + }, + function (t, e, r) { + var n = r(0), + i = r(21), + a = r(14), + s = r(11), + o = r(69), + h = r(153), + l = r(4), + c = r(97), + u = r(75), + f = r(76), + p = r(152), + d = n.TypeError, + m = function (t, e) { + (this.stopped = t), (this.result = e); + }, + v = m.prototype; + t.exports = function (t, e, r) { + var n, + y, + g, + E, + b, + _, + x, + S = r && r.that, + T = !(!r || !r.AS_ENTRIES), + A = !(!r || !r.IS_ITERATOR), + I = !(!r || !r.INTERRUPTED), + P = i(e, S), + w = function (t) { + return n && p(n, 'normal', t), new m(!0, t); + }, + C = function (t) { + return T ? (s(t), I ? P(t[0], t[1], w) : P(t[0], t[1])) : I ? P(t, w) : P(t); + }; + if (A) n = t; + else { + if (!(y = f(t))) throw d(o(t) + ' is not iterable'); + if (h(y)) { + for (g = 0, E = l(t); E > g; g++) if ((b = C(t[g])) && c(v, b)) return b; + return new m(!1); + } + n = u(t, y); + } + for (_ = n.next; !(x = a(_, n)).done; ) { + try { + b = C(x.value); + } catch (t) { + p(n, 'throw', t); + } + if ('object' == typeof b && b && c(v, b)) return b; + } + return new m(!1); + }; + }, + function (t, e, r) { + var n = r(0), + i = r(97), + a = n.TypeError; + t.exports = function (t, e) { + if (i(e, t)) return t; + throw a('Incorrect invocation'); + }; + }, + function (t, e, r) { + var n = r(27); + t.exports = function (t, e, r) { + for (var i in e) n(t, i, e[i], r); + return t; + }; + }, + function (t, e, r) { + 'use strict'; + r.r(e), + r.d(e, 'ActionTypes', function () { + return a; + }), + r.d(e, 'default', function () { + return s; + }); + var n = r(168), + i = r(382), + a = { INIT: '@@redux/INIT' }; + function s(t, e, r) { + var o; + if (('function' == typeof e && void 0 === r && ((r = e), (e = void 0)), void 0 !== r)) { + if ('function' != typeof r) throw new Error('Expected the enhancer to be a function.'); + return r(s)(t, e); + } + if ('function' != typeof t) throw new Error('Expected the reducer to be a function.'); + var h = t, + l = e, + c = [], + u = c, + f = !1; + function p() { + u === c && (u = c.slice()); + } + function d() { + return l; + } + function m(t) { + if ('function' != typeof t) throw new Error('Expected listener to be a function.'); + var e = !0; + return ( + p(), + u.push(t), + function () { + if (e) { + (e = !1), p(); + var r = u.indexOf(t); + u.splice(r, 1); + } + } + ); + } + function v(t) { + if (!Object(n.default)(t)) + throw new Error( + 'Actions must be plain objects. Use custom middleware for async actions.', + ); + if (void 0 === t.type) + throw new Error( + 'Actions may not have an undefined "type" property. Have you misspelled a constant?', + ); + if (f) throw new Error('Reducers may not dispatch actions.'); + try { + (f = !0), (l = h(l, t)); + } finally { + f = !1; + } + for (var e = (c = u), r = 0; r < e.length; r++) e[r](); + return t; + } + return ( + v({ type: a.INIT }), + ((o = { + dispatch: v, + subscribe: m, + getState: d, + replaceReducer: function (t) { + if ('function' != typeof t) + throw new Error('Expected the nextReducer to be a function.'); + (h = t), v({ type: a.INIT }); + }, + })[i.default] = function () { + var t, + e = m; + return ( + ((t = { + subscribe: function (t) { + if ('object' != typeof t) + throw new TypeError('Expected the observer to be an object.'); + function r() { + t.next && t.next(d()); + } + return r(), { unsubscribe: e(r) }; + }, + })[i.default] = function () { + return this; + }), + t + ); + }), + o + ); + } + }, + function (t, e, r) { + 'use strict'; + function n() { + for (var t = arguments.length, e = Array(t), r = 0; r < t; r++) e[r] = arguments[r]; + if (0 === e.length) + return function (t) { + return t; + }; + if (1 === e.length) return e[0]; + var n = e[e.length - 1], + i = e.slice(0, -1); + return function () { + return i.reduceRight(function (t, e) { + return e(t); + }, n.apply(void 0, arguments)); + }; + } + r.r(e), + r.d(e, 'default', function () { + return n; + }); + }, + function (t, e, r) { + 'use strict'; + var n = r(3); + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.TRANSFORM_STYLE_PREFIXED = + e.TRANSFORM_PREFIXED = + e.FLEX_PREFIXED = + e.ELEMENT_MATCHES = + e.withBrowser = + e.IS_BROWSER_ENV = + void 0); + var i = n(r(175)), + a = 'undefined' != typeof window; + e.IS_BROWSER_ENV = a; + var s = function (t, e) { + return a ? t() : e; + }; + e.withBrowser = s; + var o = s(function () { + return (0, + i.default)(['matches', 'matchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector', 'webkitMatchesSelector'], function (t) { + return t in Element.prototype; + }); + }); + e.ELEMENT_MATCHES = o; + var h = s(function () { + var t = document.createElement('i'), + e = ['flex', '-webkit-flex', '-ms-flexbox', '-moz-box', '-webkit-box']; + try { + for (var r = e.length, n = 0; n < r; n++) { + var i = e[n]; + if (((t.style.display = i), t.style.display === i)) return i; + } + return ''; + } catch (t) { + return ''; + } + }, 'flex'); + e.FLEX_PREFIXED = h; + var l = s(function () { + var t = document.createElement('i'); + if (null == t.style.transform) + for (var e = ['Webkit', 'Moz', 'ms'], r = e.length, n = 0; n < r; n++) { + var i = e[n] + 'Transform'; + if (void 0 !== t.style[i]) return i; + } + return 'transform'; + }, 'transform'); + e.TRANSFORM_PREFIXED = l; + var c = l.split('transform')[0], + u = c ? c + 'TransformStyle' : 'transformStyle'; + e.TRANSFORM_STYLE_PREFIXED = u; + }, + function (t, e, r) { + 'use strict'; + var n = r(3); + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.mediaQueriesDefined = + e.viewportWidthChanged = + e.actionListPlaybackChanged = + e.elementStateChanged = + e.instanceRemoved = + e.instanceStarted = + e.instanceAdded = + e.parameterChanged = + e.animationFrameChanged = + e.eventStateChanged = + e.testFrameRendered = + e.eventListenerAdded = + e.clearRequested = + e.stopRequested = + e.playbackRequested = + e.previewRequested = + e.sessionStopped = + e.sessionStarted = + e.sessionInitialized = + e.rawDataImported = + void 0); + var i = n(r(46)), + a = r(13), + s = r(45), + o = a.IX2EngineActionTypes, + h = o.IX2_RAW_DATA_IMPORTED, + l = o.IX2_SESSION_INITIALIZED, + c = o.IX2_SESSION_STARTED, + u = o.IX2_SESSION_STOPPED, + f = o.IX2_PREVIEW_REQUESTED, + p = o.IX2_PLAYBACK_REQUESTED, + d = o.IX2_STOP_REQUESTED, + m = o.IX2_CLEAR_REQUESTED, + v = o.IX2_EVENT_LISTENER_ADDED, + y = o.IX2_TEST_FRAME_RENDERED, + g = o.IX2_EVENT_STATE_CHANGED, + E = o.IX2_ANIMATION_FRAME_CHANGED, + b = o.IX2_PARAMETER_CHANGED, + _ = o.IX2_INSTANCE_ADDED, + x = o.IX2_INSTANCE_STARTED, + S = o.IX2_INSTANCE_REMOVED, + T = o.IX2_ELEMENT_STATE_CHANGED, + A = o.IX2_ACTION_LIST_PLAYBACK_CHANGED, + I = o.IX2_VIEWPORT_WIDTH_CHANGED, + P = o.IX2_MEDIA_QUERIES_DEFINED, + w = s.IX2VanillaUtils.reifyState; + e.rawDataImported = function (t) { + return { type: h, payload: (0, i.default)({}, w(t)) }; + }; + e.sessionInitialized = function (t) { + var e = t.hasBoundaryNodes, + r = t.reducedMotion; + return { type: l, payload: { hasBoundaryNodes: e, reducedMotion: r } }; + }; + e.sessionStarted = function () { + return { type: c }; + }; + e.sessionStopped = function () { + return { type: u }; + }; + e.previewRequested = function (t) { + var e = t.rawData, + r = t.defer; + return { type: f, payload: { defer: r, rawData: e } }; + }; + e.playbackRequested = function (t) { + var e = t.actionTypeId, + r = void 0 === e ? a.ActionTypeConsts.GENERAL_START_ACTION : e, + n = t.actionListId, + i = t.actionItemId, + s = t.eventId, + o = t.allowEvents, + h = t.immediate, + l = t.testManual, + c = t.verbose, + u = t.rawData; + return { + type: p, + payload: { + actionTypeId: r, + actionListId: n, + actionItemId: i, + testManual: l, + eventId: s, + allowEvents: o, + immediate: h, + verbose: c, + rawData: u, + }, + }; + }; + e.stopRequested = function (t) { + return { type: d, payload: { actionListId: t } }; + }; + e.clearRequested = function () { + return { type: m }; + }; + e.eventListenerAdded = function (t, e) { + return { type: v, payload: { target: t, listenerParams: e } }; + }; + e.testFrameRendered = function () { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1; + return { type: y, payload: { step: t } }; + }; + e.eventStateChanged = function (t, e) { + return { type: g, payload: { stateKey: t, newState: e } }; + }; + e.animationFrameChanged = function (t, e) { + return { type: E, payload: { now: t, parameters: e } }; + }; + e.parameterChanged = function (t, e) { + return { type: b, payload: { key: t, value: e } }; + }; + e.instanceAdded = function (t) { + return { type: _, payload: (0, i.default)({}, t) }; + }; + e.instanceStarted = function (t, e) { + return { type: x, payload: { instanceId: t, time: e } }; + }; + e.instanceRemoved = function (t) { + return { type: S, payload: { instanceId: t } }; + }; + e.elementStateChanged = function (t, e, r, n) { + return { type: T, payload: { elementId: t, actionTypeId: e, current: r, actionItem: n } }; + }; + e.actionListPlaybackChanged = function (t) { + var e = t.actionListId, + r = t.isPlaying; + return { type: A, payload: { actionListId: e, isPlaying: r } }; + }; + e.viewportWidthChanged = function (t) { + var e = t.width, + r = t.mediaQueries; + return { type: I, payload: { width: e, mediaQueries: r } }; + }; + e.mediaQueriesDefined = function () { + return { type: P }; + }; + }, + function (t, e, r) { + var n = r(187), + i = r(122); + function a(t, e) { + (this.__wrapped__ = t), + (this.__actions__ = []), + (this.__chain__ = !!e), + (this.__index__ = 0), + (this.__values__ = void 0); + } + (a.prototype = n(i.prototype)), (a.prototype.constructor = a), (t.exports = a); + }, + function (t, e) { + t.exports = function () {}; + }, + function (t, e, r) { + var n = r(187), + i = r(122), + a = 4294967295; + function s(t) { + (this.__wrapped__ = t), + (this.__actions__ = []), + (this.__dir__ = 1), + (this.__filtered__ = !1), + (this.__iteratees__ = []), + (this.__takeCount__ = a), + (this.__views__ = []); + } + (s.prototype = n(i.prototype)), (s.prototype.constructor = s), (t.exports = s); + }, + function (t, e, r) { + 'use strict'; + var n = r(3)(r(37)); + window.tram = (function (t) { + function e(t, e) { + return new N.Bare().init(t, e); + } + function r(t) { + return t.replace(/[A-Z]/g, function (t) { + return '-' + t.toLowerCase(); + }); + } + function i(t) { + var e = parseInt(t.slice(1), 16); + return [(e >> 16) & 255, (e >> 8) & 255, 255 & e]; + } + function a(t, e, r) { + return '#' + ((1 << 24) | (t << 16) | (e << 8) | r).toString(16).slice(1); + } + function s() {} + function o(t, e, r) { + l('Units do not match [' + t + ']: ' + e + ', ' + r); + } + function h(t, e, r) { + if ((void 0 !== e && (r = e), void 0 === t)) return r; + var n = r; + return ( + $.test(t) || !Z.test(t) ? (n = parseInt(t, 10)) : Z.test(t) && (n = 1e3 * parseFloat(t)), + 0 > n && (n = 0), + n == n ? n : r + ); + } + function l(t) { + W.debug && window && window.console.warn(t); + } + var c = (function (t, e, r) { + function i(t) { + return 'object' == (0, n.default)(t); + } + function a(t) { + return 'function' == typeof t; + } + function s() {} + return function n(o, h) { + function l() { + var t = new c(); + return a(t.init) && t.init.apply(t, arguments), t; + } + function c() {} + h === r && ((h = o), (o = Object)), (l.Bare = c); + var u, + f = (s[t] = o[t]), + p = (c[t] = l[t] = new s()); + return ( + (p.constructor = l), + (l.mixin = function (e) { + return (c[t] = l[t] = n(l, e)[t]), l; + }), + (l.open = function (t) { + if (((u = {}), a(t) ? (u = t.call(l, p, f, l, o)) : i(t) && (u = t), i(u))) + for (var r in u) e.call(u, r) && (p[r] = u[r]); + return a(p.init) || (p.init = o), l; + }), + l.open(h) + ); + }; + })('prototype', {}.hasOwnProperty), + u = { + ease: [ + 'ease', + function (t, e, r, n) { + var i = (t /= n) * t, + a = i * t; + return e + r * (-2.75 * a * i + 11 * i * i + -15.5 * a + 8 * i + 0.25 * t); + }, + ], + 'ease-in': [ + 'ease-in', + function (t, e, r, n) { + var i = (t /= n) * t, + a = i * t; + return e + r * (-1 * a * i + 3 * i * i + -3 * a + 2 * i); + }, + ], + 'ease-out': [ + 'ease-out', + function (t, e, r, n) { + var i = (t /= n) * t, + a = i * t; + return e + r * (0.3 * a * i + -1.6 * i * i + 2.2 * a + -1.8 * i + 1.9 * t); + }, + ], + 'ease-in-out': [ + 'ease-in-out', + function (t, e, r, n) { + var i = (t /= n) * t, + a = i * t; + return e + r * (2 * a * i + -5 * i * i + 2 * a + 2 * i); + }, + ], + linear: [ + 'linear', + function (t, e, r, n) { + return (r * t) / n + e; + }, + ], + 'ease-in-quad': [ + 'cubic-bezier(0.550, 0.085, 0.680, 0.530)', + function (t, e, r, n) { + return r * (t /= n) * t + e; + }, + ], + 'ease-out-quad': [ + 'cubic-bezier(0.250, 0.460, 0.450, 0.940)', + function (t, e, r, n) { + return -r * (t /= n) * (t - 2) + e; + }, + ], + 'ease-in-out-quad': [ + 'cubic-bezier(0.455, 0.030, 0.515, 0.955)', + function (t, e, r, n) { + return (t /= n / 2) < 1 ? (r / 2) * t * t + e : (-r / 2) * (--t * (t - 2) - 1) + e; + }, + ], + 'ease-in-cubic': [ + 'cubic-bezier(0.550, 0.055, 0.675, 0.190)', + function (t, e, r, n) { + return r * (t /= n) * t * t + e; + }, + ], + 'ease-out-cubic': [ + 'cubic-bezier(0.215, 0.610, 0.355, 1)', + function (t, e, r, n) { + return r * ((t = t / n - 1) * t * t + 1) + e; + }, + ], + 'ease-in-out-cubic': [ + 'cubic-bezier(0.645, 0.045, 0.355, 1)', + function (t, e, r, n) { + return (t /= n / 2) < 1 + ? (r / 2) * t * t * t + e + : (r / 2) * ((t -= 2) * t * t + 2) + e; + }, + ], + 'ease-in-quart': [ + 'cubic-bezier(0.895, 0.030, 0.685, 0.220)', + function (t, e, r, n) { + return r * (t /= n) * t * t * t + e; + }, + ], + 'ease-out-quart': [ + 'cubic-bezier(0.165, 0.840, 0.440, 1)', + function (t, e, r, n) { + return -r * ((t = t / n - 1) * t * t * t - 1) + e; + }, + ], + 'ease-in-out-quart': [ + 'cubic-bezier(0.770, 0, 0.175, 1)', + function (t, e, r, n) { + return (t /= n / 2) < 1 + ? (r / 2) * t * t * t * t + e + : (-r / 2) * ((t -= 2) * t * t * t - 2) + e; + }, + ], + 'ease-in-quint': [ + 'cubic-bezier(0.755, 0.050, 0.855, 0.060)', + function (t, e, r, n) { + return r * (t /= n) * t * t * t * t + e; + }, + ], + 'ease-out-quint': [ + 'cubic-bezier(0.230, 1, 0.320, 1)', + function (t, e, r, n) { + return r * ((t = t / n - 1) * t * t * t * t + 1) + e; + }, + ], + 'ease-in-out-quint': [ + 'cubic-bezier(0.860, 0, 0.070, 1)', + function (t, e, r, n) { + return (t /= n / 2) < 1 + ? (r / 2) * t * t * t * t * t + e + : (r / 2) * ((t -= 2) * t * t * t * t + 2) + e; + }, + ], + 'ease-in-sine': [ + 'cubic-bezier(0.470, 0, 0.745, 0.715)', + function (t, e, r, n) { + return -r * Math.cos((t / n) * (Math.PI / 2)) + r + e; + }, + ], + 'ease-out-sine': [ + 'cubic-bezier(0.390, 0.575, 0.565, 1)', + function (t, e, r, n) { + return r * Math.sin((t / n) * (Math.PI / 2)) + e; + }, + ], + 'ease-in-out-sine': [ + 'cubic-bezier(0.445, 0.050, 0.550, 0.950)', + function (t, e, r, n) { + return (-r / 2) * (Math.cos((Math.PI * t) / n) - 1) + e; + }, + ], + 'ease-in-expo': [ + 'cubic-bezier(0.950, 0.050, 0.795, 0.035)', + function (t, e, r, n) { + return 0 === t ? e : r * Math.pow(2, 10 * (t / n - 1)) + e; + }, + ], + 'ease-out-expo': [ + 'cubic-bezier(0.190, 1, 0.220, 1)', + function (t, e, r, n) { + return t === n ? e + r : r * (1 - Math.pow(2, (-10 * t) / n)) + e; + }, + ], + 'ease-in-out-expo': [ + 'cubic-bezier(1, 0, 0, 1)', + function (t, e, r, n) { + return 0 === t + ? e + : t === n + ? e + r + : (t /= n / 2) < 1 + ? (r / 2) * Math.pow(2, 10 * (t - 1)) + e + : (r / 2) * (2 - Math.pow(2, -10 * --t)) + e; + }, + ], + 'ease-in-circ': [ + 'cubic-bezier(0.600, 0.040, 0.980, 0.335)', + function (t, e, r, n) { + return -r * (Math.sqrt(1 - (t /= n) * t) - 1) + e; + }, + ], + 'ease-out-circ': [ + 'cubic-bezier(0.075, 0.820, 0.165, 1)', + function (t, e, r, n) { + return r * Math.sqrt(1 - (t = t / n - 1) * t) + e; + }, + ], + 'ease-in-out-circ': [ + 'cubic-bezier(0.785, 0.135, 0.150, 0.860)', + function (t, e, r, n) { + return (t /= n / 2) < 1 + ? (-r / 2) * (Math.sqrt(1 - t * t) - 1) + e + : (r / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + e; + }, + ], + 'ease-in-back': [ + 'cubic-bezier(0.600, -0.280, 0.735, 0.045)', + function (t, e, r, n, i) { + return void 0 === i && (i = 1.70158), r * (t /= n) * t * ((i + 1) * t - i) + e; + }, + ], + 'ease-out-back': [ + 'cubic-bezier(0.175, 0.885, 0.320, 1.275)', + function (t, e, r, n, i) { + return ( + void 0 === i && (i = 1.70158), r * ((t = t / n - 1) * t * ((i + 1) * t + i) + 1) + e + ); + }, + ], + 'ease-in-out-back': [ + 'cubic-bezier(0.680, -0.550, 0.265, 1.550)', + function (t, e, r, n, i) { + return ( + void 0 === i && (i = 1.70158), + (t /= n / 2) < 1 + ? (r / 2) * t * t * ((1 + (i *= 1.525)) * t - i) + e + : (r / 2) * ((t -= 2) * t * ((1 + (i *= 1.525)) * t + i) + 2) + e + ); + }, + ], + }, + f = { + 'ease-in-back': 'cubic-bezier(0.600, 0, 0.735, 0.045)', + 'ease-out-back': 'cubic-bezier(0.175, 0.885, 0.320, 1)', + 'ease-in-out-back': 'cubic-bezier(0.680, 0, 0.265, 1)', + }, + p = document, + d = window, + m = 'bkwld-tram', + v = /[\-\.0-9]/g, + y = /[A-Z]/, + g = 'number', + E = /^(rgb|#)/, + b = /(em|cm|mm|in|pt|pc|px)$/, + _ = /(em|cm|mm|in|pt|pc|px|%)$/, + x = /(deg|rad|turn)$/, + S = 'unitless', + T = /(all|none) 0s ease 0s/, + A = /^(width|height)$/, + I = ' ', + P = p.createElement('a'), + w = ['Webkit', 'Moz', 'O', 'ms'], + C = ['-webkit-', '-moz-', '-o-', '-ms-'], + D = function (t) { + if (t in P.style) return { dom: t, css: t }; + var e, + r, + n = '', + i = t.split('-'); + for (e = 0; e < i.length; e++) n += i[e].charAt(0).toUpperCase() + i[e].slice(1); + for (e = 0; e < w.length; e++) + if ((r = w[e] + n) in P.style) return { dom: r, css: C[e] + t }; + }, + M = (e.support = { + bind: Function.prototype.bind, + transform: D('transform'), + transition: D('transition'), + backface: D('backface-visibility'), + timing: D('transition-timing-function'), + }); + if (M.transition) { + var O = M.timing.dom; + if (((P.style[O] = u['ease-in-back'][0]), !P.style[O])) for (var F in f) u[F][0] = f[F]; + } + var k = (e.frame = (function () { + var t = + d.requestAnimationFrame || + d.webkitRequestAnimationFrame || + d.mozRequestAnimationFrame || + d.oRequestAnimationFrame || + d.msRequestAnimationFrame; + return t && M.bind + ? t.bind(d) + : function (t) { + d.setTimeout(t, 16); + }; + })()), + R = (e.now = (function () { + var t = d.performance, + e = t && (t.now || t.webkitNow || t.msNow || t.mozNow); + return e && M.bind + ? e.bind(t) + : Date.now || + function () { + return +new Date(); + }; + })()), + L = c(function (e) { + function i(t, e) { + var r = (function (t) { + for (var e = -1, r = t ? t.length : 0, n = []; ++e < r; ) { + var i = t[e]; + i && n.push(i); + } + return n; + })(('' + t).split(I)), + n = r[0]; + e = e || {}; + var i = K[n]; + if (!i) return l('Unsupported property: ' + n); + if (!e.weak || !this.props[n]) { + var a = i[0], + s = this.props[n]; + return s || (s = this.props[n] = new a.Bare()), s.init(this.$el, r, i, e), s; + } + } + function a(t, e, r) { + if (t) { + var a = (0, n.default)(t); + if ( + (e || (this.timer && this.timer.destroy(), (this.queue = []), (this.active = !1)), + 'number' == a && e) + ) + return ( + (this.timer = new H({ duration: t, context: this, complete: s })), + void (this.active = !0) + ); + if ('string' == a && e) { + switch (t) { + case 'hide': + c.call(this); + break; + case 'stop': + o.call(this); + break; + case 'redraw': + u.call(this); + break; + default: + i.call(this, t, r && r[1]); + } + return s.call(this); + } + if ('function' == a) return void t.call(this, this); + if ('object' == a) { + var l = 0; + p.call( + this, + t, + function (t, e) { + t.span > l && (l = t.span), t.stop(), t.animate(e); + }, + function (t) { + 'wait' in t && (l = h(t.wait, 0)); + }, + ), + f.call(this), + l > 0 && + ((this.timer = new H({ duration: l, context: this })), + (this.active = !0), + e && (this.timer.complete = s)); + var d = this, + m = !1, + v = {}; + k(function () { + p.call(d, t, function (t) { + t.active && ((m = !0), (v[t.name] = t.nextStyle)); + }), + m && d.$el.css(v); + }); + } + } + } + function s() { + if ((this.timer && this.timer.destroy(), (this.active = !1), this.queue.length)) { + var t = this.queue.shift(); + a.call(this, t.options, !0, t.args); + } + } + function o(t) { + var e; + this.timer && this.timer.destroy(), + (this.queue = []), + (this.active = !1), + 'string' == typeof t + ? ((e = {})[t] = 1) + : (e = 'object' == (0, n.default)(t) && null != t ? t : this.props), + p.call(this, e, d), + f.call(this); + } + function c() { + o.call(this), (this.el.style.display = 'none'); + } + function u() { + this.el.offsetHeight; + } + function f() { + var t, + e, + r = []; + for (t in (this.upstream && r.push(this.upstream), this.props)) + (e = this.props[t]).active && r.push(e.string); + (r = r.join(',')), + this.style !== r && ((this.style = r), (this.el.style[M.transition.dom] = r)); + } + function p(t, e, n) { + var a, + s, + o, + h, + l = e !== d, + c = {}; + for (a in t) + (o = t[a]), + a in Q + ? (c.transform || (c.transform = {}), (c.transform[a] = o)) + : (y.test(a) && (a = r(a)), a in K ? (c[a] = o) : (h || (h = {}), (h[a] = o))); + for (a in c) { + if (((o = c[a]), !(s = this.props[a]))) { + if (!l) continue; + s = i.call(this, a); + } + e.call(this, s, o); + } + n && h && n.call(this, h); + } + function d(t) { + t.stop(); + } + function v(t, e) { + t.set(e); + } + function g(t) { + this.$el.css(t); + } + function E(t, r) { + e[t] = function () { + return this.children + ? function (t, e) { + var r, + n = this.children.length; + for (r = 0; n > r; r++) t.apply(this.children[r], e); + return this; + }.call(this, r, arguments) + : (this.el && r.apply(this, arguments), this); + }; + } + (e.init = function (e) { + if ( + ((this.$el = t(e)), + (this.el = this.$el[0]), + (this.props = {}), + (this.queue = []), + (this.style = ''), + (this.active = !1), + W.keepInherited && !W.fallback) + ) { + var r = q(this.el, 'transition'); + r && !T.test(r) && (this.upstream = r); + } + M.backface && W.hideBackface && U(this.el, M.backface.css, 'hidden'); + }), + E('add', i), + E('start', a), + E('wait', function (t) { + (t = h(t, 0)), + this.active + ? this.queue.push({ options: t }) + : ((this.timer = new H({ duration: t, context: this, complete: s })), + (this.active = !0)); + }), + E('then', function (t) { + return this.active + ? (this.queue.push({ options: t, args: arguments }), void (this.timer.complete = s)) + : l('No active transition timer. Use start() or wait() before then().'); + }), + E('next', s), + E('stop', o), + E('set', function (t) { + o.call(this, t), p.call(this, t, v, g); + }), + E('show', function (t) { + 'string' != typeof t && (t = 'block'), (this.el.style.display = t); + }), + E('hide', c), + E('redraw', u), + E('destroy', function () { + o.call(this), t.removeData(this.el, m), (this.$el = this.el = null); + }); + }), + N = c(L, function (e) { + function r(e, r) { + var n = t.data(e, m) || t.data(e, m, new L.Bare()); + return n.el || n.init(e), r ? n.start(r) : n; + } + e.init = function (e, n) { + var i = t(e); + if (!i.length) return this; + if (1 === i.length) return r(i[0], n); + var a = []; + return ( + i.each(function (t, e) { + a.push(r(e, n)); + }), + (this.children = a), + this + ); + }; + }), + V = c(function (t) { + function e() { + var t = this.get(); + this.update('auto'); + var e = this.get(); + return this.update(t), e; + } + function r(t) { + var e = /rgba?\((\d+),\s*(\d+),\s*(\d+)/.exec(t); + return (e ? a(e[1], e[2], e[3]) : t).replace(/#(\w)(\w)(\w)$/, '#$1$1$2$2$3$3'); + } + var i = 500, + s = 'ease', + o = 0; + (t.init = function (t, e, r, n) { + (this.$el = t), (this.el = t[0]); + var a = e[0]; + r[2] && (a = r[2]), + Y[a] && (a = Y[a]), + (this.name = a), + (this.type = r[1]), + (this.duration = h(e[1], this.duration, i)), + (this.ease = (function (t, e, r) { + return void 0 !== e && (r = e), t in u ? t : r; + })(e[2], this.ease, s)), + (this.delay = h(e[3], this.delay, o)), + (this.span = this.duration + this.delay), + (this.active = !1), + (this.nextStyle = null), + (this.auto = A.test(this.name)), + (this.unit = n.unit || this.unit || W.defaultUnit), + (this.angle = n.angle || this.angle || W.defaultAngle), + W.fallback || n.fallback + ? (this.animate = this.fallback) + : ((this.animate = this.transition), + (this.string = + this.name + + I + + this.duration + + 'ms' + + ('ease' != this.ease ? I + u[this.ease][0] : '') + + (this.delay ? I + this.delay + 'ms' : ''))); + }), + (t.set = function (t) { + (t = this.convert(t, this.type)), this.update(t), this.redraw(); + }), + (t.transition = function (t) { + (this.active = !0), + (t = this.convert(t, this.type)), + this.auto && + ('auto' == this.el.style[this.name] && (this.update(this.get()), this.redraw()), + 'auto' == t && (t = e.call(this))), + (this.nextStyle = t); + }), + (t.fallback = function (t) { + var r = this.el.style[this.name] || this.convert(this.get(), this.type); + (t = this.convert(t, this.type)), + this.auto && + ('auto' == r && (r = this.convert(this.get(), this.type)), + 'auto' == t && (t = e.call(this))), + (this.tween = new z({ + from: r, + to: t, + duration: this.duration, + delay: this.delay, + ease: this.ease, + update: this.update, + context: this, + })); + }), + (t.get = function () { + return q(this.el, this.name); + }), + (t.update = function (t) { + U(this.el, this.name, t); + }), + (t.stop = function () { + (this.active || this.nextStyle) && + ((this.active = !1), (this.nextStyle = null), U(this.el, this.name, this.get())); + var t = this.tween; + t && t.context && t.destroy(); + }), + (t.convert = function (t, e) { + if ('auto' == t && this.auto) return t; + var i, + a = 'number' == typeof t, + s = 'string' == typeof t; + switch (e) { + case g: + if (a) return t; + if (s && '' === t.replace(v, '')) return +t; + i = 'number(unitless)'; + break; + case E: + if (s) { + if ('' === t && this.original) return this.original; + if (e.test(t)) return '#' == t.charAt(0) && 7 == t.length ? t : r(t); + } + i = 'hex or rgb string'; + break; + case b: + if (a) return t + this.unit; + if (s && e.test(t)) return t; + i = 'number(px) or string(unit)'; + break; + case _: + if (a) return t + this.unit; + if (s && e.test(t)) return t; + i = 'number(px) or string(unit or %)'; + break; + case x: + if (a) return t + this.angle; + if (s && e.test(t)) return t; + i = 'number(deg) or string(angle)'; + break; + case S: + if (a) return t; + if (s && _.test(t)) return t; + i = 'number(unitless) or string(unit or %)'; + } + return ( + (function (t, e) { + l('Type warning: Expected: [' + t + '] Got: [' + (0, n.default)(e) + '] ' + e); + })(i, t), + t + ); + }), + (t.redraw = function () { + this.el.offsetHeight; + }); + }), + B = c(V, function (t, e) { + t.init = function () { + e.init.apply(this, arguments), + this.original || (this.original = this.convert(this.get(), E)); + }; + }), + G = c(V, function (t, e) { + (t.init = function () { + e.init.apply(this, arguments), (this.animate = this.fallback); + }), + (t.get = function () { + return this.$el[this.name](); + }), + (t.update = function (t) { + this.$el[this.name](t); + }); + }), + j = c(V, function (t, e) { + function r(t, e) { + var r, n, i, a, s; + for (r in t) + (i = (a = Q[r])[0]), + (n = a[1] || r), + (s = this.convert(t[r], i)), + e.call(this, n, s, i); + } + (t.init = function () { + e.init.apply(this, arguments), + this.current || + ((this.current = {}), + Q.perspective && + W.perspective && + ((this.current.perspective = W.perspective), + U(this.el, this.name, this.style(this.current)), + this.redraw())); + }), + (t.set = function (t) { + r.call(this, t, function (t, e) { + this.current[t] = e; + }), + U(this.el, this.name, this.style(this.current)), + this.redraw(); + }), + (t.transition = function (t) { + var e = this.values(t); + this.tween = new X({ + current: this.current, + values: e, + duration: this.duration, + delay: this.delay, + ease: this.ease, + }); + var r, + n = {}; + for (r in this.current) n[r] = r in e ? e[r] : this.current[r]; + (this.active = !0), (this.nextStyle = this.style(n)); + }), + (t.fallback = function (t) { + var e = this.values(t); + this.tween = new X({ + current: this.current, + values: e, + duration: this.duration, + delay: this.delay, + ease: this.ease, + update: this.update, + context: this, + }); + }), + (t.update = function () { + U(this.el, this.name, this.style(this.current)); + }), + (t.style = function (t) { + var e, + r = ''; + for (e in t) r += e + '(' + t[e] + ') '; + return r; + }), + (t.values = function (t) { + var e, + n = {}; + return ( + r.call(this, t, function (t, r, i) { + (n[t] = r), + void 0 === this.current[t] && + ((e = 0), + ~t.indexOf('scale') && (e = 1), + (this.current[t] = this.convert(e, i))); + }), + n + ); + }); + }), + z = c(function (e) { + function r() { + var t, + e, + n, + i = h.length; + if (i) for (k(r), e = R(), t = i; t--; ) (n = h[t]) && n.render(e); + } + var n = { ease: u.ease[1], from: 0, to: 1 }; + (e.init = function (t) { + (this.duration = t.duration || 0), (this.delay = t.delay || 0); + var e = t.ease || n.ease; + u[e] && (e = u[e][1]), + 'function' != typeof e && (e = n.ease), + (this.ease = e), + (this.update = t.update || s), + (this.complete = t.complete || s), + (this.context = t.context || this), + (this.name = t.name); + var r = t.from, + i = t.to; + void 0 === r && (r = n.from), + void 0 === i && (i = n.to), + (this.unit = t.unit || ''), + 'number' == typeof r && 'number' == typeof i + ? ((this.begin = r), (this.change = i - r)) + : this.format(i, r), + (this.value = this.begin + this.unit), + (this.start = R()), + !1 !== t.autoplay && this.play(); + }), + (e.play = function () { + var t; + this.active || + (this.start || (this.start = R()), + (this.active = !0), + (t = this), + 1 === h.push(t) && k(r)); + }), + (e.stop = function () { + var e, r, n; + this.active && + ((this.active = !1), + (e = this), + (n = t.inArray(e, h)) >= 0 && + ((r = h.slice(n + 1)), (h.length = n), r.length && (h = h.concat(r)))); + }), + (e.render = function (t) { + var e, + r = t - this.start; + if (this.delay) { + if (r <= this.delay) return; + r -= this.delay; + } + if (r < this.duration) { + var n = this.ease(r, 0, 1, this.duration); + return ( + (e = this.startRGB + ? (function (t, e, r) { + return a( + t[0] + r * (e[0] - t[0]), + t[1] + r * (e[1] - t[1]), + t[2] + r * (e[2] - t[2]), + ); + })(this.startRGB, this.endRGB, n) + : (function (t) { + return Math.round(t * l) / l; + })(this.begin + n * this.change)), + (this.value = e + this.unit), + void this.update.call(this.context, this.value) + ); + } + (e = this.endHex || this.begin + this.change), + (this.value = e + this.unit), + this.update.call(this.context, this.value), + this.complete.call(this.context), + this.destroy(); + }), + (e.format = function (t, e) { + if (((e += ''), '#' == (t += '').charAt(0))) + return ( + (this.startRGB = i(e)), + (this.endRGB = i(t)), + (this.endHex = t), + (this.begin = 0), + void (this.change = 1) + ); + if (!this.unit) { + var r = e.replace(v, ''); + r !== t.replace(v, '') && o('tween', e, t), (this.unit = r); + } + (e = parseFloat(e)), + (t = parseFloat(t)), + (this.begin = this.value = e), + (this.change = t - e); + }), + (e.destroy = function () { + this.stop(), (this.context = null), (this.ease = this.update = this.complete = s); + }); + var h = [], + l = 1e3; + }), + H = c(z, function (t) { + (t.init = function (t) { + (this.duration = t.duration || 0), + (this.complete = t.complete || s), + (this.context = t.context), + this.play(); + }), + (t.render = function (t) { + t - this.start < this.duration || (this.complete.call(this.context), this.destroy()); + }); + }), + X = c(z, function (t, e) { + (t.init = function (t) { + var e, r; + for (e in ((this.context = t.context), + (this.update = t.update), + (this.tweens = []), + (this.current = t.current), + t.values)) + (r = t.values[e]), + this.current[e] !== r && + this.tweens.push( + new z({ + name: e, + from: this.current[e], + to: r, + duration: t.duration, + delay: t.delay, + ease: t.ease, + autoplay: !1, + }), + ); + this.play(); + }), + (t.render = function (t) { + var e, + r, + n = !1; + for (e = this.tweens.length; e--; ) + (r = this.tweens[e]).context && + (r.render(t), (this.current[r.name] = r.value), (n = !0)); + return n ? void (this.update && this.update.call(this.context)) : this.destroy(); + }), + (t.destroy = function () { + if ((e.destroy.call(this), this.tweens)) { + var t; + for (t = this.tweens.length; t--; ) this.tweens[t].destroy(); + (this.tweens = null), (this.current = null); + } + }); + }), + W = (e.config = { + debug: !1, + defaultUnit: 'px', + defaultAngle: 'deg', + keepInherited: !1, + hideBackface: !1, + perspective: '', + fallback: !M.transition, + agentTests: [], + }); + (e.fallback = function (t) { + if (!M.transition) return (W.fallback = !0); + W.agentTests.push('(' + t + ')'); + var e = new RegExp(W.agentTests.join('|'), 'i'); + W.fallback = e.test(navigator.userAgent); + }), + e.fallback('6.0.[2-5] Safari'), + (e.tween = function (t) { + return new z(t); + }), + (e.delay = function (t, e, r) { + return new H({ complete: e, duration: t, context: r }); + }), + (t.fn.tram = function (t) { + return e.call(null, this, t); + }); + var U = t.style, + q = t.css, + Y = { transform: M.transform && M.transform.css }, + K = { + color: [B, E], + background: [B, E, 'background-color'], + 'outline-color': [B, E], + 'border-color': [B, E], + 'border-top-color': [B, E], + 'border-right-color': [B, E], + 'border-bottom-color': [B, E], + 'border-left-color': [B, E], + 'border-width': [V, b], + 'border-top-width': [V, b], + 'border-right-width': [V, b], + 'border-bottom-width': [V, b], + 'border-left-width': [V, b], + 'border-spacing': [V, b], + 'letter-spacing': [V, b], + margin: [V, b], + 'margin-top': [V, b], + 'margin-right': [V, b], + 'margin-bottom': [V, b], + 'margin-left': [V, b], + padding: [V, b], + 'padding-top': [V, b], + 'padding-right': [V, b], + 'padding-bottom': [V, b], + 'padding-left': [V, b], + 'outline-width': [V, b], + opacity: [V, g], + top: [V, _], + right: [V, _], + bottom: [V, _], + left: [V, _], + 'font-size': [V, _], + 'text-indent': [V, _], + 'word-spacing': [V, _], + width: [V, _], + 'min-width': [V, _], + 'max-width': [V, _], + height: [V, _], + 'min-height': [V, _], + 'max-height': [V, _], + 'line-height': [V, S], + 'scroll-top': [G, g, 'scrollTop'], + 'scroll-left': [G, g, 'scrollLeft'], + }, + Q = {}; + M.transform && + ((K.transform = [j]), + (Q = { + x: [_, 'translateX'], + y: [_, 'translateY'], + rotate: [x], + rotateX: [x], + rotateY: [x], + scale: [g], + scaleX: [g], + scaleY: [g], + skew: [x], + skewX: [x], + skewY: [x], + })), + M.transform && + M.backface && + ((Q.z = [_, 'translateZ']), (Q.rotateZ = [x]), (Q.scaleZ = [g]), (Q.perspective = [b])); + var $ = /ms/, + Z = /s|\./; + return (t.tram = e); + })(window.jQuery); + }, + function (t, e, r) { + var n = r(126), + i = r(28), + a = r(144), + s = Math.max; + t.exports = function (t, e, r) { + var o = null == t ? 0 : t.length; + if (!o) return -1; + var h = null == r ? 0 : a(r); + return h < 0 && (h = s(o + h, 0)), n(t, i(e, 3), h); + }; + }, + function (t, e) { + t.exports = function (t, e, r, n) { + for (var i = t.length, a = r + (n ? 1 : -1); n ? a-- : ++a < i; ) if (e(t[a], a, t)) return a; + return -1; + }; + }, + function (t, e, r) { + var n = r(58), + i = r(203), + a = r(204), + s = r(205), + o = r(206), + h = r(207); + function l(t) { + var e = (this.__data__ = new n(t)); + this.size = e.size; + } + (l.prototype.clear = i), + (l.prototype.delete = a), + (l.prototype.get = s), + (l.prototype.has = o), + (l.prototype.set = h), + (t.exports = l); + }, + function (t, e, r) { + var n = r(39), + i = r(23), + a = '[object AsyncFunction]', + s = '[object Function]', + o = '[object GeneratorFunction]', + h = '[object Proxy]'; + t.exports = function (t) { + if (!i(t)) return !1; + var e = n(t); + return e == s || e == o || e == a || e == h; + }; + }, + function (t, e, r) { + (function (e) { + var r = 'object' == typeof e && e && e.Object === Object && e; + t.exports = r; + }).call(this, r(60)); + }, + function (t, e) { + var r = Function.prototype.toString; + t.exports = function (t) { + if (null != t) { + try { + return r.call(t); + } catch (t) {} + try { + return t + ''; + } catch (t) {} + } + return ''; + }; + }, + function (t, e, r) { + var n = r(226), + i = r(30); + t.exports = function t(e, r, a, s, o) { + return ( + e === r || + (null == e || null == r || (!i(e) && !i(r)) ? e != e && r != r : n(e, r, a, s, t, o)) + ); + }; + }, + function (t, e, r) { + var n = r(227), + i = r(230), + a = r(231), + s = 1, + o = 2; + t.exports = function (t, e, r, h, l, c) { + var u = r & s, + f = t.length, + p = e.length; + if (f != p && !(u && p > f)) return !1; + var d = c.get(t), + m = c.get(e); + if (d && m) return d == e && m == t; + var v = -1, + y = !0, + g = r & o ? new n() : void 0; + for (c.set(t, e), c.set(e, t); ++v < f; ) { + var E = t[v], + b = e[v]; + if (h) var _ = u ? h(b, E, v, e, t, c) : h(E, b, v, t, e, c); + if (void 0 !== _) { + if (_) continue; + y = !1; + break; + } + if (g) { + if ( + !i(e, function (t, e) { + if (!a(g, e) && (E === t || l(E, t, r, h, c))) return g.push(e); + }) + ) { + y = !1; + break; + } + } else if (E !== b && !l(E, b, r, h, c)) { + y = !1; + break; + } + } + return c.delete(t), c.delete(e), y; + }; + }, + function (t, e, r) { + var n = r(82), + i = r(10); + t.exports = function (t, e, r) { + var a = e(t); + return i(t) ? a : n(a, r(t)); + }; + }, + function (t, e, r) { + var n = r(238), + i = r(135), + a = Object.prototype.propertyIsEnumerable, + s = Object.getOwnPropertySymbols, + o = s + ? function (t) { + return null == t + ? [] + : ((t = Object(t)), + n(s(t), function (e) { + return a.call(t, e); + })); + } + : i; + t.exports = o; + }, + function (t, e) { + t.exports = function () { + return []; + }; + }, + function (t, e, r) { + var n = r(239), + i = r(64), + a = r(10), + s = r(83), + o = r(84), + h = r(85), + l = Object.prototype.hasOwnProperty; + t.exports = function (t, e) { + var r = a(t), + c = !r && i(t), + u = !r && !c && s(t), + f = !r && !c && !u && h(t), + p = r || c || u || f, + d = p ? n(t.length, String) : [], + m = d.length; + for (var v in t) + (!e && !l.call(t, v)) || + (p && + ('length' == v || + (u && ('offset' == v || 'parent' == v)) || + (f && ('buffer' == v || 'byteLength' == v || 'byteOffset' == v)) || + o(v, m))) || + d.push(v); + return d; + }; + }, + function (t, e) { + t.exports = function (t) { + return ( + t.webpackPolyfill || + ((t.deprecate = function () {}), + (t.paths = []), + t.children || (t.children = []), + Object.defineProperty(t, 'loaded', { + enumerable: !0, + get: function () { + return t.l; + }, + }), + Object.defineProperty(t, 'id', { + enumerable: !0, + get: function () { + return t.i; + }, + }), + (t.webpackPolyfill = 1)), + t + ); + }; + }, + function (t, e) { + t.exports = function (t, e) { + return function (r) { + return t(e(r)); + }; + }; + }, + function (t, e, r) { + var n = r(29)(r(18), 'WeakMap'); + t.exports = n; + }, + function (t, e, r) { + var n = r(23); + t.exports = function (t) { + return t == t && !n(t); + }; + }, + function (t, e) { + t.exports = function (t, e) { + return function (r) { + return null != r && r[t] === e && (void 0 !== e || t in Object(r)); + }; + }; + }, + function (t, e) { + t.exports = function (t, e) { + for (var r = -1, n = null == t ? 0 : t.length, i = Array(n); ++r < n; ) i[r] = e(t[r], r, t); + return i; + }; + }, + function (t, e) { + t.exports = function (t) { + return function (e) { + return null == e ? void 0 : e[t]; + }; + }; + }, + function (t, e, r) { + var n = r(261); + t.exports = function (t) { + var e = n(t), + r = e % 1; + return e == e ? (r ? e - r : e) : 0; + }; + }, + function (t, e, r) { + var n = r(0), + i = r(15), + a = r(5), + s = r(97), + o = r(146), + h = n.Object; + t.exports = o + ? function (t) { + return 'symbol' == typeof t; + } + : function (t) { + var e = i('Symbol'); + return a(e) && s(e.prototype, h(t)); + }; + }, + function (t, e, r) { + var n = r(147); + t.exports = n && !Symbol.sham && 'symbol' == typeof Symbol.iterator; + }, + function (t, e, r) { + var n = r(31), + i = r(9); + t.exports = + !!Object.getOwnPropertySymbols && + !i(function () { + var t = Symbol(); + return !String(t) || !(Object(t) instanceof Symbol) || (!Symbol.sham && n && n < 41); + }); + }, + function (t, e, r) { + var n = r(50), + i = r(70); + (t.exports = function (t, e) { + return i[t] || (i[t] = void 0 !== e ? e : {}); + })('versions', []).push({ + version: '3.19.0', + mode: n ? 'pure' : 'global', + copyright: '© 2021 Denis Pushkarev (zloirock.ru)', + }); + }, + function (t, e, r) { + var n = r(19), + i = r(9), + a = r(100); + t.exports = + !n && + !i(function () { + return ( + 7 != + Object.defineProperty(a('div'), 'a', { + get: function () { + return 7; + }, + }).a + ); + }); + }, + function (t, e, r) { + var n = r(19), + i = r(16), + a = Function.prototype, + s = n && Object.getOwnPropertyDescriptor, + o = i(a, 'name'), + h = o && 'something' === function () {}.name, + l = o && (!n || (n && s(a, 'name').configurable)); + t.exports = { EXISTS: o, PROPER: h, CONFIGURABLE: l }; + }, + function (t, e, r) { + var n = r(2), + i = r(16), + a = r(24), + s = r(103).indexOf, + o = r(73), + h = n([].push); + t.exports = function (t, e) { + var r, + n = a(t), + l = 0, + c = []; + for (r in n) !i(o, r) && i(n, r) && h(c, r); + for (; e.length > l; ) i(n, (r = e[l++])) && (~s(c, r) || h(c, r)); + return c; + }; + }, + function (t, e, r) { + var n = r(14), + i = r(11), + a = r(33); + t.exports = function (t, e, r) { + var s, o; + i(t); + try { + if (!(s = a(t, 'return'))) { + if ('throw' === e) throw r; + return r; + } + s = n(s, t); + } catch (t) { + (o = !0), (s = t); + } + if ('throw' === e) throw r; + if (o) throw s; + return i(s), r; + }; + }, + function (t, e, r) { + var n = r(6), + i = r(52), + a = n('iterator'), + s = Array.prototype; + t.exports = function (t) { + return void 0 !== t && (i.Array === t || s[a] === t); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(7), + a = r(4), + s = r(34), + o = r(8); + n( + { target: 'Array', proto: !0 }, + { + at: function (t) { + var e = i(this), + r = a(e), + n = s(t), + o = n >= 0 ? n : r + n; + return o < 0 || o >= r ? void 0 : e[o]; + }, + }, + ), + o('at'); + }, + function (t, e, r) { + var n = r(15); + t.exports = n('document', 'documentElement'); + }, + function (t, e, r) { + var n = r(0), + i = r(35), + a = r(43), + s = r(12), + o = r(6)('species'), + h = n.Array; + t.exports = function (t) { + var e; + return ( + i(t) && + ((e = t.constructor), + a(e) && (e === h || i(e.prototype)) + ? (e = void 0) + : s(e) && null === (e = e[o]) && (e = void 0)), + void 0 === e ? h : e + ); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(0), + i = r(35), + a = r(4), + s = r(21), + o = n.TypeError, + h = function (t, e, r, n, l, c, u, f) { + for (var p, d, m = l, v = 0, y = !!u && s(u, f); v < n; ) { + if (v in r) { + if (((p = y ? y(r[v], v, e) : r[v]), c > 0 && i(p))) + (d = a(p)), (m = h(t, e, p, d, m, c - 1) - 1); + else { + if (m >= 9007199254740991) throw o('Exceed the acceptable array length'); + t[m] = p; + } + m++; + } + v++; + } + return m; + }; + t.exports = h; + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(103).includes, + a = r(8); + n( + { target: 'Array', proto: !0 }, + { + includes: function (t) { + return i(this, t, arguments.length > 1 ? arguments[1] : void 0); + }, + }, + ), + a('includes'); + }, + function (t, e, r) { + 'use strict'; + var n, + i, + a, + s = r(9), + o = r(5), + h = r(36), + l = r(109), + c = r(27), + u = r(6), + f = r(50), + p = u('iterator'), + d = !1; + [].keys && + ('next' in (a = [].keys()) ? (i = l(l(a))) !== Object.prototype && (n = i) : (d = !0)), + null == n || + s(function () { + var t = {}; + return n[p].call(t) !== t; + }) + ? (n = {}) + : f && (n = h(n)), + o(n[p]) || + c(n, p, function () { + return this; + }), + (t.exports = { IteratorPrototype: n, BUGGY_SAFARI_ITERATORS: d }); + }, + function (t, e, r) { + var n = r(0), + i = r(20), + a = r(7), + s = r(41), + o = r(4), + h = n.TypeError, + l = function (t) { + return function (e, r, n, l) { + i(r); + var c = a(e), + u = s(c), + f = o(c), + p = t ? f - 1 : 0, + d = t ? -1 : 1; + if (n < 2) + for (;;) { + if (p in u) { + (l = u[p]), (p += d); + break; + } + if (((p += d), t ? p < 0 : f <= p)) + throw h('Reduce of empty array with no initial value'); + } + for (; t ? p >= 0 : f > p; p += d) p in u && (l = r(l, u[p], p, c)); + return l; + }; + }; + t.exports = { left: l(!1), right: l(!0) }; + }, + function (t, e, r) { + var n = r(1), + i = r(2), + a = r(73), + s = r(12), + o = r(16), + h = r(17).f, + l = r(102), + c = r(325), + u = r(99), + f = r(326), + p = !1, + d = u('meta'), + m = 0, + v = + Object.isExtensible || + function () { + return !0; + }, + y = function (t) { + h(t, d, { value: { objectID: 'O' + m++, weakData: {} } }); + }, + g = (t.exports = { + enable: function () { + (g.enable = function () {}), (p = !0); + var t = l.f, + e = i([].splice), + r = {}; + (r[d] = 1), + t(r).length && + ((l.f = function (r) { + for (var n = t(r), i = 0, a = n.length; i < a; i++) + if (n[i] === d) { + e(n, i, 1); + break; + } + return n; + }), + n({ target: 'Object', stat: !0, forced: !0 }, { getOwnPropertyNames: c.f })); + }, + fastKey: function (t, e) { + if (!s(t)) return 'symbol' == typeof t ? t : ('string' == typeof t ? 'S' : 'P') + t; + if (!o(t, d)) { + if (!v(t)) return 'F'; + if (!e) return 'E'; + y(t); + } + return t[d].objectID; + }, + getWeakData: function (t, e) { + if (!o(t, d)) { + if (!v(t)) return !0; + if (!e) return !1; + y(t); + } + return t[d].weakData; + }, + onFreeze: function (t) { + return f && p && v(t) && !o(t, d) && y(t), t; + }, + }); + a[d] = !0; + }, + function (t, e, r) { + var n, + i, + a, + s, + o = r(0), + h = r(111), + l = r(21), + c = r(5), + u = r(16), + f = r(9), + p = r(155), + d = r(78), + m = r(100), + v = r(163), + y = r(55), + g = o.setImmediate, + E = o.clearImmediate, + b = o.process, + _ = o.Dispatch, + x = o.Function, + S = o.MessageChannel, + T = o.String, + A = 0, + I = {}; + try { + n = o.location; + } catch (t) {} + var P = function (t) { + if (u(I, t)) { + var e = I[t]; + delete I[t], e(); + } + }, + w = function (t) { + return function () { + P(t); + }; + }, + C = function (t) { + P(t.data); + }, + D = function (t) { + o.postMessage(T(t), n.protocol + '//' + n.host); + }; + (g && E) || + ((g = function (t) { + var e = d(arguments, 1); + return ( + (I[++A] = function () { + h(c(t) ? t : x(t), void 0, e); + }), + i(A), + A + ); + }), + (E = function (t) { + delete I[t]; + }), + y + ? (i = function (t) { + b.nextTick(w(t)); + }) + : _ && _.now + ? (i = function (t) { + _.now(w(t)); + }) + : S && !v + ? ((s = (a = new S()).port2), (a.port1.onmessage = C), (i = l(s.postMessage, s))) + : o.addEventListener && + c(o.postMessage) && + !o.importScripts && + n && + 'file:' !== n.protocol && + !f(D) + ? ((i = D), o.addEventListener('message', C, !1)) + : (i = + 'onreadystatechange' in m('script') + ? function (t) { + p.appendChild(m('script')).onreadystatechange = function () { + p.removeChild(this), P(t); + }; + } + : function (t) { + setTimeout(w(t), 0); + })), + (t.exports = { set: g, clear: E }); + }, + function (t, e, r) { + var n = r(32); + t.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(n); + }, + function (t, e, r) { + 'use strict'; + var n = r(20), + i = function (t) { + var e, r; + (this.promise = new t(function (t, n) { + if (void 0 !== e || void 0 !== r) throw TypeError('Bad Promise constructor'); + (e = t), (r = n); + })), + (this.resolve = n(e)), + (this.reject = n(r)); + }; + t.exports.f = function (t) { + return new i(t); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(111), + i = r(11), + a = r(36), + s = r(33), + o = r(116), + h = r(42), + l = r(15), + c = r(343), + u = l('Promise'), + f = h.set, + p = h.get, + d = function (t, e, r) { + var n = t.done; + u.resolve(t.value).then(function (t) { + e({ done: n, value: t }); + }, r); + }, + m = function (t) { + f(this, { iterator: i(t), next: t.next }); + }; + (m.prototype = o(a(c), { + next: function (t) { + var e = p(this), + r = !!arguments.length; + return new u(function (a, s) { + var o = i(n(e.next, e.iterator, r ? [t] : [])); + d(o, a, s); + }); + }, + return: function (t) { + var e = p(this).iterator, + r = !!arguments.length; + return new u(function (a, o) { + var h = s(e, 'return'); + if (void 0 === h) return a({ done: !0, value: t }); + var l = i(n(h, e, r ? [t] : [])); + d(l, a, o); + }); + }, + throw: function (t) { + var e = p(this).iterator, + r = !!arguments.length; + return new u(function (a, o) { + var h = s(e, 'throw'); + if (void 0 === h) return o(t); + var l = i(n(h, e, r ? [t] : [])); + d(l, a, o); + }); + }, + })), + (t.exports = m); + }, + function (t, e, r) { + var n = r(21), + i = r(41), + a = r(7), + s = r(4), + o = function (t) { + var e = 1 == t; + return function (r, o, h) { + for (var l, c = a(r), u = i(c), f = n(o, h), p = s(u); p-- > 0; ) + if (f((l = u[p]), p, c)) + switch (t) { + case 0: + return l; + case 1: + return p; + } + return e ? -1 : void 0; + }; + }; + t.exports = { findLast: o(0), findLastIndex: o(1) }; + }, + function (t, e, r) { + 'use strict'; + r.r(e); + var n = r(117); + r.d(e, 'createStore', function () { + return n.default; + }); + var i = r(170); + r.d(e, 'combineReducers', function () { + return i.default; + }); + var a = r(172); + r.d(e, 'bindActionCreators', function () { + return a.default; + }); + var s = r(173); + r.d(e, 'applyMiddleware', function () { + return s.default; + }); + var o = r(118); + r.d(e, 'compose', function () { + return o.default; + }); + r(171); + }, + function (t, e, r) { + 'use strict'; + r.r(e); + var n = r(374), + i = r(379), + a = r(381), + s = '[object Object]', + o = Function.prototype, + h = Object.prototype, + l = o.toString, + c = h.hasOwnProperty, + u = l.call(Object); + e.default = function (t) { + if (!Object(a.default)(t) || Object(n.default)(t) != s) return !1; + var e = Object(i.default)(t); + if (null === e) return !0; + var r = c.call(e, 'constructor') && e.constructor; + return 'function' == typeof r && r instanceof r && l.call(r) == u; + }; + }, + function (t, e, r) { + 'use strict'; + r.r(e); + var n = r(375).default.Symbol; + e.default = n; + }, + function (t, e, r) { + 'use strict'; + r.r(e), + r.d(e, 'default', function () { + return a; + }); + var n = r(117); + r(168), r(171); + function i(t, e) { + var r = e && e.type; + return ( + 'Given action ' + + ((r && '"' + r.toString() + '"') || 'an action') + + ', reducer "' + + t + + '" returned undefined. To ignore an action, you must explicitly return the previous state.' + ); + } + function a(t) { + for (var e = Object.keys(t), r = {}, a = 0; a < e.length; a++) { + var s = e[a]; + 0, 'function' == typeof t[s] && (r[s] = t[s]); + } + var o, + h = Object.keys(r); + try { + !(function (t) { + Object.keys(t).forEach(function (e) { + var r = t[e]; + if (void 0 === r(void 0, { type: n.ActionTypes.INIT })) + throw new Error( + 'Reducer "' + + e + + '" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined.', + ); + if ( + void 0 === + r(void 0, { + type: + '@@redux/PROBE_UNKNOWN_ACTION_' + + Math.random().toString(36).substring(7).split('').join('.'), + }) + ) + throw new Error( + 'Reducer "' + + e + + '" returned undefined when probed with a random type. Don\'t try to handle ' + + n.ActionTypes.INIT + + ' or other actions in "redux/*" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined.', + ); + }); + })(r); + } catch (t) { + o = t; + } + return function () { + var t = arguments.length <= 0 || void 0 === arguments[0] ? {} : arguments[0], + e = arguments[1]; + if (o) throw o; + for (var n = !1, a = {}, s = 0; s < h.length; s++) { + var l = h[s], + c = r[l], + u = t[l], + f = c(u, e); + if (void 0 === f) { + var p = i(l, e); + throw new Error(p); + } + (a[l] = f), (n = n || f !== u); + } + return n ? a : t; + }; + } + }, + function (t, e, r) { + 'use strict'; + function n(t) { + 'undefined' != typeof console && 'function' == typeof console.error && console.error(t); + try { + throw new Error(t); + } catch (t) {} + } + r.r(e), + r.d(e, 'default', function () { + return n; + }); + }, + function (t, e, r) { + 'use strict'; + function n(t, e) { + return function () { + return e(t.apply(void 0, arguments)); + }; + } + function i(t, e) { + if ('function' == typeof t) return n(t, e); + if ('object' != typeof t || null === t) + throw new Error( + 'bindActionCreators expected an object or a function, instead received ' + + (null === t ? 'null' : typeof t) + + '. Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?', + ); + for (var r = Object.keys(t), i = {}, a = 0; a < r.length; a++) { + var s = r[a], + o = t[s]; + 'function' == typeof o && (i[s] = n(o, e)); + } + return i; + } + r.r(e), + r.d(e, 'default', function () { + return i; + }); + }, + function (t, e, r) { + 'use strict'; + r.r(e), + r.d(e, 'default', function () { + return a; + }); + var n = r(118), + i = + Object.assign || + function (t) { + for (var e = 1; e < arguments.length; e++) { + var r = arguments[e]; + for (var n in r) Object.prototype.hasOwnProperty.call(r, n) && (t[n] = r[n]); + } + return t; + }; + function a() { + for (var t = arguments.length, e = Array(t), r = 0; r < t; r++) e[r] = arguments[r]; + return function (t) { + return function (r, a, s) { + var o, + h = t(r, a, s), + l = h.dispatch, + c = { + getState: h.getState, + dispatch: function (t) { + return l(t); + }, + }; + return ( + (o = e.map(function (t) { + return t(c); + })), + (l = n.default.apply(void 0, o)(h.dispatch)), + i({}, h, { dispatch: l }) + ); + }; + }; + } + }, + function (t, e, r) { + 'use strict'; + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.ActionAppliesTo = e.ActionTypeConsts = void 0); + e.ActionTypeConsts = { + TRANSFORM_MOVE: 'TRANSFORM_MOVE', + TRANSFORM_SCALE: 'TRANSFORM_SCALE', + TRANSFORM_ROTATE: 'TRANSFORM_ROTATE', + TRANSFORM_SKEW: 'TRANSFORM_SKEW', + STYLE_OPACITY: 'STYLE_OPACITY', + STYLE_SIZE: 'STYLE_SIZE', + STYLE_FILTER: 'STYLE_FILTER', + STYLE_BACKGROUND_COLOR: 'STYLE_BACKGROUND_COLOR', + STYLE_BORDER: 'STYLE_BORDER', + STYLE_TEXT_COLOR: 'STYLE_TEXT_COLOR', + PLUGIN_LOTTIE: 'PLUGIN_LOTTIE', + GENERAL_DISPLAY: 'GENERAL_DISPLAY', + GENERAL_START_ACTION: 'GENERAL_START_ACTION', + GENERAL_CONTINUOUS_ACTION: 'GENERAL_CONTINUOUS_ACTION', + GENERAL_COMBO_CLASS: 'GENERAL_COMBO_CLASS', + GENERAL_STOP_ACTION: 'GENERAL_STOP_ACTION', + GENERAL_LOOP: 'GENERAL_LOOP', + STYLE_BOX_SHADOW: 'STYLE_BOX_SHADOW', + }; + e.ActionAppliesTo = { + ELEMENT: 'ELEMENT', + ELEMENT_CLASS: 'ELEMENT_CLASS', + TRIGGER_ELEMENT: 'TRIGGER_ELEMENT', + }; + }, + function (t, e, r) { + var n = r(176)(r(125)); + t.exports = n; + }, + function (t, e, r) { + var n = r(28), + i = r(40), + a = r(63); + t.exports = function (t) { + return function (e, r, s) { + var o = Object(e); + if (!i(e)) { + var h = n(r, 3); + (e = a(e)), + (r = function (t) { + return h(o[t], t, o); + }); + } + var l = t(e, r, s); + return l > -1 ? o[h ? e[l] : l] : void 0; + }; + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(3); + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.inQuad = function (t) { + return Math.pow(t, 2); + }), + (e.outQuad = function (t) { + return -(Math.pow(t - 1, 2) - 1); + }), + (e.inOutQuad = function (t) { + if ((t /= 0.5) < 1) return 0.5 * Math.pow(t, 2); + return -0.5 * ((t -= 2) * t - 2); + }), + (e.inCubic = function (t) { + return Math.pow(t, 3); + }), + (e.outCubic = function (t) { + return Math.pow(t - 1, 3) + 1; + }), + (e.inOutCubic = function (t) { + if ((t /= 0.5) < 1) return 0.5 * Math.pow(t, 3); + return 0.5 * (Math.pow(t - 2, 3) + 2); + }), + (e.inQuart = function (t) { + return Math.pow(t, 4); + }), + (e.outQuart = function (t) { + return -(Math.pow(t - 1, 4) - 1); + }), + (e.inOutQuart = function (t) { + if ((t /= 0.5) < 1) return 0.5 * Math.pow(t, 4); + return -0.5 * ((t -= 2) * Math.pow(t, 3) - 2); + }), + (e.inQuint = function (t) { + return Math.pow(t, 5); + }), + (e.outQuint = function (t) { + return Math.pow(t - 1, 5) + 1; + }), + (e.inOutQuint = function (t) { + if ((t /= 0.5) < 1) return 0.5 * Math.pow(t, 5); + return 0.5 * (Math.pow(t - 2, 5) + 2); + }), + (e.inSine = function (t) { + return 1 - Math.cos(t * (Math.PI / 2)); + }), + (e.outSine = function (t) { + return Math.sin(t * (Math.PI / 2)); + }), + (e.inOutSine = function (t) { + return -0.5 * (Math.cos(Math.PI * t) - 1); + }), + (e.inExpo = function (t) { + return 0 === t ? 0 : Math.pow(2, 10 * (t - 1)); + }), + (e.outExpo = function (t) { + return 1 === t ? 1 : 1 - Math.pow(2, -10 * t); + }), + (e.inOutExpo = function (t) { + if (0 === t) return 0; + if (1 === t) return 1; + if ((t /= 0.5) < 1) return 0.5 * Math.pow(2, 10 * (t - 1)); + return 0.5 * (2 - Math.pow(2, -10 * --t)); + }), + (e.inCirc = function (t) { + return -(Math.sqrt(1 - t * t) - 1); + }), + (e.outCirc = function (t) { + return Math.sqrt(1 - Math.pow(t - 1, 2)); + }), + (e.inOutCirc = function (t) { + if ((t /= 0.5) < 1) return -0.5 * (Math.sqrt(1 - t * t) - 1); + return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1); + }), + (e.outBounce = function (t) { + return t < 1 / 2.75 + ? 7.5625 * t * t + : t < 2 / 2.75 + ? 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 + : t < 2.5 / 2.75 + ? 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 + : 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375; + }), + (e.inBack = function (t) { + return t * t * ((a + 1) * t - a); + }), + (e.outBack = function (t) { + return (t -= 1) * t * ((a + 1) * t + a) + 1; + }), + (e.inOutBack = function (t) { + var e = a; + if ((t /= 0.5) < 1) return t * t * ((1 + (e *= 1.525)) * t - e) * 0.5; + return 0.5 * ((t -= 2) * t * ((1 + (e *= 1.525)) * t + e) + 2); + }), + (e.inElastic = function (t) { + var e = a, + r = 0, + n = 1; + if (0 === t) return 0; + if (1 === t) return 1; + r || (r = 0.3); + n < 1 ? ((n = 1), (e = r / 4)) : (e = (r / (2 * Math.PI)) * Math.asin(1 / n)); + return -n * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t - e) * (2 * Math.PI)) / r); + }), + (e.outElastic = function (t) { + var e = a, + r = 0, + n = 1; + if (0 === t) return 0; + if (1 === t) return 1; + r || (r = 0.3); + n < 1 ? ((n = 1), (e = r / 4)) : (e = (r / (2 * Math.PI)) * Math.asin(1 / n)); + return n * Math.pow(2, -10 * t) * Math.sin(((t - e) * (2 * Math.PI)) / r) + 1; + }), + (e.inOutElastic = function (t) { + var e = a, + r = 0, + n = 1; + if (0 === t) return 0; + if (2 == (t /= 0.5)) return 1; + r || (r = 0.3 * 1.5); + n < 1 ? ((n = 1), (e = r / 4)) : (e = (r / (2 * Math.PI)) * Math.asin(1 / n)); + if (t < 1) + return n * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t - e) * (2 * Math.PI)) / r) * -0.5; + return n * Math.pow(2, -10 * (t -= 1)) * Math.sin(((t - e) * (2 * Math.PI)) / r) * 0.5 + 1; + }), + (e.swingFromTo = function (t) { + var e = a; + return (t /= 0.5) < 1 + ? t * t * ((1 + (e *= 1.525)) * t - e) * 0.5 + : 0.5 * ((t -= 2) * t * ((1 + (e *= 1.525)) * t + e) + 2); + }), + (e.swingFrom = function (t) { + return t * t * ((a + 1) * t - a); + }), + (e.swingTo = function (t) { + return (t -= 1) * t * ((a + 1) * t + a) + 1; + }), + (e.bounce = function (t) { + return t < 1 / 2.75 + ? 7.5625 * t * t + : t < 2 / 2.75 + ? 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 + : t < 2.5 / 2.75 + ? 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 + : 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375; + }), + (e.bouncePast = function (t) { + return t < 1 / 2.75 + ? 7.5625 * t * t + : t < 2 / 2.75 + ? 2 - (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + : t < 2.5 / 2.75 + ? 2 - (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + : 2 - (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375); + }), + (e.easeInOut = e.easeOut = e.easeIn = e.ease = void 0); + var i = n(r(178)), + a = 1.70158, + s = (0, i.default)(0.25, 0.1, 0.25, 1); + e.ease = s; + var o = (0, i.default)(0.42, 0, 1, 1); + e.easeIn = o; + var h = (0, i.default)(0, 0, 0.58, 1); + e.easeOut = h; + var l = (0, i.default)(0.42, 0, 0.58, 1); + e.easeInOut = l; + }, + function (t, e) { + var r = 4, + n = 0.001, + i = 1e-7, + a = 10, + s = 11, + o = 1 / (s - 1), + h = 'function' == typeof Float32Array; + function l(t, e) { + return 1 - 3 * e + 3 * t; + } + function c(t, e) { + return 3 * e - 6 * t; + } + function u(t) { + return 3 * t; + } + function f(t, e, r) { + return ((l(e, r) * t + c(e, r)) * t + u(e)) * t; + } + function p(t, e, r) { + return 3 * l(e, r) * t * t + 2 * c(e, r) * t + u(e); + } + t.exports = function (t, e, l, c) { + if (!(0 <= t && t <= 1 && 0 <= l && l <= 1)) + throw new Error('bezier x values must be in [0, 1] range'); + var u = h ? new Float32Array(s) : new Array(s); + if (t !== e || l !== c) for (var d = 0; d < s; ++d) u[d] = f(d * o, t, l); + function m(e) { + for (var h = 0, c = 1, d = s - 1; c !== d && u[c] <= e; ++c) h += o; + var m = h + ((e - u[--c]) / (u[c + 1] - u[c])) * o, + v = p(m, t, l); + return v >= n + ? (function (t, e, n, i) { + for (var a = 0; a < r; ++a) { + var s = p(e, n, i); + if (0 === s) return e; + e -= (f(e, n, i) - t) / s; + } + return e; + })(e, m, t, l) + : 0 === v + ? m + : (function (t, e, r, n, s) { + var o, + h, + l = 0; + do { + (o = f((h = e + (r - e) / 2), n, s) - t) > 0 ? (r = h) : (e = h); + } while (Math.abs(o) > i && ++l < a); + return h; + })(e, h, h + o, t, l); + } + return function (r) { + return t === e && l === c ? r : 0 === r ? 0 : 1 === r ? 1 : f(m(r), e, c); + }; + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(3)(r(180)), + i = r(3), + a = r(56); + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.optimizeFloat = h), + (e.createBezierEasing = function (t) { + return o.default.apply(void 0, (0, n.default)(t)); + }), + (e.applyEasing = function (t, e, r) { + if (0 === e) return 0; + if (1 === e) return 1; + if (r) return h(e > 0 ? r(e) : e); + return h(e > 0 && t && s[t] ? s[t](e) : e); + }); + var s = a(r(177)), + o = i(r(178)); + function h(t) { + var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 5, + r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 10, + n = Math.pow(r, e), + i = Number(Math.round(t * n) / n); + return Math.abs(i) > 1e-4 ? i : 0; + } + }, + function (t, e, r) { + var n = r(394), + i = r(395), + a = r(396); + t.exports = function (t) { + return n(t) || i(t) || a(); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(3)(r(38)); + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.isPluginType = function (t) { + return t === a.ActionTypeConsts.PLUGIN_LOTTIE; + }), + (e.clearPlugin = + e.renderPlugin = + e.createPluginInstance = + e.getPluginDestination = + e.getPluginDuration = + e.getPluginOrigin = + e.getPluginConfig = + void 0); + var i = r(398), + a = r(13), + s = r(119), + o = (0, n.default)({}, a.ActionTypeConsts.PLUGIN_LOTTIE, { + getConfig: i.getPluginConfig, + getOrigin: i.getPluginOrigin, + getDuration: i.getPluginDuration, + getDestination: i.getPluginDestination, + createInstance: i.createPluginInstance, + render: i.renderPlugin, + clear: i.clearPlugin, + }); + var h = function (t) { + return function (e) { + if (!s.IS_BROWSER_ENV) + return function () { + return null; + }; + var r = o[e]; + if (!r) throw new Error('IX2 no plugin configured for: '.concat(e)); + var n = r[t]; + if (!n) throw new Error('IX2 invalid plugin method: '.concat(t)); + return n; + }; + }, + l = h('getConfig'); + e.getPluginConfig = l; + var c = h('getOrigin'); + e.getPluginOrigin = c; + var u = h('getDuration'); + e.getPluginDuration = u; + var f = h('getDestination'); + e.getPluginDestination = f; + var p = h('createInstance'); + e.createPluginInstance = p; + var d = h('render'); + e.renderPlugin = d; + var m = h('clear'); + e.clearPlugin = m; + }, + function (t, e, r) { + var n = r(183), + i = r(405)(n); + t.exports = i; + }, + function (t, e, r) { + var n = r(403), + i = r(63); + t.exports = function (t, e) { + return t && n(t, e, i); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(3)(r(180)), + i = r(56), + a = r(3); + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.observeRequests = function (t) { + F({ + store: t, + select: function (t) { + var e = t.ixRequest; + return e.preview; + }, + onChange: et, + }), + F({ + store: t, + select: function (t) { + var e = t.ixRequest; + return e.playback; + }, + onChange: nt, + }), + F({ + store: t, + select: function (t) { + var e = t.ixRequest; + return e.stop; + }, + onChange: it, + }), + F({ + store: t, + select: function (t) { + var e = t.ixRequest; + return e.clear; + }, + onChange: at, + }); + }), + (e.startEngine = st), + (e.stopEngine = ot), + (e.stopAllActionGroups = mt), + (e.stopActionGroup = vt), + (e.startActionGroup = yt); + var s = a(r(46)), + o = a(r(412)), + h = a(r(175)), + l = a(r(90)), + c = a(r(413)), + u = a(r(419)), + f = a(r(431)), + p = a(r(432)), + d = a(r(433)), + m = a(r(436)), + v = r(13), + y = r(45), + g = r(120), + E = i(r(439)), + b = a(r(440)), + _ = Object.keys(v.QuickEffectIds), + x = function (t) { + return _.includes(t); + }, + S = v.IX2EngineConstants, + T = S.COLON_DELIMITER, + A = S.BOUNDARY_SELECTOR, + I = S.HTML_ELEMENT, + P = S.RENDER_GENERAL, + w = S.W_MOD_IX, + C = y.IX2VanillaUtils, + D = C.getAffectedElements, + M = C.getElementId, + O = C.getDestinationValues, + F = C.observeStore, + k = C.getInstanceId, + R = C.renderHTMLElement, + L = C.clearAllStyles, + N = C.getMaxDurationItemIndex, + V = C.getComputedStyle, + B = C.getInstanceOrigin, + G = C.reduceListToGroup, + j = C.shouldNamespaceEventParameter, + z = C.getNamespacedParameterId, + H = C.shouldAllowMediaQuery, + X = C.cleanupHTMLElement, + W = C.stringifyTarget, + U = C.mediaQueriesEqual, + q = C.shallowEqual, + Y = y.IX2VanillaPlugins, + K = Y.isPluginType, + Q = Y.createPluginInstance, + $ = Y.getPluginDuration, + Z = navigator.userAgent, + J = Z.match(/iPad/i) || Z.match(/iPhone/), + tt = 12; + function et(t, e) { + var r = t.rawData, + n = function () { + st({ store: e, rawData: r, allowEvents: !0 }), rt(); + }; + t.defer ? setTimeout(n, 0) : n(); + } + function rt() { + document.dispatchEvent(new CustomEvent('IX2_PAGE_UPDATE')); + } + function nt(t, e) { + var r = t.actionTypeId, + n = t.actionListId, + i = t.actionItemId, + a = t.eventId, + s = t.allowEvents, + o = t.immediate, + h = t.testManual, + l = t.verbose, + c = void 0 === l || l, + u = t.rawData; + if (n && i && u && o) { + var f = u.actionLists[n]; + f && (u = G({ actionList: f, actionItemId: i, rawData: u })); + } + if ( + (st({ store: e, rawData: u, allowEvents: s, testManual: h }), + (n && r === v.ActionTypeConsts.GENERAL_START_ACTION) || x(r)) + ) { + vt({ store: e, actionListId: n }), dt({ store: e, actionListId: n, eventId: a }); + var p = yt({ store: e, eventId: a, actionListId: n, immediate: o, verbose: c }); + c && p && e.dispatch((0, g.actionListPlaybackChanged)({ actionListId: n, isPlaying: !o })); + } + } + function it(t, e) { + var r = t.actionListId; + r ? vt({ store: e, actionListId: r }) : mt({ store: e }), ot(e); + } + function at(t, e) { + ot(e), L({ store: e, elementApi: E }); + } + function st(t) { + var e, + r = t.store, + i = t.rawData, + a = t.allowEvents, + s = t.testManual, + o = r.getState().ixSession; + i && r.dispatch((0, g.rawDataImported)(i)), + o.active || + (r.dispatch( + (0, g.sessionInitialized)({ + hasBoundaryNodes: Boolean(document.querySelector(A)), + reducedMotion: + document.body.hasAttribute('data-wf-ix-vacation') && + window.matchMedia('(prefers-reduced-motion)').matches, + }), + ), + a && + ((function (t) { + var e = t.getState().ixData.eventTypeMap; + ct(t), + (0, d.default)(e, function (e, r) { + var i = b.default[r]; + i + ? (function (t) { + var e = t.logic, + r = t.store, + i = t.events; + !(function (t) { + if (J) { + var e = {}, + r = ''; + for (var n in t) { + var i = t[n], + a = i.eventTypeId, + s = i.target, + o = E.getQuerySelector(s); + e[o] || + (a !== v.EventTypeConsts.MOUSE_CLICK && + a !== v.EventTypeConsts.MOUSE_SECOND_CLICK) || + ((e[o] = !0), + (r += o + '{cursor: pointer;touch-action: manipulation;}')); + } + if (r) { + var h = document.createElement('style'); + (h.textContent = r), document.body.appendChild(h); + } + } + })(i); + var a = e.types, + s = e.handler, + o = r.getState().ixData, + u = o.actionLists, + f = ut(i, pt); + if ((0, c.default)(f)) { + (0, d.default)(f, function (t, e) { + var a = i[e], + s = a.action, + c = a.id, + f = a.mediaQueries, + p = void 0 === f ? o.mediaQueryKeys : f, + d = s.config.actionListId; + if ( + (U(p, o.mediaQueryKeys) || r.dispatch((0, g.mediaQueriesDefined)()), + s.actionTypeId === v.ActionTypeConsts.GENERAL_CONTINUOUS_ACTION) + ) { + var m = Array.isArray(a.config) ? a.config : [a.config]; + m.forEach(function (e) { + var i = e.continuousParameterGroupId, + a = (0, l.default)( + u, + ''.concat(d, '.continuousParameterGroups'), + [], + ), + s = (0, h.default)(a, function (t) { + var e = t.id; + return e === i; + }), + o = (e.smoothing || 0) / 100, + f = (e.restingState || 0) / 100; + s && + t.forEach(function (t, i) { + var a = c + T + i; + !(function (t) { + var e = t.store, + r = t.eventStateKey, + i = t.eventTarget, + a = t.eventId, + s = t.eventConfig, + o = t.actionListId, + h = t.parameterGroup, + c = t.smoothing, + u = t.restingValue, + f = e.getState(), + p = f.ixData, + d = f.ixSession, + m = p.events[a], + v = m.eventTypeId, + y = {}, + g = {}, + b = [], + _ = h.continuousActionGroups, + x = h.id; + j(v, s) && (x = z(r, x)); + var S = + d.hasBoundaryNodes && i ? E.getClosestElement(i, A) : null; + _.forEach(function (t) { + var e = t.keyframe, + r = t.actionItems; + r.forEach(function (t) { + var r = t.actionTypeId, + a = t.config.target; + if (a) { + var s = a.boundaryMode ? S : null, + o = W(a) + T + r; + if ( + ((g[o] = (function () { + var t, + e = + arguments.length > 0 && void 0 !== arguments[0] + ? arguments[0] + : [], + r = arguments.length > 1 ? arguments[1] : void 0, + i = arguments.length > 2 ? arguments[2] : void 0, + a = (0, n.default)(e); + return ( + a.some(function (e, n) { + return e.keyframe === r && ((t = n), !0); + }), + null == t && + ((t = a.length), + a.push({ keyframe: r, actionItems: [] })), + a[t].actionItems.push(i), + a + ); + })(g[o], e, t)), + !y[o]) + ) { + y[o] = !0; + var h = t.config; + D({ + config: h, + event: m, + eventTarget: i, + elementRoot: s, + elementApi: E, + }).forEach(function (t) { + b.push({ element: t, key: o }); + }); + } + } + }); + }), + b.forEach(function (t) { + var r = t.element, + n = t.key, + i = g[n], + s = (0, l.default)(i, '[0].actionItems[0]', {}), + h = s.actionTypeId, + f = K(h) ? Q(h)(r, s) : null, + p = O({ element: r, actionItem: s, elementApi: E }, f); + gt({ + store: e, + element: r, + eventId: a, + actionListId: o, + actionItem: s, + destination: p, + continuous: !0, + parameterId: x, + actionGroups: i, + smoothing: c, + restingValue: u, + pluginInstance: f, + }); + }); + })({ + store: r, + eventStateKey: a, + eventTarget: t, + eventId: c, + eventConfig: e, + actionListId: d, + parameterGroup: s, + smoothing: o, + restingValue: f, + }); + }); + }); + } + (s.actionTypeId === v.ActionTypeConsts.GENERAL_START_ACTION || + x(s.actionTypeId)) && + dt({ store: r, actionListId: d, eventId: c }); + }); + var p = function (t) { + var e = r.getState(), + n = e.ixSession; + ft(f, function (e, a, h) { + var l = i[a], + c = n.eventState[h], + u = l.action, + f = l.mediaQueries, + p = void 0 === f ? o.mediaQueryKeys : f; + if (H(p, n.mediaQueryKey)) { + var d = function () { + var n = + arguments.length > 0 && void 0 !== arguments[0] + ? arguments[0] + : {}, + i = s( + { + store: r, + element: e, + event: l, + eventConfig: n, + nativeEvent: t, + eventStateKey: h, + }, + c, + ); + q(i, c) || r.dispatch((0, g.eventStateChanged)(h, i)); + }; + if ( + u.actionTypeId === v.ActionTypeConsts.GENERAL_CONTINUOUS_ACTION + ) { + var m = Array.isArray(l.config) ? l.config : [l.config]; + m.forEach(d); + } else d(); + } + }); + }, + y = (0, m.default)(p, tt), + b = function (t) { + var e = t.target, + n = void 0 === e ? document : e, + i = t.types, + a = t.throttle; + i.split(' ') + .filter(Boolean) + .forEach(function (t) { + var e = a ? y : p; + n.addEventListener(t, e), + r.dispatch((0, g.eventListenerAdded)(n, [t, e])); + }); + }; + Array.isArray(a) ? a.forEach(b) : 'string' == typeof a && b(e); + } + })({ logic: i, store: t, events: e }) + : console.warn('IX2 event type not configured: '.concat(r)); + }), + t.getState().ixSession.eventListeners.length && + (function (t) { + var e = function () { + ct(t); + }; + lt.forEach(function (r) { + window.addEventListener(r, e), + t.dispatch((0, g.eventListenerAdded)(window, [r, e])); + }), + e(); + })(t); + })(r), + -1 === (e = document.documentElement).className.indexOf(w) && + (e.className += ' '.concat(w)), + r.getState().ixSession.hasDefinedMediaQueries && + (function (t) { + F({ + store: t, + select: function (t) { + return t.ixSession.mediaQueryKey; + }, + onChange: function () { + ot(t), L({ store: t, elementApi: E }), st({ store: t, allowEvents: !0 }), rt(); + }, + }); + })(r)), + r.dispatch((0, g.sessionStarted)()), + (function (t, e) { + !(function r(n) { + var i = t.getState(), + a = i.ixSession, + s = i.ixParameters; + a.active && + (t.dispatch((0, g.animationFrameChanged)(n, s)), + e + ? (function (t, e) { + var r = F({ + store: t, + select: function (t) { + return t.ixSession.tick; + }, + onChange: function (t) { + e(t), r(); + }, + }); + })(t, r) + : requestAnimationFrame(r)); + })(window.performance.now()); + })(r, s)); + } + function ot(t) { + var e = t.getState().ixSession; + e.active && (e.eventListeners.forEach(ht), t.dispatch((0, g.sessionStopped)())); + } + function ht(t) { + var e = t.target, + r = t.listenerParams; + e.removeEventListener.apply(e, r); + } + var lt = ['resize', 'orientationchange']; + function ct(t) { + var e = t.getState(), + r = e.ixSession, + n = e.ixData, + i = window.innerWidth; + if (i !== r.viewportWidth) { + var a = n.mediaQueries; + t.dispatch((0, g.viewportWidthChanged)({ width: i, mediaQueries: a })); + } + } + var ut = function (t, e) { + return (0, u.default)((0, p.default)(t, e), f.default); + }, + ft = function (t, e) { + (0, d.default)(t, function (t, r) { + t.forEach(function (t, n) { + e(t, r, r + T + n); + }); + }); + }, + pt = function (t) { + var e = { target: t.target, targets: t.targets }; + return D({ config: e, elementApi: E }); + }; + function dt(t) { + var e = t.store, + r = t.actionListId, + n = t.eventId, + i = e.getState(), + a = i.ixData, + s = i.ixSession, + o = a.actionLists, + h = a.events[n], + c = o[r]; + if (c && c.useFirstGroupAsInitialState) { + var u = (0, l.default)(c, 'actionItemGroups[0].actionItems', []), + f = (0, l.default)(h, 'mediaQueries', a.mediaQueryKeys); + if (!H(f, s.mediaQueryKey)) return; + u.forEach(function (t) { + var i, + a = t.config, + s = t.actionTypeId, + o = + !0 === + (null == a + ? void 0 + : null === (i = a.target) || void 0 === i + ? void 0 + : i.useEventTarget) + ? { target: h.target, targets: h.targets } + : a, + l = D({ config: o, event: h, elementApi: E }), + c = K(s); + l.forEach(function (i) { + var a = c ? Q(s)(i, t) : null; + gt({ + destination: O({ element: i, actionItem: t, elementApi: E }, a), + immediate: !0, + store: e, + element: i, + eventId: n, + actionItem: t, + actionListId: r, + pluginInstance: a, + }); + }); + }); + } + } + function mt(t) { + var e = t.store, + r = e.getState().ixInstances; + (0, d.default)(r, function (t) { + if (!t.continuous) { + var r = t.actionListId, + n = t.verbose; + Et(t, e), + n && e.dispatch((0, g.actionListPlaybackChanged)({ actionListId: r, isPlaying: !1 })); + } + }); + } + function vt(t) { + var e = t.store, + r = t.eventId, + n = t.eventTarget, + i = t.eventStateKey, + a = t.actionListId, + s = e.getState(), + o = s.ixInstances, + h = s.ixSession.hasBoundaryNodes && n ? E.getClosestElement(n, A) : null; + (0, d.default)(o, function (t) { + var n = (0, l.default)(t, 'actionItem.config.target.boundaryMode'), + s = !i || t.eventStateKey === i; + if (t.actionListId === a && t.eventId === r && s) { + if (h && n && !E.elementContains(h, t.element)) return; + Et(t, e), + t.verbose && + e.dispatch((0, g.actionListPlaybackChanged)({ actionListId: a, isPlaying: !1 })); + } + }); + } + function yt(t) { + var e, + r = t.store, + n = t.eventId, + i = t.eventTarget, + a = t.eventStateKey, + s = t.actionListId, + o = t.groupIndex, + h = void 0 === o ? 0 : o, + c = t.immediate, + u = t.verbose, + f = r.getState(), + p = f.ixData, + d = f.ixSession, + m = p.events[n] || {}, + v = m.mediaQueries, + y = void 0 === v ? p.mediaQueryKeys : v, + g = (0, l.default)(p, 'actionLists.'.concat(s), {}), + b = g.actionItemGroups, + _ = g.useFirstGroupAsInitialState; + if (!b || !b.length) return !1; + h >= b.length && (0, l.default)(m, 'config.loop') && (h = 0), 0 === h && _ && h++; + var S = + (0 === h || (1 === h && _)) && + x(null === (e = m.action) || void 0 === e ? void 0 : e.actionTypeId) + ? m.config.delay + : void 0, + T = (0, l.default)(b, [h, 'actionItems'], []); + if (!T.length) return !1; + if (!H(y, d.mediaQueryKey)) return !1; + var I = d.hasBoundaryNodes && i ? E.getClosestElement(i, A) : null, + P = N(T), + w = !1; + return ( + T.forEach(function (t, e) { + var o = t.config, + l = t.actionTypeId, + f = K(l), + p = o.target; + if (p) { + var d = p.boundaryMode ? I : null; + D({ config: o, event: m, eventTarget: i, elementRoot: d, elementApi: E }).forEach( + function (o, p) { + var d = f ? Q(l)(o, t) : null, + m = f ? $(l)(o, t) : null; + w = !0; + var v = P === e && 0 === p, + y = V({ element: o, actionItem: t }), + g = O({ element: o, actionItem: t, elementApi: E }, d); + gt({ + store: r, + element: o, + actionItem: t, + eventId: n, + eventTarget: i, + eventStateKey: a, + actionListId: s, + groupIndex: h, + isCarrier: v, + computedStyle: y, + destination: g, + immediate: c, + verbose: u, + pluginInstance: d, + pluginDuration: m, + instanceDelay: S, + }); + }, + ); + } + }), + w + ); + } + function gt(t) { + var e, + r, + n = t.store, + i = t.computedStyle, + a = (0, o.default)(t, ['store', 'computedStyle']), + h = a.element, + l = a.actionItem, + c = a.immediate, + u = a.pluginInstance, + f = a.continuous, + p = a.restingValue, + d = a.eventId, + m = !f, + y = k(), + b = n.getState(), + _ = b.ixElements, + x = b.ixSession, + S = b.ixData, + T = M(_, h), + A = (_[T] || {}).refState, + I = E.getRefType(h), + P = x.reducedMotion && v.ReducedMotionTypes[l.actionTypeId]; + if (P && f) + switch (null === (e = S.events[d]) || void 0 === e ? void 0 : e.eventTypeId) { + case v.EventTypeConsts.MOUSE_MOVE: + case v.EventTypeConsts.MOUSE_MOVE_IN_VIEWPORT: + r = p; + break; + default: + r = 0.5; + } + var w = B(h, A, i, l, E, u); + n.dispatch( + (0, g.instanceAdded)( + (0, s.default)( + { instanceId: y, elementId: T, origin: w, refType: I, skipMotion: P, skipToValue: r }, + a, + ), + ), + ), + bt(document.body, 'ix2-animation-started', y), + c + ? (function (t, e) { + var r = t.getState().ixParameters; + t.dispatch((0, g.instanceStarted)(e, 0)), + t.dispatch((0, g.animationFrameChanged)(performance.now(), r)), + _t(t.getState().ixInstances[e], t); + })(n, y) + : (F({ + store: n, + select: function (t) { + return t.ixInstances[y]; + }, + onChange: _t, + }), + m && n.dispatch((0, g.instanceStarted)(y, x.tick))); + } + function Et(t, e) { + bt(document.body, 'ix2-animation-stopping', { instanceId: t.id, state: e.getState() }); + var r = t.elementId, + n = t.actionItem, + i = e.getState().ixElements[r] || {}, + a = i.ref; + i.refType === I && X(a, n, E), e.dispatch((0, g.instanceRemoved)(t.id)); + } + function bt(t, e, r) { + var n = document.createEvent('CustomEvent'); + n.initCustomEvent(e, !0, !0, r), t.dispatchEvent(n); + } + function _t(t, e) { + var r = t.active, + n = t.continuous, + i = t.complete, + a = t.elementId, + s = t.actionItem, + o = t.actionTypeId, + h = t.renderType, + l = t.current, + c = t.groupIndex, + u = t.eventId, + f = t.eventTarget, + p = t.eventStateKey, + d = t.actionListId, + m = t.isCarrier, + v = t.styleProp, + y = t.verbose, + b = t.pluginInstance, + _ = e.getState(), + x = _.ixData, + S = _.ixSession, + T = (x.events[u] || {}).mediaQueries, + A = void 0 === T ? x.mediaQueryKeys : T; + if (H(A, S.mediaQueryKey) && (n || r || i)) { + if (l || (h === P && i)) { + e.dispatch((0, g.elementStateChanged)(a, o, l, s)); + var w = e.getState().ixElements[a] || {}, + C = w.ref, + D = w.refType, + M = w.refState, + O = M && M[o]; + switch (D) { + case I: + R(C, M, O, u, s, v, E, h, b); + } + } + if (i) { + if (m) { + var F = yt({ + store: e, + eventId: u, + eventTarget: f, + eventStateKey: p, + actionListId: d, + groupIndex: c + 1, + verbose: y, + }); + y && + !F && + e.dispatch((0, g.actionListPlaybackChanged)({ actionListId: d, isPlaying: !1 })); + } + Et(t, e); + } + } + } + }, + function (t, e, r) { + var n = r(186); + t.exports = function (t, e, r) { + '__proto__' == e && n + ? n(t, e, { configurable: !0, enumerable: !0, value: r, writable: !0 }) + : (t[e] = r); + }; + }, + function (t, e, r) { + var n = r(29), + i = (function () { + try { + var t = n(Object, 'defineProperty'); + return t({}, '', {}), t; + } catch (t) {} + })(); + t.exports = i; + }, + function (t, e, r) { + var n = r(23), + i = Object.create, + a = (function () { + function t() {} + return function (e) { + if (!n(e)) return {}; + if (i) return i(e); + t.prototype = e; + var r = new t(); + return (t.prototype = void 0), r; + }; + })(); + t.exports = a; + }, + function (t, e, r) { + var n = r(453), + i = r(454), + a = n + ? function (t) { + return n.get(t); + } + : i; + t.exports = a; + }, + function (t, e, r) { + var n = r(455), + i = Object.prototype.hasOwnProperty; + t.exports = function (t) { + for (var e = t.name + '', r = n[e], a = i.call(n, e) ? r.length : 0; a--; ) { + var s = r[a], + o = s.func; + if (null == o || o == t) return s.name; + } + return e; + }; + }, + function (t, e, r) { + r(191), + r(360), + r(361), + r(362), + r(363), + r(364), + r(365), + r(366), + r(368), + r(462), + r(463), + (t.exports = r(464)); + }, + function (t, e, r) { + 'use strict'; + var n = r(22), + i = r(193), + a = r(359); + n.define( + 'lottie', + (t.exports = function () { + return { + lottie: a, + createInstance: i.createInstance, + cleanupElement: i.cleanupElement, + init: i.init, + destroy: i.destroy, + ready: i.ready, + }; + }), + ); + }, + function (t, e, r) { + 'use strict'; + var n = window.$, + i = r(124) && n.tram; + /*! + * Webflow._ (aka) Underscore.js 1.6.0 (custom build) + * _.each + * _.map + * _.find + * _.filter + * _.any + * _.contains + * _.delay + * _.defer + * _.throttle (webflow) + * _.debounce + * _.keys + * _.has + * _.now + * + * http://underscorejs.org + * (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Underscore may be freely distributed under the MIT license. + * @license MIT + */ + t.exports = (function () { + var t = { VERSION: '1.6.0-Webflow' }, + e = {}, + r = Array.prototype, + n = Object.prototype, + a = Function.prototype, + s = (r.push, r.slice), + o = (r.concat, n.toString, n.hasOwnProperty), + h = r.forEach, + l = r.map, + c = (r.reduce, r.reduceRight, r.filter), + u = (r.every, r.some), + f = r.indexOf, + p = (r.lastIndexOf, Array.isArray, Object.keys), + d = + (a.bind, + (t.each = t.forEach = + function (r, n, i) { + if (null == r) return r; + if (h && r.forEach === h) r.forEach(n, i); + else if (r.length === +r.length) { + for (var a = 0, s = r.length; a < s; a++) if (n.call(i, r[a], a, r) === e) return; + } else { + var o = t.keys(r); + for (a = 0, s = o.length; a < s; a++) if (n.call(i, r[o[a]], o[a], r) === e) return; + } + return r; + })); + (t.map = t.collect = + function (t, e, r) { + var n = []; + return null == t + ? n + : l && t.map === l + ? t.map(e, r) + : (d(t, function (t, i, a) { + n.push(e.call(r, t, i, a)); + }), + n); + }), + (t.find = t.detect = + function (t, e, r) { + var n; + return ( + m(t, function (t, i, a) { + if (e.call(r, t, i, a)) return (n = t), !0; + }), + n + ); + }), + (t.filter = t.select = + function (t, e, r) { + var n = []; + return null == t + ? n + : c && t.filter === c + ? t.filter(e, r) + : (d(t, function (t, i, a) { + e.call(r, t, i, a) && n.push(t); + }), + n); + }); + var m = + (t.some = + t.any = + function (r, n, i) { + n || (n = t.identity); + var a = !1; + return null == r + ? a + : u && r.some === u + ? r.some(n, i) + : (d(r, function (t, r, s) { + if (a || (a = n.call(i, t, r, s))) return e; + }), + !!a); + }); + (t.contains = t.include = + function (t, e) { + return ( + null != t && + (f && t.indexOf === f + ? -1 != t.indexOf(e) + : m(t, function (t) { + return t === e; + })) + ); + }), + (t.delay = function (t, e) { + var r = s.call(arguments, 2); + return setTimeout(function () { + return t.apply(null, r); + }, e); + }), + (t.defer = function (e) { + return t.delay.apply(t, [e, 1].concat(s.call(arguments, 1))); + }), + (t.throttle = function (t) { + var e, r, n; + return function () { + e || + ((e = !0), + (r = arguments), + (n = this), + i.frame(function () { + (e = !1), t.apply(n, r); + })); + }; + }), + (t.debounce = function (e, r, n) { + var i, + a, + s, + o, + h, + l = function l() { + var c = t.now() - o; + c < r + ? (i = setTimeout(l, r - c)) + : ((i = null), n || ((h = e.apply(s, a)), (s = a = null))); + }; + return function () { + (s = this), (a = arguments), (o = t.now()); + var c = n && !i; + return i || (i = setTimeout(l, r)), c && ((h = e.apply(s, a)), (s = a = null)), h; + }; + }), + (t.defaults = function (e) { + if (!t.isObject(e)) return e; + for (var r = 1, n = arguments.length; r < n; r++) { + var i = arguments[r]; + for (var a in i) void 0 === e[a] && (e[a] = i[a]); + } + return e; + }), + (t.keys = function (e) { + if (!t.isObject(e)) return []; + if (p) return p(e); + var r = []; + for (var n in e) t.has(e, n) && r.push(n); + return r; + }), + (t.has = function (t, e) { + return o.call(t, e); + }), + (t.isObject = function (t) { + return t === Object(t); + }), + (t.now = + Date.now || + function () { + return new Date().getTime(); + }), + (t.templateSettings = { + evaluate: /<%([\s\S]+?)%>/g, + interpolate: /<%=([\s\S]+?)%>/g, + escape: /<%-([\s\S]+?)%>/g, + }); + var v = /(.)^/, + y = { "'": "'", '\\': '\\', '\r': 'r', '\n': 'n', '\u2028': 'u2028', '\u2029': 'u2029' }, + g = /\\|'|\r|\n|\u2028|\u2029/g, + E = function (t) { + return '\\' + y[t]; + }; + return ( + (t.template = function (e, r, n) { + !r && n && (r = n), (r = t.defaults({}, r, t.templateSettings)); + var i = RegExp( + [(r.escape || v).source, (r.interpolate || v).source, (r.evaluate || v).source].join( + '|', + ) + '|$', + 'g', + ), + a = 0, + s = "__p+='"; + e.replace(i, function (t, r, n, i, o) { + return ( + (s += e.slice(a, o).replace(g, E)), + (a = o + t.length), + r + ? (s += "'+\n((__t=(" + r + "))==null?'':_.escape(__t))+\n'") + : n + ? (s += "'+\n((__t=(" + n + "))==null?'':__t)+\n'") + : i && (s += "';\n" + i + "\n__p+='"), + t + ); + }), + (s += "';\n"), + r.variable || (s = 'with(obj||{}){\n' + s + '}\n'), + (s = + "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + + s + + 'return __p;\n'); + try { + var o = new Function(r.variable || 'obj', '_', s); + } catch (t) { + throw ((t.source = s), t); + } + var h = function (e) { + return o.call(this, e, t); + }, + l = r.variable || 'obj'; + return (h.source = 'function(' + l + '){\n' + s + '}'), h; + }), + t + ); + })(); + }, + function (t, e, r) { + 'use strict'; + var n = r(3), + i = n(r(194)), + a = n(r(195)), + s = r(3); + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.ready = e.destroy = e.init = e.cleanupElement = e.createInstance = void 0); + var o = s(r(46)), + h = s(r(38)), + l = s(r(125)); + r(264); + var c = { Playing: 'playing', Stopped: 'stopped' }, + u = new ((function () { + function t() { + (0, i.default)(this, t), (0, h.default)(this, '_cache', []); + } + return ( + (0, a.default)(t, [ + { + key: 'set', + value: function (t, e) { + var r = (0, l.default)(this._cache, function (e) { + return e.wrapper === t; + }); + -1 !== r && this._cache.splice(r, 1), this._cache.push({ wrapper: t, instance: e }); + }, + }, + { + key: 'delete', + value: function (t) { + var e = (0, l.default)(this._cache, function (e) { + return e.wrapper === t; + }); + -1 !== e && this._cache.splice(e, 1); + }, + }, + { + key: 'get', + value: function (t) { + var e = (0, l.default)(this._cache, function (e) { + return e.wrapper === t; + }); + return -1 !== e ? this._cache[e].instance : null; + }, + }, + ]), + t + ); + })())(), + f = {}, + p = (function () { + function t() { + (0, i.default)(this, t), + (0, h.default)(this, 'config', null), + (0, h.default)(this, 'currentState', c.Stopped), + (0, h.default)(this, 'handlers', { + enterFrame: [], + complete: [], + loop: [], + dataReady: [], + destroy: [], + error: [], + }); + } + return ( + (0, a.default)(t, [ + { + key: 'load', + value: function (t) { + var e = this, + r = t.dataset || f, + n = r.src || '', + i = r.preserveAspectRatio || 'xMidYMid meet', + a = r.renderer || 'svg', + s = 1 === parseFloat(r.loop), + h = parseFloat(r.direction) || 1, + l = 1 === parseFloat(r.autoplay), + p = parseFloat(r.duration) || 0, + d = 1 === parseFloat(r.isIx2Target), + m = parseFloat(r.ix2InitialState); + isNaN(m) && (m = null); + var v = { + src: n, + loop: s, + autoplay: l, + renderer: a, + direction: h, + duration: p, + hasIx2: d, + ix2InitialValue: m, + preserveAspectRatio: i, + }; + if ( + this.animationItem && + this.config && + this.config.src === n && + a === this.config.renderer && + i === this.config.preserveAspectRatio + ) { + if ( + (s !== this.config.loop && this.setLooping(s), + d || + (h !== this.config.direction && this.setDirection(h), + p !== this.config.duration && + (p > 0 && p !== this.duration + ? this.setSpeed(this.duration / p) + : this.setSpeed(1))), + l && this.play(), + m && m !== this.config.ix2InitialValue) + ) { + var y = m / 100; + this.goToFrame(this.frames * y); + } + this.config = v; + } else { + var g = { + container: t, + loop: s, + autoplay: l, + renderer: a, + rendererSettings: { + preserveAspectRatio: i, + progressiveLoad: !0, + hideOnTransparent: !0, + }, + }; + try { + this.animationItem && this.destroy(), + (this.animationItem = window.Webflow.require('lottie').lottie.loadAnimation( + (0, o.default)({}, g, { path: n }), + )); + } catch (t) { + return void this.handlers.error.forEach(function (e) { + return e(t); + }); + } + this.animationItem && + (Boolean(window.Webflow.env('design') || window.Webflow.env('preview')) && + (this.animationItem.addEventListener('enterFrame', function () { + if (e.isPlaying) { + var t = e.animationItem, + r = t.currentFrame, + n = t.totalFrames, + i = t.playDirection, + a = (r / n) * 100, + s = Math.round(1 === i ? a : 100 - a); + e.handlers.enterFrame.forEach(function (t) { + return t(s, r); + }); + } + }), + this.animationItem.addEventListener('complete', function () { + e.currentState === c.Playing && e.animationItem.loop + ? (e.currentState = c.Stopped) + : e.handlers.complete.forEach(function (t) { + return t(); + }); + }), + this.animationItem.addEventListener('loopComplete', function (t) { + e.handlers.loop.forEach(function (e) { + return e(t); + }); + }), + this.animationItem.addEventListener('data_failed', function (t) { + e.handlers.error.forEach(function (e) { + return e(t); + }); + }), + this.animationItem.addEventListener('error', function (t) { + e.handlers.error.forEach(function (e) { + return e(t); + }); + })), + this.isLoaded + ? (this.handlers.dataReady.forEach(function (t) { + return t(); + }), + l && this.play()) + : this.animationItem.addEventListener('data_ready', function () { + if ( + (e.handlers.dataReady.forEach(function (t) { + return t(); + }), + d || + (e.setDirection(h), + p > 0 && p !== e.duration && e.setSpeed(e.duration / p), + l && e.play()), + m) + ) { + var t = m / 100; + e.goToFrame(e.frames * t); + } + }), + u.set(t, this), + (this.container = t), + (this.config = v)); + } + }, + }, + { + key: 'onFrameChange', + value: function (t) { + -1 === this.handlers.enterFrame.indexOf(t) && this.handlers.enterFrame.push(t); + }, + }, + { + key: 'onPlaybackComplete', + value: function (t) { + -1 === this.handlers.complete.indexOf(t) && this.handlers.complete.push(t); + }, + }, + { + key: 'onLoopComplete', + value: function (t) { + -1 === this.handlers.loop.indexOf(t) && this.handlers.loop.push(t); + }, + }, + { + key: 'onDestroy', + value: function (t) { + -1 === this.handlers.destroy.indexOf(t) && this.handlers.destroy.push(t); + }, + }, + { + key: 'onDataReady', + value: function (t) { + -1 === this.handlers.dataReady.indexOf(t) && this.handlers.dataReady.push(t); + }, + }, + { + key: 'onError', + value: function (t) { + -1 === this.handlers.error.indexOf(t) && this.handlers.error.push(t); + }, + }, + { + key: 'play', + value: function () { + if (this.animationItem) { + var t = 1 === this.animationItem.playDirection ? 0 : this.frames; + this.animationItem.goToAndPlay(t, !0), (this.currentState = c.Playing); + } + }, + }, + { + key: 'stop', + value: function () { + if (this.animationItem) { + if (this.isPlaying) { + var t = 1 === this.animationItem.playDirection ? 0 : this.frames; + this.animationItem.goToAndStop(t, !0); + } + this.currentState = c.Stopped; + } + }, + }, + { + key: 'destroy', + value: function () { + var t = this; + this.animationItem && + (this.isPlaying && this.stop(), + this.handlers.destroy.forEach(function (t) { + return t(); + }), + this.container && u.delete(this.container), + this.animationItem.destroy(), + Object.keys(this.handlers).forEach(function (e) { + return (t.handlers[e].length = 0); + }), + (this.animationItem = null), + (this.container = null), + (this.config = null)); + }, + }, + { + key: 'goToFrame', + value: function (t) { + this.animationItem && this.animationItem.setCurrentRawFrameValue(t); + }, + }, + { + key: 'setSubframe', + value: function (t) { + this.animationItem && this.animationItem.setSubframe(t); + }, + }, + { + key: 'setSpeed', + value: function () { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1; + this.animationItem && + (this.isPlaying && this.stop(), this.animationItem.setSpeed(t)); + }, + }, + { + key: 'setLooping', + value: function (t) { + this.animationItem && + (this.isPlaying && this.stop(), (this.animationItem.loop = t)); + }, + }, + { + key: 'setDirection', + value: function (t) { + this.animationItem && + (this.isPlaying && this.stop(), + this.animationItem.setDirection(t), + this.goToFrame(1 === t ? 0 : this.frames)); + }, + }, + { + key: 'isPlaying', + get: function () { + return !!this.animationItem && !this.animationItem.isPaused; + }, + }, + { + key: 'isPaused', + get: function () { + return !!this.animationItem && this.animationItem.isPaused; + }, + }, + { + key: 'duration', + get: function () { + return this.animationItem ? this.animationItem.getDuration() : 0; + }, + }, + { + key: 'frames', + get: function () { + return this.animationItem ? this.animationItem.totalFrames : 0; + }, + }, + { + key: 'direction', + get: function () { + return this.animationItem ? this.animationItem.playDirection : 1; + }, + }, + { + key: 'isLoaded', + get: function () { + return this.animationItem, this.animationItem.isLoaded; + }, + }, + { + key: 'ix2InitialValue', + get: function () { + return this.config ? this.config.ix2InitialValue : null; + }, + }, + ]), + t + ); + })(), + d = function () { + return Array.from(document.querySelectorAll('[data-animation-type="lottie"]')); + }, + m = function (t) { + var e = u.get(t); + return null == e && (e = new p()), e.load(t), e; + }; + e.createInstance = m; + var v = function (t) { + var e = u.get(t); + e && e.destroy(); + }; + e.cleanupElement = v; + var y = function () { + d().forEach(function (t) { + 1 === parseFloat(t.getAttribute('data-is-ix2-target')) || v(t), m(t); + }); + }; + e.init = y; + e.destroy = function () { + d().forEach(v); + }; + var g = y; + e.ready = g; + }, + function (t, e) { + t.exports = function (t, e) { + if (!(t instanceof e)) throw new TypeError('Cannot call a class as a function'); + }; + }, + function (t, e) { + function r(t, e) { + for (var r = 0; r < e.length; r++) { + var n = e[r]; + (n.enumerable = n.enumerable || !1), + (n.configurable = !0), + 'value' in n && (n.writable = !0), + Object.defineProperty(t, n.key, n); + } + } + t.exports = function (t, e, n) { + return e && r(t.prototype, e), n && r(t, n), t; + }; + }, + function (t, e, r) { + var n = r(197), + i = r(249), + a = r(141); + t.exports = function (t) { + var e = i(t); + return 1 == e.length && e[0][2] + ? a(e[0][0], e[0][1]) + : function (r) { + return r === t || n(r, t, e); + }; + }; + }, + function (t, e, r) { + var n = r(127), + i = r(131), + a = 1, + s = 2; + t.exports = function (t, e, r, o) { + var h = r.length, + l = h, + c = !o; + if (null == t) return !l; + for (t = Object(t); h--; ) { + var u = r[h]; + if (c && u[2] ? u[1] !== t[u[0]] : !(u[0] in t)) return !1; + } + for (; ++h < l; ) { + var f = (u = r[h])[0], + p = t[f], + d = u[1]; + if (c && u[2]) { + if (void 0 === p && !(f in t)) return !1; + } else { + var m = new n(); + if (o) var v = o(p, d, f, t, e, m); + if (!(void 0 === v ? i(d, p, a | s, o, m) : v)) return !1; + } + } + return !0; + }; + }, + function (t, e) { + t.exports = function () { + (this.__data__ = []), (this.size = 0); + }; + }, + function (t, e, r) { + var n = r(59), + i = Array.prototype.splice; + t.exports = function (t) { + var e = this.__data__, + r = n(e, t); + return !(r < 0 || (r == e.length - 1 ? e.pop() : i.call(e, r, 1), --this.size, 0)); + }; + }, + function (t, e, r) { + var n = r(59); + t.exports = function (t) { + var e = this.__data__, + r = n(e, t); + return r < 0 ? void 0 : e[r][1]; + }; + }, + function (t, e, r) { + var n = r(59); + t.exports = function (t) { + return n(this.__data__, t) > -1; + }; + }, + function (t, e, r) { + var n = r(59); + t.exports = function (t, e) { + var r = this.__data__, + i = n(r, t); + return i < 0 ? (++this.size, r.push([t, e])) : (r[i][1] = e), this; + }; + }, + function (t, e, r) { + var n = r(58); + t.exports = function () { + (this.__data__ = new n()), (this.size = 0); + }; + }, + function (t, e) { + t.exports = function (t) { + var e = this.__data__, + r = e.delete(t); + return (this.size = e.size), r; + }; + }, + function (t, e) { + t.exports = function (t) { + return this.__data__.get(t); + }; + }, + function (t, e) { + t.exports = function (t) { + return this.__data__.has(t); + }; + }, + function (t, e, r) { + var n = r(58), + i = r(80), + a = r(81), + s = 200; + t.exports = function (t, e) { + var r = this.__data__; + if (r instanceof n) { + var o = r.__data__; + if (!i || o.length < s - 1) return o.push([t, e]), (this.size = ++r.size), this; + r = this.__data__ = new a(o); + } + return r.set(t, e), (this.size = r.size), this; + }; + }, + function (t, e, r) { + var n = r(128), + i = r(211), + a = r(23), + s = r(130), + o = /^\[object .+?Constructor\]$/, + h = Function.prototype, + l = Object.prototype, + c = h.toString, + u = l.hasOwnProperty, + f = RegExp( + '^' + + c + .call(u) + .replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + + '$', + ); + t.exports = function (t) { + return !(!a(t) || i(t)) && (n(t) ? f : o).test(s(t)); + }; + }, + function (t, e, r) { + var n = r(47), + i = Object.prototype, + a = i.hasOwnProperty, + s = i.toString, + o = n ? n.toStringTag : void 0; + t.exports = function (t) { + var e = a.call(t, o), + r = t[o]; + try { + t[o] = void 0; + var n = !0; + } catch (t) {} + var i = s.call(t); + return n && (e ? (t[o] = r) : delete t[o]), i; + }; + }, + function (t, e) { + var r = Object.prototype.toString; + t.exports = function (t) { + return r.call(t); + }; + }, + function (t, e, r) { + var n, + i = r(212), + a = (n = /[^.]+$/.exec((i && i.keys && i.keys.IE_PROTO) || '')) ? 'Symbol(src)_1.' + n : ''; + t.exports = function (t) { + return !!a && a in t; + }; + }, + function (t, e, r) { + var n = r(18)['__core-js_shared__']; + t.exports = n; + }, + function (t, e) { + t.exports = function (t, e) { + return null == t ? void 0 : t[e]; + }; + }, + function (t, e, r) { + var n = r(215), + i = r(58), + a = r(80); + t.exports = function () { + (this.size = 0), (this.__data__ = { hash: new n(), map: new (a || i)(), string: new n() }); + }; + }, + function (t, e, r) { + var n = r(216), + i = r(217), + a = r(218), + s = r(219), + o = r(220); + function h(t) { + var e = -1, + r = null == t ? 0 : t.length; + for (this.clear(); ++e < r; ) { + var n = t[e]; + this.set(n[0], n[1]); + } + } + (h.prototype.clear = n), + (h.prototype.delete = i), + (h.prototype.get = a), + (h.prototype.has = s), + (h.prototype.set = o), + (t.exports = h); + }, + function (t, e, r) { + var n = r(61); + t.exports = function () { + (this.__data__ = n ? n(null) : {}), (this.size = 0); + }; + }, + function (t, e) { + t.exports = function (t) { + var e = this.has(t) && delete this.__data__[t]; + return (this.size -= e ? 1 : 0), e; + }; + }, + function (t, e, r) { + var n = r(61), + i = '__lodash_hash_undefined__', + a = Object.prototype.hasOwnProperty; + t.exports = function (t) { + var e = this.__data__; + if (n) { + var r = e[t]; + return r === i ? void 0 : r; + } + return a.call(e, t) ? e[t] : void 0; + }; + }, + function (t, e, r) { + var n = r(61), + i = Object.prototype.hasOwnProperty; + t.exports = function (t) { + var e = this.__data__; + return n ? void 0 !== e[t] : i.call(e, t); + }; + }, + function (t, e, r) { + var n = r(61), + i = '__lodash_hash_undefined__'; + t.exports = function (t, e) { + var r = this.__data__; + return (this.size += this.has(t) ? 0 : 1), (r[t] = n && void 0 === e ? i : e), this; + }; + }, + function (t, e, r) { + var n = r(62); + t.exports = function (t) { + var e = n(this, t).delete(t); + return (this.size -= e ? 1 : 0), e; + }; + }, + function (t, e) { + t.exports = function (t) { + var e = typeof t; + return 'string' == e || 'number' == e || 'symbol' == e || 'boolean' == e + ? '__proto__' !== t + : null === t; + }; + }, + function (t, e, r) { + var n = r(62); + t.exports = function (t) { + return n(this, t).get(t); + }; + }, + function (t, e, r) { + var n = r(62); + t.exports = function (t) { + return n(this, t).has(t); + }; + }, + function (t, e, r) { + var n = r(62); + t.exports = function (t, e) { + var r = n(this, t), + i = r.size; + return r.set(t, e), (this.size += r.size == i ? 0 : 1), this; + }; + }, + function (t, e, r) { + var n = r(127), + i = r(132), + a = r(232), + s = r(236), + o = r(89), + h = r(10), + l = r(83), + c = r(85), + u = 1, + f = '[object Arguments]', + p = '[object Array]', + d = '[object Object]', + m = Object.prototype.hasOwnProperty; + t.exports = function (t, e, r, v, y, g) { + var E = h(t), + b = h(e), + _ = E ? p : o(t), + x = b ? p : o(e), + S = (_ = _ == f ? d : _) == d, + T = (x = x == f ? d : x) == d, + A = _ == x; + if (A && l(t)) { + if (!l(e)) return !1; + (E = !0), (S = !1); + } + if (A && !S) + return g || (g = new n()), E || c(t) ? i(t, e, r, v, y, g) : a(t, e, _, r, v, y, g); + if (!(r & u)) { + var I = S && m.call(t, '__wrapped__'), + P = T && m.call(e, '__wrapped__'); + if (I || P) { + var w = I ? t.value() : t, + C = P ? e.value() : e; + return g || (g = new n()), y(w, C, r, v, g); + } + } + return !!A && (g || (g = new n()), s(t, e, r, v, y, g)); + }; + }, + function (t, e, r) { + var n = r(81), + i = r(228), + a = r(229); + function s(t) { + var e = -1, + r = null == t ? 0 : t.length; + for (this.__data__ = new n(); ++e < r; ) this.add(t[e]); + } + (s.prototype.add = s.prototype.push = i), (s.prototype.has = a), (t.exports = s); + }, + function (t, e) { + var r = '__lodash_hash_undefined__'; + t.exports = function (t) { + return this.__data__.set(t, r), this; + }; + }, + function (t, e) { + t.exports = function (t) { + return this.__data__.has(t); + }; + }, + function (t, e) { + t.exports = function (t, e) { + for (var r = -1, n = null == t ? 0 : t.length; ++r < n; ) if (e(t[r], r, t)) return !0; + return !1; + }; + }, + function (t, e) { + t.exports = function (t, e) { + return t.has(e); + }; + }, + function (t, e, r) { + var n = r(47), + i = r(233), + a = r(79), + s = r(132), + o = r(234), + h = r(235), + l = 1, + c = 2, + u = '[object Boolean]', + f = '[object Date]', + p = '[object Error]', + d = '[object Map]', + m = '[object Number]', + v = '[object RegExp]', + y = '[object Set]', + g = '[object String]', + E = '[object Symbol]', + b = '[object ArrayBuffer]', + _ = '[object DataView]', + x = n ? n.prototype : void 0, + S = x ? x.valueOf : void 0; + t.exports = function (t, e, r, n, x, T, A) { + switch (r) { + case _: + if (t.byteLength != e.byteLength || t.byteOffset != e.byteOffset) return !1; + (t = t.buffer), (e = e.buffer); + case b: + return !(t.byteLength != e.byteLength || !T(new i(t), new i(e))); + case u: + case f: + case m: + return a(+t, +e); + case p: + return t.name == e.name && t.message == e.message; + case v: + case g: + return t == e + ''; + case d: + var I = o; + case y: + var P = n & l; + if ((I || (I = h), t.size != e.size && !P)) return !1; + var w = A.get(t); + if (w) return w == e; + (n |= c), A.set(t, e); + var C = s(I(t), I(e), n, x, T, A); + return A.delete(t), C; + case E: + if (S) return S.call(t) == S.call(e); + } + return !1; + }; + }, + function (t, e, r) { + var n = r(18).Uint8Array; + t.exports = n; + }, + function (t, e) { + t.exports = function (t) { + var e = -1, + r = Array(t.size); + return ( + t.forEach(function (t, n) { + r[++e] = [n, t]; + }), + r + ); + }; + }, + function (t, e) { + t.exports = function (t) { + var e = -1, + r = Array(t.size); + return ( + t.forEach(function (t) { + r[++e] = t; + }), + r + ); + }; + }, + function (t, e, r) { + var n = r(237), + i = 1, + a = Object.prototype.hasOwnProperty; + t.exports = function (t, e, r, s, o, h) { + var l = r & i, + c = n(t), + u = c.length; + if (u != n(e).length && !l) return !1; + for (var f = u; f--; ) { + var p = c[f]; + if (!(l ? p in e : a.call(e, p))) return !1; + } + var d = h.get(t), + m = h.get(e); + if (d && m) return d == e && m == t; + var v = !0; + h.set(t, e), h.set(e, t); + for (var y = l; ++f < u; ) { + var g = t[(p = c[f])], + E = e[p]; + if (s) var b = l ? s(E, g, p, e, t, h) : s(g, E, p, t, e, h); + if (!(void 0 === b ? g === E || o(g, E, r, s, h) : b)) { + v = !1; + break; + } + y || (y = 'constructor' == p); + } + if (v && !y) { + var _ = t.constructor, + x = e.constructor; + _ != x && + 'constructor' in t && + 'constructor' in e && + !('function' == typeof _ && _ instanceof _ && 'function' == typeof x && x instanceof x) && + (v = !1); + } + return h.delete(t), h.delete(e), v; + }; + }, + function (t, e, r) { + var n = r(133), + i = r(134), + a = r(63); + t.exports = function (t) { + return n(t, a, i); + }; + }, + function (t, e) { + t.exports = function (t, e) { + for (var r = -1, n = null == t ? 0 : t.length, i = 0, a = []; ++r < n; ) { + var s = t[r]; + e(s, r, t) && (a[i++] = s); + } + return a; + }; + }, + function (t, e) { + t.exports = function (t, e) { + for (var r = -1, n = Array(t); ++r < t; ) n[r] = e(r); + return n; + }; + }, + function (t, e, r) { + var n = r(39), + i = r(30), + a = '[object Arguments]'; + t.exports = function (t) { + return i(t) && n(t) == a; + }; + }, + function (t, e) { + t.exports = function () { + return !1; + }; + }, + function (t, e, r) { + var n = r(39), + i = r(86), + a = r(30), + s = {}; + (s['[object Float32Array]'] = + s['[object Float64Array]'] = + s['[object Int8Array]'] = + s['[object Int16Array]'] = + s['[object Int32Array]'] = + s['[object Uint8Array]'] = + s['[object Uint8ClampedArray]'] = + s['[object Uint16Array]'] = + s['[object Uint32Array]'] = + !0), + (s['[object Arguments]'] = + s['[object Array]'] = + s['[object ArrayBuffer]'] = + s['[object Boolean]'] = + s['[object DataView]'] = + s['[object Date]'] = + s['[object Error]'] = + s['[object Function]'] = + s['[object Map]'] = + s['[object Number]'] = + s['[object Object]'] = + s['[object RegExp]'] = + s['[object Set]'] = + s['[object String]'] = + s['[object WeakMap]'] = + !1), + (t.exports = function (t) { + return a(t) && i(t.length) && !!s[n(t)]; + }); + }, + function (t, e) { + t.exports = function (t) { + return function (e) { + return t(e); + }; + }; + }, + function (t, e, r) { + (function (t) { + var n = r(129), + i = e && !e.nodeType && e, + a = i && 'object' == typeof t && t && !t.nodeType && t, + s = a && a.exports === i && n.process, + o = (function () { + try { + var t = a && a.require && a.require('util').types; + return t || (s && s.binding && s.binding('util')); + } catch (t) {} + })(); + t.exports = o; + }).call(this, r(137)(t)); + }, + function (t, e, r) { + var n = r(138)(Object.keys, Object); + t.exports = n; + }, + function (t, e, r) { + var n = r(29)(r(18), 'DataView'); + t.exports = n; + }, + function (t, e, r) { + var n = r(29)(r(18), 'Promise'); + t.exports = n; + }, + function (t, e, r) { + var n = r(29)(r(18), 'Set'); + t.exports = n; + }, + function (t, e, r) { + var n = r(140), + i = r(63); + t.exports = function (t) { + for (var e = i(t), r = e.length; r--; ) { + var a = e[r], + s = t[a]; + e[r] = [a, s, n(s)]; + } + return e; + }; + }, + function (t, e, r) { + var n = r(131), + i = r(90), + a = r(256), + s = r(92), + o = r(140), + h = r(141), + l = r(48), + c = 1, + u = 2; + t.exports = function (t, e) { + return s(t) && o(e) + ? h(l(t), e) + : function (r) { + var s = i(r, t); + return void 0 === s && s === e ? a(r, t) : n(e, s, c | u); + }; + }; + }, + function (t, e, r) { + var n = r(252), + i = + /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, + a = /\\(\\)?/g, + s = n(function (t) { + var e = []; + return ( + 46 === t.charCodeAt(0) && e.push(''), + t.replace(i, function (t, r, n, i) { + e.push(n ? i.replace(a, '$1') : r || t); + }), + e + ); + }); + t.exports = s; + }, + function (t, e, r) { + var n = r(253), + i = 500; + t.exports = function (t) { + var e = n(t, function (t) { + return r.size === i && r.clear(), t; + }), + r = e.cache; + return e; + }; + }, + function (t, e, r) { + var n = r(81), + i = 'Expected a function'; + function a(t, e) { + if ('function' != typeof t || (null != e && 'function' != typeof e)) throw new TypeError(i); + var r = function () { + var n = arguments, + i = e ? e.apply(this, n) : n[0], + a = r.cache; + if (a.has(i)) return a.get(i); + var s = t.apply(this, n); + return (r.cache = a.set(i, s) || a), s; + }; + return (r.cache = new (a.Cache || n)()), r; + } + (a.Cache = n), (t.exports = a); + }, + function (t, e, r) { + var n = r(255); + t.exports = function (t) { + return null == t ? '' : n(t); + }; + }, + function (t, e, r) { + var n = r(47), + i = r(142), + a = r(10), + s = r(66), + o = 1 / 0, + h = n ? n.prototype : void 0, + l = h ? h.toString : void 0; + t.exports = function t(e) { + if ('string' == typeof e) return e; + if (a(e)) return i(e, t) + ''; + if (s(e)) return l ? l.call(e) : ''; + var r = e + ''; + return '0' == r && 1 / e == -o ? '-0' : r; + }; + }, + function (t, e, r) { + var n = r(257), + i = r(258); + t.exports = function (t, e) { + return null != t && i(t, e, n); + }; + }, + function (t, e) { + t.exports = function (t, e) { + return null != t && e in Object(t); + }; + }, + function (t, e, r) { + var n = r(65), + i = r(64), + a = r(10), + s = r(84), + o = r(86), + h = r(48); + t.exports = function (t, e, r) { + for (var l = -1, c = (e = n(e, t)).length, u = !1; ++l < c; ) { + var f = h(e[l]); + if (!(u = null != t && r(t, f))) break; + t = t[f]; + } + return u || ++l != c + ? u + : !!(c = null == t ? 0 : t.length) && o(c) && s(f, c) && (a(t) || i(t)); + }; + }, + function (t, e, r) { + var n = r(143), + i = r(260), + a = r(92), + s = r(48); + t.exports = function (t) { + return a(t) ? n(s(t)) : i(t); + }; + }, + function (t, e, r) { + var n = r(91); + t.exports = function (t) { + return function (e) { + return n(e, t); + }; + }; + }, + function (t, e, r) { + var n = r(94), + i = 1 / 0, + a = 1.7976931348623157e308; + t.exports = function (t) { + return t + ? (t = n(t)) === i || t === -i + ? (t < 0 ? -1 : 1) * a + : t == t + ? t + : 0 + : 0 === t + ? t + : 0; + }; + }, + function (t, e, r) { + var n = r(263), + i = /^\s+/; + t.exports = function (t) { + return t ? t.slice(0, n(t) + 1).replace(i, '') : t; + }; + }, + function (t, e) { + var r = /\s/; + t.exports = function (t) { + for (var e = t.length; e-- && r.test(t.charAt(e)); ); + return e; + }; + }, + function (t, e, r) { + var n = r(265); + r(323), + r(329), + r(340), + r(346), + r(347), + r(348), + r(349), + r(350), + r(351), + r(354), + r(355), + r(356), + r(357), + (t.exports = n); + }, + function (t, e, r) { + var n = r(266); + t.exports = n; + }, + function (t, e, r) { + r(267), + r(278), + r(279), + r(154), + r(282), + r(283), + r(285), + r(286), + r(288), + r(289), + r(290), + r(291), + r(292), + r(293), + r(158), + r(295), + r(296), + r(300), + r(301), + r(303), + r(304), + r(305), + r(306), + r(307), + r(308), + r(309), + r(314), + r(315), + r(316), + r(317), + r(318), + r(320); + var n = r(322); + t.exports = n.Array; + }, + function (t, e, r) { + var n = r(1), + i = r(276); + n( + { + target: 'Array', + stat: !0, + forced: !r(107)(function (t) { + Array.from(t); + }), + }, + { from: i }, + ); + }, + function (t, e, r) { + 'use strict'; + var n = {}.propertyIsEnumerable, + i = Object.getOwnPropertyDescriptor, + a = i && !n.call({ 1: 2 }, 1); + e.f = a + ? function (t) { + var e = i(this, t); + return !!e && e.enumerable; + } + : n; + }, + function (t, e, r) { + var n = r(0), + i = r(14), + a = r(12), + s = r(145), + o = r(33), + h = r(270), + l = r(6), + c = n.TypeError, + u = l('toPrimitive'); + t.exports = function (t, e) { + if (!a(t) || s(t)) return t; + var r, + n = o(t, u); + if (n) { + if ((void 0 === e && (e = 'default'), (r = i(n, t, e)), !a(r) || s(r))) return r; + throw c("Can't convert object to primitive value"); + } + return void 0 === e && (e = 'number'), h(t, e); + }; + }, + function (t, e, r) { + var n = r(0), + i = r(14), + a = r(5), + s = r(12), + o = n.TypeError; + t.exports = function (t, e) { + var r, n; + if ('string' === e && a((r = t.toString)) && !s((n = i(r, t)))) return n; + if (a((r = t.valueOf)) && !s((n = i(r, t)))) return n; + if ('string' !== e && a((r = t.toString)) && !s((n = i(r, t)))) return n; + throw o("Can't convert object to primitive value"); + }; + }, + function (t, e, r) { + var n = r(0), + i = r(5), + a = r(72), + s = n.WeakMap; + t.exports = i(s) && /native code/.test(a(s)); + }, + function (t, e, r) { + var n = r(16), + i = r(273), + a = r(95), + s = r(17); + t.exports = function (t, e) { + for (var r = i(e), o = s.f, h = a.f, l = 0; l < r.length; l++) { + var c = r[l]; + n(t, c) || o(t, c, h(e, c)); + } + }; + }, + function (t, e, r) { + var n = r(15), + i = r(2), + a = r(102), + s = r(275), + o = r(11), + h = i([].concat); + t.exports = + n('Reflect', 'ownKeys') || + function (t) { + var e = a.f(o(t)), + r = s.f; + return r ? h(e, r(t)) : e; + }; + }, + function (t, e, r) { + var n = r(34), + i = Math.min; + t.exports = function (t) { + return t > 0 ? i(n(t), 9007199254740991) : 0; + }; + }, + function (t, e) { + e.f = Object.getOwnPropertySymbols; + }, + function (t, e, r) { + 'use strict'; + var n = r(0), + i = r(21), + a = r(14), + s = r(7), + o = r(277), + h = r(153), + l = r(43), + c = r(4), + u = r(53), + f = r(75), + p = r(76), + d = n.Array; + t.exports = function (t) { + var e = s(t), + r = l(this), + n = arguments.length, + m = n > 1 ? arguments[1] : void 0, + v = void 0 !== m; + v && (m = i(m, n > 2 ? arguments[2] : void 0)); + var y, + g, + E, + b, + _, + x, + S = p(e), + T = 0; + if (!S || (this == d && h(S))) + for (y = c(e), g = r ? new this(y) : d(y); y > T; T++) + (x = v ? m(e[T], T) : e[T]), u(g, T, x); + else + for (_ = (b = f(e, S)).next, g = r ? new this() : []; !(E = a(_, b)).done; T++) + (x = v ? o(b, m, [E.value, T], !0) : E.value), u(g, T, x); + return (g.length = T), g; + }; + }, + function (t, e, r) { + var n = r(11), + i = r(152); + t.exports = function (t, e, r, a) { + try { + return a ? e(n(r)[0], r[1]) : e(r); + } catch (e) { + i(t, 'throw', e); + } + }; + }, + function (t, e, r) { + r(1)({ target: 'Array', stat: !0 }, { isArray: r(35) }); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(0), + a = r(9), + s = r(43), + o = r(53), + h = i.Array; + n( + { + target: 'Array', + stat: !0, + forced: a(function () { + function t() {} + return !(h.of.call(t) instanceof t); + }), + }, + { + of: function () { + for (var t = 0, e = arguments.length, r = new (s(this) ? this : h)(e); e > t; ) + o(r, t, arguments[t++]); + return (r.length = e), r; + }, + }, + ); + }, + function (t, e, r) { + var n = r(19), + i = r(17), + a = r(11), + s = r(24), + o = r(281); + t.exports = n + ? Object.defineProperties + : function (t, e) { + a(t); + for (var r, n = s(e), h = o(e), l = h.length, c = 0; l > c; ) i.f(t, (r = h[c++]), n[r]); + return t; + }; + }, + function (t, e, r) { + var n = r(151), + i = r(104); + t.exports = + Object.keys || + function (t) { + return n(t, i); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(0), + a = r(9), + s = r(35), + o = r(12), + h = r(7), + l = r(4), + c = r(53), + u = r(44), + f = r(54), + p = r(6), + d = r(31), + m = p('isConcatSpreadable'), + v = i.TypeError, + y = + d >= 51 || + !a(function () { + var t = []; + return (t[m] = !1), t.concat()[0] !== t; + }), + g = f('concat'), + E = function (t) { + if (!o(t)) return !1; + var e = t[m]; + return void 0 !== e ? !!e : s(t); + }; + n( + { target: 'Array', proto: !0, forced: !y || !g }, + { + concat: function (t) { + var e, + r, + n, + i, + a, + s = h(this), + o = u(s, 0), + f = 0; + for (e = -1, n = arguments.length; e < n; e++) + if (((a = -1 === e ? s : arguments[e]), E(a))) { + if (f + (i = l(a)) > 9007199254740991) throw v('Maximum allowed index exceeded'); + for (r = 0; r < i; r++, f++) r in a && c(o, f, a[r]); + } else { + if (f >= 9007199254740991) throw v('Maximum allowed index exceeded'); + c(o, f++, a); + } + return (o.length = f), o; + }, + }, + ); + }, + function (t, e, r) { + var n = r(1), + i = r(284), + a = r(8); + n({ target: 'Array', proto: !0 }, { copyWithin: i }), a('copyWithin'); + }, + function (t, e, r) { + 'use strict'; + var n = r(7), + i = r(51), + a = r(4), + s = Math.min; + t.exports = + [].copyWithin || + function (t, e) { + var r = n(this), + o = a(r), + h = i(t, o), + l = i(e, o), + c = arguments.length > 2 ? arguments[2] : void 0, + u = s((void 0 === c ? o : i(c, o)) - l, o - h), + f = 1; + for (l < h && h < l + u && ((f = -1), (l += u - 1), (h += u - 1)); u-- > 0; ) + l in r ? (r[h] = r[l]) : delete r[h], (h += f), (l += f); + return r; + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(25).every; + n( + { target: 'Array', proto: !0, forced: !r(26)('every') }, + { + every: function (t) { + return i(this, t, arguments.length > 1 ? arguments[1] : void 0); + }, + }, + ); + }, + function (t, e, r) { + var n = r(1), + i = r(287), + a = r(8); + n({ target: 'Array', proto: !0 }, { fill: i }), a('fill'); + }, + function (t, e, r) { + 'use strict'; + var n = r(7), + i = r(51), + a = r(4); + t.exports = function (t) { + for ( + var e = n(this), + r = a(e), + s = arguments.length, + o = i(s > 1 ? arguments[1] : void 0, r), + h = s > 2 ? arguments[2] : void 0, + l = void 0 === h ? r : i(h, r); + l > o; + + ) + e[o++] = t; + return e; + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(25).filter; + n( + { target: 'Array', proto: !0, forced: !r(54)('filter') }, + { + filter: function (t) { + return i(this, t, arguments.length > 1 ? arguments[1] : void 0); + }, + }, + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(25).find, + a = r(8), + s = !0; + 'find' in [] && + Array(1).find(function () { + s = !1; + }), + n( + { target: 'Array', proto: !0, forced: s }, + { + find: function (t) { + return i(this, t, arguments.length > 1 ? arguments[1] : void 0); + }, + }, + ), + a('find'); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(25).findIndex, + a = r(8), + s = !0; + 'findIndex' in [] && + Array(1).findIndex(function () { + s = !1; + }), + n( + { target: 'Array', proto: !0, forced: s }, + { + findIndex: function (t) { + return i(this, t, arguments.length > 1 ? arguments[1] : void 0); + }, + }, + ), + a('findIndex'); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(157), + a = r(7), + s = r(4), + o = r(34), + h = r(44); + n( + { target: 'Array', proto: !0 }, + { + flat: function () { + var t = arguments.length ? arguments[0] : void 0, + e = a(this), + r = s(e), + n = h(e, 0); + return (n.length = i(n, e, e, r, 0, void 0 === t ? 1 : o(t))), n; + }, + }, + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(157), + a = r(20), + s = r(7), + o = r(4), + h = r(44); + n( + { target: 'Array', proto: !0 }, + { + flatMap: function (t) { + var e, + r = s(this), + n = o(r); + return ( + a(t), + ((e = h(r, 0)).length = i( + e, + r, + r, + n, + 0, + 1, + t, + arguments.length > 1 ? arguments[1] : void 0, + )), + e + ); + }, + }, + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(294); + n({ target: 'Array', proto: !0, forced: [].forEach != i }, { forEach: i }); + }, + function (t, e, r) { + 'use strict'; + var n = r(25).forEach, + i = r(26)('forEach'); + t.exports = i + ? [].forEach + : function (t) { + return n(this, t, arguments.length > 1 ? arguments[1] : void 0); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(2), + a = r(103).indexOf, + s = r(26), + o = i([].indexOf), + h = !!o && 1 / o([1], 1, -0) < 0, + l = s('indexOf'); + n( + { target: 'Array', proto: !0, forced: h || !l }, + { + indexOf: function (t) { + var e = arguments.length > 1 ? arguments[1] : void 0; + return h ? o(this, t, e) || 0 : a(this, t, e); + }, + }, + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(24), + i = r(8), + a = r(52), + s = r(42), + o = r(108), + h = s.set, + l = s.getterFor('Array Iterator'); + (t.exports = o( + Array, + 'Array', + function (t, e) { + h(this, { type: 'Array Iterator', target: n(t), index: 0, kind: e }); + }, + function () { + var t = l(this), + e = t.target, + r = t.kind, + n = t.index++; + return !e || n >= e.length + ? ((t.target = void 0), { value: void 0, done: !0 }) + : 'keys' == r + ? { value: n, done: !1 } + : 'values' == r + ? { value: e[n], done: !1 } + : { value: [n, e[n]], done: !1 }; + }, + 'values', + )), + (a.Arguments = a.Array), + i('keys'), + i('values'), + i('entries'); + }, + function (t, e, r) { + 'use strict'; + var n = r(159).IteratorPrototype, + i = r(36), + a = r(67), + s = r(77), + o = r(52), + h = function () { + return this; + }; + t.exports = function (t, e, r) { + var l = e + ' Iterator'; + return (t.prototype = i(n, { next: a(1, r) })), s(t, l, !1, !0), (o[l] = h), t; + }; + }, + function (t, e, r) { + var n = r(9); + t.exports = !n(function () { + function t() {} + return (t.prototype.constructor = null), Object.getPrototypeOf(new t()) !== t.prototype; + }); + }, + function (t, e, r) { + var n = r(0), + i = r(5), + a = n.String, + s = n.TypeError; + t.exports = function (t) { + if ('object' == typeof t || i(t)) return t; + throw s("Can't set " + a(t) + ' as a prototype'); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(2), + a = r(41), + s = r(24), + o = r(26), + h = i([].join), + l = a != Object, + c = o('join', ','); + n( + { target: 'Array', proto: !0, forced: l || !c }, + { + join: function (t) { + return h(s(this), void 0 === t ? ',' : t); + }, + }, + ); + }, + function (t, e, r) { + var n = r(1), + i = r(302); + n({ target: 'Array', proto: !0, forced: i !== [].lastIndexOf }, { lastIndexOf: i }); + }, + function (t, e, r) { + 'use strict'; + var n = r(111), + i = r(24), + a = r(34), + s = r(4), + o = r(26), + h = Math.min, + l = [].lastIndexOf, + c = !!l && 1 / [1].lastIndexOf(1, -0) < 0, + u = o('lastIndexOf'), + f = c || !u; + t.exports = f + ? function (t) { + if (c) return n(l, this, arguments) || 0; + var e = i(this), + r = s(e), + o = r - 1; + for ( + arguments.length > 1 && (o = h(o, a(arguments[1]))), o < 0 && (o = r + o); + o >= 0; + o-- + ) + if (o in e && e[o] === t) return o || 0; + return -1; + } + : l; + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(25).map; + n( + { target: 'Array', proto: !0, forced: !r(54)('map') }, + { + map: function (t) { + return i(this, t, arguments.length > 1 ? arguments[1] : void 0); + }, + }, + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(160).left, + a = r(26), + s = r(31), + o = r(55); + n( + { target: 'Array', proto: !0, forced: !a('reduce') || (!o && s > 79 && s < 83) }, + { + reduce: function (t) { + var e = arguments.length; + return i(this, t, e, e > 1 ? arguments[1] : void 0); + }, + }, + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(160).right, + a = r(26), + s = r(31), + o = r(55); + n( + { target: 'Array', proto: !0, forced: !a('reduceRight') || (!o && s > 79 && s < 83) }, + { + reduceRight: function (t) { + return i(this, t, arguments.length, arguments.length > 1 ? arguments[1] : void 0); + }, + }, + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(2), + a = r(35), + s = i([].reverse), + o = [1, 2]; + n( + { target: 'Array', proto: !0, forced: String(o) === String(o.reverse()) }, + { + reverse: function () { + return a(this) && (this.length = this.length), s(this); + }, + }, + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(0), + a = r(35), + s = r(43), + o = r(12), + h = r(51), + l = r(4), + c = r(24), + u = r(53), + f = r(6), + p = r(54), + d = r(78), + m = p('slice'), + v = f('species'), + y = i.Array, + g = Math.max; + n( + { target: 'Array', proto: !0, forced: !m }, + { + slice: function (t, e) { + var r, + n, + i, + f = c(this), + p = l(f), + m = h(t, p), + E = h(void 0 === e ? p : e, p); + if ( + a(f) && + ((r = f.constructor), + s(r) && (r === y || a(r.prototype)) + ? (r = void 0) + : o(r) && null === (r = r[v]) && (r = void 0), + r === y || void 0 === r) + ) + return d(f, m, E); + for (n = new (void 0 === r ? y : r)(g(E - m, 0)), i = 0; m < E; m++, i++) + m in f && u(n, i, f[m]); + return (n.length = i), n; + }, + }, + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(25).some; + n( + { target: 'Array', proto: !0, forced: !r(26)('some') }, + { + some: function (t) { + return i(this, t, arguments.length > 1 ? arguments[1] : void 0); + }, + }, + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(2), + a = r(20), + s = r(7), + o = r(4), + h = r(112), + l = r(9), + c = r(310), + u = r(26), + f = r(311), + p = r(312), + d = r(31), + m = r(313), + v = [], + y = i(v.sort), + g = i(v.push), + E = l(function () { + v.sort(void 0); + }), + b = l(function () { + v.sort(null); + }), + _ = u('sort'), + x = !l(function () { + if (d) return d < 70; + if (!(f && f > 3)) { + if (p) return !0; + if (m) return m < 603; + var t, + e, + r, + n, + i = ''; + for (t = 65; t < 76; t++) { + switch (((e = String.fromCharCode(t)), t)) { + case 66: + case 69: + case 70: + case 72: + r = 3; + break; + case 68: + case 71: + r = 4; + break; + default: + r = 2; + } + for (n = 0; n < 47; n++) v.push({ k: e + n, v: r }); + } + for ( + v.sort(function (t, e) { + return e.v - t.v; + }), + n = 0; + n < v.length; + n++ + ) + (e = v[n].k.charAt(0)), i.charAt(i.length - 1) !== e && (i += e); + return 'DGBEFHACIJK' !== i; + } + }); + n( + { target: 'Array', proto: !0, forced: E || !b || !_ || !x }, + { + sort: function (t) { + void 0 !== t && a(t); + var e = s(this); + if (x) return void 0 === t ? y(e) : y(e, t); + var r, + n, + i = [], + l = o(e); + for (n = 0; n < l; n++) n in e && g(i, e[n]); + for ( + c( + i, + (function (t) { + return function (e, r) { + return void 0 === r + ? -1 + : void 0 === e + ? 1 + : void 0 !== t + ? +t(e, r) || 0 + : h(e) > h(r) + ? 1 + : -1; + }; + })(t), + ), + r = i.length, + n = 0; + n < r; + + ) + e[n] = i[n++]; + for (; n < l; ) delete e[n++]; + return e; + }, + }, + ); + }, + function (t, e, r) { + var n = r(78), + i = Math.floor, + a = function (t, e) { + var r = t.length, + h = i(r / 2); + return r < 8 ? s(t, e) : o(t, a(n(t, 0, h), e), a(n(t, h), e), e); + }, + s = function (t, e) { + for (var r, n, i = t.length, a = 1; a < i; ) { + for (n = a, r = t[a]; n && e(t[n - 1], r) > 0; ) t[n] = t[--n]; + n !== a++ && (t[n] = r); + } + return t; + }, + o = function (t, e, r, n) { + for (var i = e.length, a = r.length, s = 0, o = 0; s < i || o < a; ) + t[s + o] = + s < i && o < a ? (n(e[s], r[o]) <= 0 ? e[s++] : r[o++]) : s < i ? e[s++] : r[o++]; + return t; + }; + t.exports = a; + }, + function (t, e, r) { + var n = r(32).match(/firefox\/(\d+)/i); + t.exports = !!n && +n[1]; + }, + function (t, e, r) { + var n = r(32); + t.exports = /MSIE|Trident/.test(n); + }, + function (t, e, r) { + var n = r(32).match(/AppleWebKit\/(\d+)\./); + t.exports = !!n && +n[1]; + }, + function (t, e, r) { + r(113)('Array'); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(0), + a = r(51), + s = r(34), + o = r(4), + h = r(7), + l = r(44), + c = r(53), + u = r(54)('splice'), + f = i.TypeError, + p = Math.max, + d = Math.min; + n( + { target: 'Array', proto: !0, forced: !u }, + { + splice: function (t, e) { + var r, + n, + i, + u, + m, + v, + y = h(this), + g = o(y), + E = a(t, g), + b = arguments.length; + if ( + (0 === b + ? (r = n = 0) + : 1 === b + ? ((r = 0), (n = g - E)) + : ((r = b - 2), (n = d(p(s(e), 0), g - E))), + g + r - n > 9007199254740991) + ) + throw f('Maximum allowed length exceeded'); + for (i = l(y, n), u = 0; u < n; u++) (m = E + u) in y && c(i, u, y[m]); + if (((i.length = n), r < n)) { + for (u = E; u < g - n; u++) (v = u + r), (m = u + n) in y ? (y[v] = y[m]) : delete y[v]; + for (u = g; u > g - n + r; u--) delete y[u - 1]; + } else if (r > n) + for (u = g - n; u > E; u--) + (v = u + r - 1), (m = u + n - 1) in y ? (y[v] = y[m]) : delete y[v]; + for (u = 0; u < r; u++) y[u + E] = arguments[u + 2]; + return (y.length = g - n + r), i; + }, + }, + ); + }, + function (t, e, r) { + r(8)('flat'); + }, + function (t, e, r) { + r(8)('flatMap'); + }, + function (t, e, r) { + var n = r(106), + i = r(27), + a = r(319); + n || i(Object.prototype, 'toString', a, { unsafe: !0 }); + }, + function (t, e, r) { + 'use strict'; + var n = r(106), + i = r(74); + t.exports = n + ? {}.toString + : function () { + return '[object ' + i(this) + ']'; + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(321).charAt, + i = r(112), + a = r(42), + s = r(108), + o = a.set, + h = a.getterFor('String Iterator'); + s( + String, + 'String', + function (t) { + o(this, { type: 'String Iterator', string: i(t), index: 0 }); + }, + function () { + var t, + e = h(this), + r = e.string, + i = e.index; + return i >= r.length + ? { value: void 0, done: !0 } + : ((t = n(r, i)), (e.index += t.length), { value: t, done: !1 }); + }, + ); + }, + function (t, e, r) { + var n = r(2), + i = r(34), + a = r(112), + s = r(96), + o = n(''.charAt), + h = n(''.charCodeAt), + l = n(''.slice), + c = function (t) { + return function (e, r) { + var n, + c, + u = a(s(e)), + f = i(r), + p = u.length; + return f < 0 || f >= p + ? t + ? '' + : void 0 + : (n = h(u, f)) < 55296 || + n > 56319 || + f + 1 === p || + (c = h(u, f + 1)) < 56320 || + c > 57343 + ? t + ? o(u, f) + : n + : t + ? l(u, f, f + 2) + : c - 56320 + ((n - 55296) << 10) + 65536; + }; + }; + t.exports = { codeAt: c(!1), charAt: c(!0) }; + }, + function (t, e, r) { + var n = r(0); + t.exports = n; + }, + function (t, e, r) { + 'use strict'; + r(324)( + 'Map', + function (t) { + return function () { + return t(this, arguments.length ? arguments[0] : void 0); + }; + }, + r(328), + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(0), + a = r(2), + s = r(105), + o = r(27), + h = r(161), + l = r(114), + c = r(115), + u = r(5), + f = r(12), + p = r(9), + d = r(107), + m = r(77), + v = r(327); + t.exports = function (t, e, r) { + var y = -1 !== t.indexOf('Map'), + g = -1 !== t.indexOf('Weak'), + E = y ? 'set' : 'add', + b = i[t], + _ = b && b.prototype, + x = b, + S = {}, + T = function (t) { + var e = a(_[t]); + o( + _, + t, + 'add' == t + ? function (t) { + return e(this, 0 === t ? 0 : t), this; + } + : 'delete' == t + ? function (t) { + return !(g && !f(t)) && e(this, 0 === t ? 0 : t); + } + : 'get' == t + ? function (t) { + return g && !f(t) ? void 0 : e(this, 0 === t ? 0 : t); + } + : 'has' == t + ? function (t) { + return !(g && !f(t)) && e(this, 0 === t ? 0 : t); + } + : function (t, r) { + return e(this, 0 === t ? 0 : t, r), this; + }, + ); + }; + if ( + s( + t, + !u(b) || + !( + g || + (_.forEach && + !p(function () { + new b().entries().next(); + })) + ), + ) + ) + (x = r.getConstructor(e, t, y, E)), h.enable(); + else if (s(t, !0)) { + var A = new x(), + I = A[E](g ? {} : -0, 1) != A, + P = p(function () { + A.has(1); + }), + w = d(function (t) { + new b(t); + }), + C = + !g && + p(function () { + for (var t = new b(), e = 5; e--; ) t[E](e, e); + return !t.has(-0); + }); + w || + (((x = e(function (t, e) { + c(t, _); + var r = v(new b(), t, x); + return null != e && l(e, r[E], { that: r, AS_ENTRIES: y }), r; + })).prototype = _), + (_.constructor = x)), + (P || C) && (T('delete'), T('has'), y && T('get')), + (C || I) && T(E), + g && _.clear && delete _.clear; + } + return ( + (S[t] = x), n({ global: !0, forced: x != b }, S), m(x, t), g || r.setStrong(x, t, y), x + ); + }; + }, + function (t, e, r) { + var n = r(49), + i = r(24), + a = r(102).f, + s = r(78), + o = + 'object' == typeof window && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) + : []; + t.exports.f = function (t) { + return o && 'Window' == n(t) + ? (function (t) { + try { + return a(t); + } catch (t) { + return s(o); + } + })(t) + : a(i(t)); + }; + }, + function (t, e, r) { + var n = r(9); + t.exports = !n(function () { + return Object.isExtensible(Object.preventExtensions({})); + }); + }, + function (t, e, r) { + var n = r(5), + i = r(12), + a = r(110); + t.exports = function (t, e, r) { + var s, o; + return ( + a && + n((s = e.constructor)) && + s !== r && + i((o = s.prototype)) && + o !== r.prototype && + a(t, o), + t + ); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(17).f, + i = r(36), + a = r(116), + s = r(21), + o = r(115), + h = r(114), + l = r(108), + c = r(113), + u = r(19), + f = r(161).fastKey, + p = r(42), + d = p.set, + m = p.getterFor; + t.exports = { + getConstructor: function (t, e, r, l) { + var c = t(function (t, n) { + o(t, p), + d(t, { type: e, index: i(null), first: void 0, last: void 0, size: 0 }), + u || (t.size = 0), + null != n && h(n, t[l], { that: t, AS_ENTRIES: r }); + }), + p = c.prototype, + v = m(e), + y = function (t, e, r) { + var n, + i, + a = v(t), + s = g(t, e); + return ( + s + ? (s.value = r) + : ((a.last = s = + { + index: (i = f(e, !0)), + key: e, + value: r, + previous: (n = a.last), + next: void 0, + removed: !1, + }), + a.first || (a.first = s), + n && (n.next = s), + u ? a.size++ : t.size++, + 'F' !== i && (a.index[i] = s)), + t + ); + }, + g = function (t, e) { + var r, + n = v(t), + i = f(e); + if ('F' !== i) return n.index[i]; + for (r = n.first; r; r = r.next) if (r.key == e) return r; + }; + return ( + a(p, { + clear: function () { + for (var t = v(this), e = t.index, r = t.first; r; ) + (r.removed = !0), + r.previous && (r.previous = r.previous.next = void 0), + delete e[r.index], + (r = r.next); + (t.first = t.last = void 0), u ? (t.size = 0) : (this.size = 0); + }, + delete: function (t) { + var e = v(this), + r = g(this, t); + if (r) { + var n = r.next, + i = r.previous; + delete e.index[r.index], + (r.removed = !0), + i && (i.next = n), + n && (n.previous = i), + e.first == r && (e.first = n), + e.last == r && (e.last = i), + u ? e.size-- : this.size--; + } + return !!r; + }, + forEach: function (t) { + for ( + var e, r = v(this), n = s(t, arguments.length > 1 ? arguments[1] : void 0); + (e = e ? e.next : r.first); + + ) + for (n(e.value, e.key, this); e && e.removed; ) e = e.previous; + }, + has: function (t) { + return !!g(this, t); + }, + }), + a( + p, + r + ? { + get: function (t) { + var e = g(this, t); + return e && e.value; + }, + set: function (t, e) { + return y(this, 0 === t ? 0 : t, e); + }, + } + : { + add: function (t) { + return y(this, (t = 0 === t ? 0 : t), t); + }, + }, + ), + u && + n(p, 'size', { + get: function () { + return v(this).size; + }, + }), + c + ); + }, + setStrong: function (t, e, r) { + var n = e + ' Iterator', + i = m(e), + a = m(n); + l( + t, + e, + function (t, e) { + d(this, { type: n, target: t, state: i(t), kind: e, last: void 0 }); + }, + function () { + for (var t = a(this), e = t.kind, r = t.last; r && r.removed; ) r = r.previous; + return t.target && (t.last = r = r ? r.next : t.state.first) + ? 'keys' == e + ? { value: r.key, done: !1 } + : 'values' == e + ? { value: r.value, done: !1 } + : { value: [r.key, r.value], done: !1 } + : ((t.target = void 0), { value: void 0, done: !0 }); + }, + r ? 'entries' : 'values', + !r, + !0, + ), + c(e); + }, + }; + }, + function (t, e, r) { + 'use strict'; + var n, + i, + a, + s, + o = r(1), + h = r(50), + l = r(0), + c = r(15), + u = r(14), + f = r(330), + p = r(27), + d = r(116), + m = r(110), + v = r(77), + y = r(113), + g = r(20), + E = r(5), + b = r(12), + _ = r(115), + x = r(72), + S = r(114), + T = r(107), + A = r(331), + I = r(162).set, + P = r(333), + w = r(336), + C = r(337), + D = r(164), + M = r(338), + O = r(42), + F = r(105), + k = r(6), + R = r(339), + L = r(55), + N = r(31), + V = k('species'), + B = O.get, + G = O.set, + j = O.getterFor('Promise'), + z = f && f.prototype, + H = f, + X = z, + W = l.TypeError, + U = l.document, + q = l.process, + Y = D.f, + K = Y, + Q = !!(U && U.createEvent && l.dispatchEvent), + $ = E(l.PromiseRejectionEvent), + Z = !1, + J = F('Promise', function () { + var t = x(H), + e = t !== String(H); + if (!e && 66 === N) return !0; + if (h && !X.finally) return !0; + if (N >= 51 && /native code/.test(t)) return !1; + var r = new H(function (t) { + t(1); + }), + n = function (t) { + t( + function () {}, + function () {}, + ); + }; + return ( + ((r.constructor = {})[V] = n), + !(Z = r.then(function () {}) instanceof n) || (!e && R && !$) + ); + }), + tt = + J || + !T(function (t) { + H.all(t).catch(function () {}); + }), + et = function (t) { + var e; + return !(!b(t) || !E((e = t.then))) && e; + }, + rt = function (t, e) { + if (!t.notified) { + t.notified = !0; + var r = t.reactions; + P(function () { + for (var n = t.value, i = 1 == t.state, a = 0; r.length > a; ) { + var s, + o, + h, + l = r[a++], + c = i ? l.ok : l.fail, + f = l.resolve, + p = l.reject, + d = l.domain; + try { + c + ? (i || (2 === t.rejection && st(t), (t.rejection = 1)), + !0 === c ? (s = n) : (d && d.enter(), (s = c(n)), d && (d.exit(), (h = !0))), + s === l.promise + ? p(W('Promise-chain cycle')) + : (o = et(s)) + ? u(o, s, f, p) + : f(s)) + : p(n); + } catch (t) { + d && !h && d.exit(), p(t); + } + } + (t.reactions = []), (t.notified = !1), e && !t.rejection && it(t); + }); + } + }, + nt = function (t, e, r) { + var n, i; + Q + ? (((n = U.createEvent('Event')).promise = e), + (n.reason = r), + n.initEvent(t, !1, !0), + l.dispatchEvent(n)) + : (n = { promise: e, reason: r }), + !$ && (i = l['on' + t]) + ? i(n) + : 'unhandledrejection' === t && C('Unhandled promise rejection', r); + }, + it = function (t) { + u(I, l, function () { + var e, + r = t.facade, + n = t.value; + if ( + at(t) && + ((e = M(function () { + L ? q.emit('unhandledRejection', n, r) : nt('unhandledrejection', r, n); + })), + (t.rejection = L || at(t) ? 2 : 1), + e.error) + ) + throw e.value; + }); + }, + at = function (t) { + return 1 !== t.rejection && !t.parent; + }, + st = function (t) { + u(I, l, function () { + var e = t.facade; + L ? q.emit('rejectionHandled', e) : nt('rejectionhandled', e, t.value); + }); + }, + ot = function (t, e, r) { + return function (n) { + t(e, n, r); + }; + }, + ht = function (t, e, r) { + t.done || ((t.done = !0), r && (t = r), (t.value = e), (t.state = 2), rt(t, !0)); + }, + lt = function (t, e, r) { + if (!t.done) { + (t.done = !0), r && (t = r); + try { + if (t.facade === e) throw W("Promise can't be resolved itself"); + var n = et(e); + n + ? P(function () { + var r = { done: !1 }; + try { + u(n, e, ot(lt, r, t), ot(ht, r, t)); + } catch (e) { + ht(r, e, t); + } + }) + : ((t.value = e), (t.state = 1), rt(t, !1)); + } catch (e) { + ht({ done: !1 }, e, t); + } + } + }; + if ( + J && + ((X = (H = function (t) { + _(this, X), g(t), u(n, this); + var e = B(this); + try { + t(ot(lt, e), ot(ht, e)); + } catch (t) { + ht(e, t); + } + }).prototype), + ((n = function (t) { + G(this, { + type: 'Promise', + done: !1, + notified: !1, + parent: !1, + reactions: [], + rejection: !1, + state: 0, + value: void 0, + }); + }).prototype = d(X, { + then: function (t, e) { + var r = j(this), + n = r.reactions, + i = Y(A(this, H)); + return ( + (i.ok = !E(t) || t), + (i.fail = E(e) && e), + (i.domain = L ? q.domain : void 0), + (r.parent = !0), + (n[n.length] = i), + 0 != r.state && rt(r, !1), + i.promise + ); + }, + catch: function (t) { + return this.then(void 0, t); + }, + })), + (i = function () { + var t = new n(), + e = B(t); + (this.promise = t), (this.resolve = ot(lt, e)), (this.reject = ot(ht, e)); + }), + (D.f = Y = + function (t) { + return t === H || t === a ? new i(t) : K(t); + }), + !h && E(f) && z !== Object.prototype) + ) { + (s = z.then), + Z || + (p( + z, + 'then', + function (t, e) { + var r = this; + return new H(function (t, e) { + u(s, r, t, e); + }).then(t, e); + }, + { unsafe: !0 }, + ), + p(z, 'catch', X.catch, { unsafe: !0 })); + try { + delete z.constructor; + } catch (t) {} + m && m(z, X); + } + o({ global: !0, wrap: !0, forced: J }, { Promise: H }), + v(H, 'Promise', !1, !0), + y('Promise'), + (a = c('Promise')), + o( + { target: 'Promise', stat: !0, forced: J }, + { + reject: function (t) { + var e = Y(this); + return u(e.reject, void 0, t), e.promise; + }, + }, + ), + o( + { target: 'Promise', stat: !0, forced: h || J }, + { + resolve: function (t) { + return w(h && this === a ? H : this, t); + }, + }, + ), + o( + { target: 'Promise', stat: !0, forced: tt }, + { + all: function (t) { + var e = this, + r = Y(e), + n = r.resolve, + i = r.reject, + a = M(function () { + var r = g(e.resolve), + a = [], + s = 0, + o = 1; + S(t, function (t) { + var h = s++, + l = !1; + o++, + u(r, e, t).then(function (t) { + l || ((l = !0), (a[h] = t), --o || n(a)); + }, i); + }), + --o || n(a); + }); + return a.error && i(a.value), r.promise; + }, + race: function (t) { + var e = this, + r = Y(e), + n = r.reject, + i = M(function () { + var i = g(e.resolve); + S(t, function (t) { + u(i, e, t).then(r.resolve, n); + }); + }); + return i.error && n(i.value), r.promise; + }, + }, + ); + }, + function (t, e, r) { + var n = r(0); + t.exports = n.Promise; + }, + function (t, e, r) { + var n = r(11), + i = r(332), + a = r(6)('species'); + t.exports = function (t, e) { + var r, + s = n(t).constructor; + return void 0 === s || null == (r = n(s)[a]) ? e : i(r); + }; + }, + function (t, e, r) { + var n = r(0), + i = r(43), + a = r(69), + s = n.TypeError; + t.exports = function (t) { + if (i(t)) return t; + throw s(a(t) + ' is not a constructor'); + }; + }, + function (t, e, r) { + var n, + i, + a, + s, + o, + h, + l, + c, + u = r(0), + f = r(21), + p = r(95).f, + d = r(162).set, + m = r(163), + v = r(334), + y = r(335), + g = r(55), + E = u.MutationObserver || u.WebKitMutationObserver, + b = u.document, + _ = u.process, + x = u.Promise, + S = p(u, 'queueMicrotask'), + T = S && S.value; + T || + ((n = function () { + var t, e; + for (g && (t = _.domain) && t.exit(); i; ) { + (e = i.fn), (i = i.next); + try { + e(); + } catch (t) { + throw (i ? s() : (a = void 0), t); + } + } + (a = void 0), t && t.enter(); + }), + m || g || y || !E || !b + ? !v && x && x.resolve + ? (((l = x.resolve(void 0)).constructor = x), + (c = f(l.then, l)), + (s = function () { + c(n); + })) + : g + ? (s = function () { + _.nextTick(n); + }) + : ((d = f(d, u)), + (s = function () { + d(n); + })) + : ((o = !0), + (h = b.createTextNode('')), + new E(n).observe(h, { characterData: !0 }), + (s = function () { + h.data = o = !o; + }))), + (t.exports = + T || + function (t) { + var e = { fn: t, next: void 0 }; + a && (a.next = e), i || ((i = e), s()), (a = e); + }); + }, + function (t, e, r) { + var n = r(32), + i = r(0); + t.exports = /ipad|iphone|ipod/i.test(n) && void 0 !== i.Pebble; + }, + function (t, e, r) { + var n = r(32); + t.exports = /web0s(?!.*chrome)/i.test(n); + }, + function (t, e, r) { + var n = r(11), + i = r(12), + a = r(164); + t.exports = function (t, e) { + if ((n(t), i(e) && e.constructor === t)) return e; + var r = a.f(t); + return (0, r.resolve)(e), r.promise; + }; + }, + function (t, e, r) { + var n = r(0); + t.exports = function (t, e) { + var r = n.console; + r && r.error && (1 == arguments.length ? r.error(t) : r.error(t, e)); + }; + }, + function (t, e) { + t.exports = function (t) { + try { + return { error: !1, value: t() }; + } catch (t) { + return { error: !0, value: t }; + } + }; + }, + function (t, e) { + t.exports = 'object' == typeof window; + }, + function (t, e, r) { + r(1)({ target: 'Array', stat: !0 }, { fromAsync: r(341) }); + }, + function (t, e, r) { + 'use strict'; + var n = r(21), + i = r(7), + a = r(43), + s = r(342), + o = r(75), + h = r(76), + l = r(33), + c = r(344), + u = r(15), + f = r(6), + p = r(165), + d = r(345).toArray, + m = f('asyncIterator'), + v = c('Array').values; + t.exports = function (t) { + var e = this, + r = arguments.length, + c = r > 1 ? arguments[1] : void 0, + f = r > 2 ? arguments[2] : void 0; + return new (u('Promise'))(function (r) { + var u = i(t); + void 0 !== c && (c = n(c, f)); + var y = l(u, m), + g = y ? void 0 : h(u) || v, + E = a(e) ? new e() : [], + b = y ? s(u, y) : new p(o(u, g)); + r(d(b, c, E)); + }); + }; + }, + function (t, e, r) { + var n = r(14), + i = r(165), + a = r(11), + s = r(75), + o = r(33), + h = r(6)('asyncIterator'); + t.exports = function (t, e) { + var r = arguments.length < 2 ? o(t, h) : e; + return r ? a(n(r, t)) : new i(s(t)); + }; + }, + function (t, e, r) { + var n, + i, + a = r(0), + s = r(70), + o = r(5), + h = r(36), + l = r(109), + c = r(27), + u = r(6), + f = r(50), + p = u('asyncIterator'), + d = a.AsyncIterator, + m = s.AsyncIteratorPrototype; + if (m) n = m; + else if (o(d)) n = d.prototype; + else if (s.USE_FUNCTION_CONSTRUCTOR || a.USE_FUNCTION_CONSTRUCTOR) + try { + (i = l(l(l(Function('return async function*(){}()')())))), + l(i) === Object.prototype && (n = i); + } catch (t) {} + n ? f && (n = h(n)) : (n = {}), + o(n[p]) || + c(n, p, function () { + return this; + }), + (t.exports = n); + }, + function (t, e, r) { + var n = r(0); + t.exports = function (t) { + return n[t].prototype; + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(0), + i = r(14), + a = r(20), + s = r(11), + o = r(15), + h = r(33), + l = n.TypeError, + c = function (t) { + var e = 0 == t, + r = 1 == t, + n = 2 == t, + c = 3 == t; + return function (t, u, f) { + s(t); + var p = o('Promise'), + d = a(t.next), + m = 0, + v = void 0 !== u; + return ( + (!v && e) || a(u), + new p(function (a, o) { + var y = function (e, r) { + try { + var n = h(t, 'return'); + if (n) + return p.resolve(i(n, t)).then( + function () { + e(r); + }, + function (t) { + o(t); + }, + ); + } catch (t) { + return o(t); + } + e(r); + }, + g = function (t) { + y(o, t); + }, + E = function () { + try { + if (e && m > 9007199254740991 && v) + throw l('The allowed number of iterations has been exceeded'); + p.resolve(s(i(d, t))).then(function (t) { + try { + if (s(t).done) e ? ((f.length = m), a(f)) : a(!c && (n || void 0)); + else { + var i = t.value; + v + ? p.resolve(e ? u(i, m) : u(i)).then(function (t) { + r + ? E() + : n + ? t + ? E() + : y(a, !1) + : e + ? ((f[m++] = t), E()) + : t + ? y(a, c || i) + : E(); + }, g) + : ((f[m++] = i), E()); + } + } catch (t) { + g(t); + } + }, g); + } catch (t) { + g(t); + } + }; + E(); + }) + ); + }; + }; + t.exports = { toArray: c(0), forEach: c(1), every: c(2), some: c(3), find: c(4) }; + }, + function (t, e, r) { + r(154); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(25).filterReject, + a = r(8); + n( + { target: 'Array', proto: !0 }, + { + filterOut: function (t) { + return i(this, t, arguments.length > 1 ? arguments[1] : void 0); + }, + }, + ), + a('filterOut'); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(25).filterReject, + a = r(8); + n( + { target: 'Array', proto: !0 }, + { + filterReject: function (t) { + return i(this, t, arguments.length > 1 ? arguments[1] : void 0); + }, + }, + ), + a('filterReject'); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(166).findLast, + a = r(8); + n( + { target: 'Array', proto: !0 }, + { + findLast: function (t) { + return i(this, t, arguments.length > 1 ? arguments[1] : void 0); + }, + }, + ), + a('findLast'); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(166).findLastIndex, + a = r(8); + n( + { target: 'Array', proto: !0 }, + { + findLastIndex: function (t) { + return i(this, t, arguments.length > 1 ? arguments[1] : void 0); + }, + }, + ), + a('findLastIndex'); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(352), + a = r(156), + s = r(8); + n( + { target: 'Array', proto: !0 }, + { + groupBy: function (t) { + var e = arguments.length > 1 ? arguments[1] : void 0; + return i(this, t, e, a); + }, + }, + ), + s('groupBy'); + }, + function (t, e, r) { + var n = r(0), + i = r(21), + a = r(2), + s = r(41), + o = r(7), + h = r(68), + l = r(4), + c = r(36), + u = r(353), + f = n.Array, + p = a([].push); + t.exports = function (t, e, r, n) { + for (var a, d, m, v = o(t), y = s(v), g = i(e, r), E = c(null), b = l(y), _ = 0; b > _; _++) + (m = y[_]), (d = h(g(m, _, v))) in E ? p(E[d], m) : (E[d] = [m]); + if (n && (a = n(v)) !== f) for (d in E) E[d] = u(a, E[d]); + return E; + }; + }, + function (t, e) { + t.exports = function (t, e) { + for (var r = 0, n = e.length, i = new t(n); n > r; ) i[r] = e[r++]; + return i; + }; + }, + function (t, e, r) { + var n = r(1), + i = r(35), + a = Object.isFrozen, + s = function (t, e) { + if (!a || !i(t) || !a(t)) return !1; + for (var r, n = 0, s = t.length; n < s; ) + if (!('string' == typeof (r = t[n++]) || (e && void 0 === r))) return !1; + return 0 !== s; + }; + n( + { target: 'Array', stat: !0 }, + { + isTemplateObject: function (t) { + if (!s(t, !0)) return !1; + var e = t.raw; + return !(e.length !== t.length || !s(e, !1)); + }, + }, + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(19), + i = r(8), + a = r(7), + s = r(4), + o = r(17).f; + !n || + 'lastItem' in [] || + (o(Array.prototype, 'lastItem', { + configurable: !0, + get: function () { + var t = a(this), + e = s(t); + return 0 == e ? void 0 : t[e - 1]; + }, + set: function (t) { + var e = a(this), + r = s(e); + return (e[0 == r ? 0 : r - 1] = t); + }, + }), + i('lastItem')); + }, + function (t, e, r) { + 'use strict'; + var n = r(19), + i = r(8), + a = r(7), + s = r(4), + o = r(17).f; + !n || + 'lastIndex' in [] || + (o(Array.prototype, 'lastIndex', { + configurable: !0, + get: function () { + var t = a(this), + e = s(t); + return 0 == e ? 0 : e - 1; + }, + }), + i('lastIndex')); + }, + function (t, e, r) { + 'use strict'; + var n = r(1), + i = r(8); + n({ target: 'Array', proto: !0 }, { uniqueBy: r(358) }), i('uniqueBy'); + }, + function (t, e, r) { + 'use strict'; + var n = r(15), + i = r(2), + a = r(20), + s = r(4), + o = r(7), + h = r(44), + l = n('Map'), + c = l.prototype, + u = i(c.forEach), + f = i(c.has), + p = i(c.set), + d = i([].push); + t.exports = function (t) { + var e, + r, + n, + i = o(this), + c = s(i), + m = h(i, 0), + v = new l(), + y = + null != t + ? a(t) + : function (t) { + return t; + }; + for (e = 0; e < c; e++) (n = y((r = i[e]))), f(v, n) || p(v, n, r); + return ( + u(v, function (t) { + d(m, t); + }), + m + ); + }; + }, + function (module, exports, __webpack_require__) { + var __WEBPACK_AMD_DEFINE_RESULT__, root, factory; + 'undefined' != typeof navigator && + ((root = window || {}), + (factory = function (window) { + 'use strict'; + var svgNS = 'http://www.w3.org/2000/svg', + locationHref = '', + initialDefaultFrame = -999999, + subframeEnabled = !0, + idPrefix = '', + expressionsPlugin, + isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent), + cachedColors = {}, + bmRnd, + bmPow = Math.pow, + bmSqrt = Math.sqrt, + bmFloor = Math.floor, + bmMax = Math.max, + bmMin = Math.min, + BMMath = {}; + function ProjectInterface() { + return {}; + } + !(function () { + var t, + e = [ + 'abs', + 'acos', + 'acosh', + 'asin', + 'asinh', + 'atan', + 'atanh', + 'atan2', + 'ceil', + 'cbrt', + 'expm1', + 'clz32', + 'cos', + 'cosh', + 'exp', + 'floor', + 'fround', + 'hypot', + 'imul', + 'log', + 'log1p', + 'log2', + 'log10', + 'max', + 'min', + 'pow', + 'random', + 'round', + 'sign', + 'sin', + 'sinh', + 'sqrt', + 'tan', + 'tanh', + 'trunc', + 'E', + 'LN10', + 'LN2', + 'LOG10E', + 'LOG2E', + 'PI', + 'SQRT1_2', + 'SQRT2', + ], + r = e.length; + for (t = 0; t < r; t += 1) BMMath[e[t]] = Math[e[t]]; + })(), + (BMMath.random = Math.random), + (BMMath.abs = function (t) { + if ('object' == typeof t && t.length) { + var e, + r = createSizedArray(t.length), + n = t.length; + for (e = 0; e < n; e += 1) r[e] = Math.abs(t[e]); + return r; + } + return Math.abs(t); + }); + var defaultCurveSegments = 150, + degToRads = Math.PI / 180, + roundCorner = 0.5519; + function roundValues(t) { + bmRnd = t + ? Math.round + : function (t) { + return t; + }; + } + function styleDiv(t) { + (t.style.position = 'absolute'), + (t.style.top = 0), + (t.style.left = 0), + (t.style.display = 'block'), + (t.style.transformOrigin = '0 0'), + (t.style.webkitTransformOrigin = '0 0'), + (t.style.backfaceVisibility = 'visible'), + (t.style.webkitBackfaceVisibility = 'visible'), + (t.style.transformStyle = 'preserve-3d'), + (t.style.webkitTransformStyle = 'preserve-3d'), + (t.style.mozTransformStyle = 'preserve-3d'); + } + function BMEnterFrameEvent(t, e, r, n) { + (this.type = t), + (this.currentTime = e), + (this.totalTime = r), + (this.direction = n < 0 ? -1 : 1); + } + function BMCompleteEvent(t, e) { + (this.type = t), (this.direction = e < 0 ? -1 : 1); + } + function BMCompleteLoopEvent(t, e, r, n) { + (this.type = t), + (this.currentLoop = r), + (this.totalLoops = e), + (this.direction = n < 0 ? -1 : 1); + } + function BMSegmentStartEvent(t, e, r) { + (this.type = t), (this.firstFrame = e), (this.totalFrames = r); + } + function BMDestroyEvent(t, e) { + (this.type = t), (this.target = e); + } + function BMRenderFrameErrorEvent(t, e) { + (this.type = 'renderFrameError'), (this.nativeError = t), (this.currentTime = e); + } + function BMConfigErrorEvent(t) { + (this.type = 'configError'), (this.nativeError = t); + } + function BMAnimationConfigErrorEvent(t, e) { + (this.type = t), (this.nativeError = e); + } + roundValues(!1); + var createElementID = + ((F = 0), + function () { + return idPrefix + '__lottie_element_' + (F += 1); + }), + F; + function HSVtoRGB(t, e, r) { + var n, i, a, s, o, h, l, c; + switch ( + ((h = r * (1 - e)), + (l = r * (1 - (o = 6 * t - (s = Math.floor(6 * t))) * e)), + (c = r * (1 - (1 - o) * e)), + s % 6) + ) { + case 0: + (n = r), (i = c), (a = h); + break; + case 1: + (n = l), (i = r), (a = h); + break; + case 2: + (n = h), (i = r), (a = c); + break; + case 3: + (n = h), (i = l), (a = r); + break; + case 4: + (n = c), (i = h), (a = r); + break; + case 5: + (n = r), (i = h), (a = l); + } + return [n, i, a]; + } + function RGBtoHSV(t, e, r) { + var n, + i = Math.max(t, e, r), + a = Math.min(t, e, r), + s = i - a, + o = 0 === i ? 0 : s / i, + h = i / 255; + switch (i) { + case a: + n = 0; + break; + case t: + (n = e - r + s * (e < r ? 6 : 0)), (n /= 6 * s); + break; + case e: + (n = r - t + 2 * s), (n /= 6 * s); + break; + case r: + (n = t - e + 4 * s), (n /= 6 * s); + } + return [n, o, h]; + } + function addSaturationToRGB(t, e) { + var r = RGBtoHSV(255 * t[0], 255 * t[1], 255 * t[2]); + return ( + (r[1] += e), 1 < r[1] ? (r[1] = 1) : r[1] <= 0 && (r[1] = 0), HSVtoRGB(r[0], r[1], r[2]) + ); + } + function addBrightnessToRGB(t, e) { + var r = RGBtoHSV(255 * t[0], 255 * t[1], 255 * t[2]); + return ( + (r[2] += e), 1 < r[2] ? (r[2] = 1) : r[2] < 0 && (r[2] = 0), HSVtoRGB(r[0], r[1], r[2]) + ); + } + function addHueToRGB(t, e) { + var r = RGBtoHSV(255 * t[0], 255 * t[1], 255 * t[2]); + return ( + (r[0] += e / 360), + 1 < r[0] ? (r[0] -= 1) : r[0] < 0 && (r[0] += 1), + HSVtoRGB(r[0], r[1], r[2]) + ); + } + var rgbToHex = (function () { + var t, + e, + r = []; + for (t = 0; t < 256; t += 1) (e = t.toString(16)), (r[t] = 1 === e.length ? '0' + e : e); + return function (t, e, n) { + return t < 0 && (t = 0), e < 0 && (e = 0), n < 0 && (n = 0), '#' + r[t] + r[e] + r[n]; + }; + })(); + function BaseEvent() {} + BaseEvent.prototype = { + triggerEvent: function (t, e) { + if (this._cbs[t]) for (var r = this._cbs[t], n = 0; n < r.length; n += 1) r[n](e); + }, + addEventListener: function (t, e) { + return ( + this._cbs[t] || (this._cbs[t] = []), + this._cbs[t].push(e), + function () { + this.removeEventListener(t, e); + }.bind(this) + ); + }, + removeEventListener: function (t, e) { + if (e) { + if (this._cbs[t]) { + for (var r = 0, n = this._cbs[t].length; r < n; ) + this._cbs[t][r] === e && (this._cbs[t].splice(r, 1), (r -= 1), (n -= 1)), + (r += 1); + this._cbs[t].length || (this._cbs[t] = null); + } + } else this._cbs[t] = null; + }, + }; + var createTypedArray = (function () { + function t(t, e) { + var r, + n = 0, + i = []; + switch (t) { + case 'int16': + case 'uint8c': + r = 1; + break; + default: + r = 1.1; + } + for (n = 0; n < e; n += 1) i.push(r); + return i; + } + return 'function' == typeof Uint8ClampedArray && 'function' == typeof Float32Array + ? function (e, r) { + return 'float32' === e + ? new Float32Array(r) + : 'int16' === e + ? new Int16Array(r) + : 'uint8c' === e + ? new Uint8ClampedArray(r) + : t(e, r); + } + : t; + })(); + function createSizedArray(t) { + return Array.apply(null, { length: t }); + } + function createNS(t) { + return document.createElementNS(svgNS, t); + } + function createTag(t) { + return document.createElement(t); + } + function DynamicPropertyContainer() {} + DynamicPropertyContainer.prototype = { + addDynamicProperty: function (t) { + -1 === this.dynamicProperties.indexOf(t) && + (this.dynamicProperties.push(t), + this.container.addDynamicProperty(this), + (this._isAnimated = !0)); + }, + iterateDynamicProperties: function () { + var t; + this._mdf = !1; + var e = this.dynamicProperties.length; + for (t = 0; t < e; t += 1) + this.dynamicProperties[t].getValue(), + this.dynamicProperties[t]._mdf && (this._mdf = !0); + }, + initDynamicPropertyContainer: function (t) { + (this.container = t), + (this.dynamicProperties = []), + (this._mdf = !1), + (this._isAnimated = !1); + }, + }; + var getBlendMode = + ((Oa = { + 0: 'source-over', + 1: 'multiply', + 2: 'screen', + 3: 'overlay', + 4: 'darken', + 5: 'lighten', + 6: 'color-dodge', + 7: 'color-burn', + 8: 'hard-light', + 9: 'soft-light', + 10: 'difference', + 11: 'exclusion', + 12: 'hue', + 13: 'saturation', + 14: 'color', + 15: 'luminosity', + }), + function (t) { + return Oa[t] || ''; + }), + Oa, + lineCapEnum = { 1: 'butt', 2: 'round', 3: 'square' }, + lineJoinEnum = { 1: 'miter', 2: 'round', 3: 'bevel' }, + Matrix = (function () { + var t = Math.cos, + e = Math.sin, + r = Math.tan, + n = Math.round; + function i() { + return ( + (this.props[0] = 1), + (this.props[1] = 0), + (this.props[2] = 0), + (this.props[3] = 0), + (this.props[4] = 0), + (this.props[5] = 1), + (this.props[6] = 0), + (this.props[7] = 0), + (this.props[8] = 0), + (this.props[9] = 0), + (this.props[10] = 1), + (this.props[11] = 0), + (this.props[12] = 0), + (this.props[13] = 0), + (this.props[14] = 0), + (this.props[15] = 1), + this + ); + } + function a(r) { + if (0 === r) return this; + var n = t(r), + i = e(r); + return this._t(n, -i, 0, 0, i, n, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + } + function s(r) { + if (0 === r) return this; + var n = t(r), + i = e(r); + return this._t(1, 0, 0, 0, 0, n, -i, 0, 0, i, n, 0, 0, 0, 0, 1); + } + function o(r) { + if (0 === r) return this; + var n = t(r), + i = e(r); + return this._t(n, 0, i, 0, 0, 1, 0, 0, -i, 0, n, 0, 0, 0, 0, 1); + } + function h(r) { + if (0 === r) return this; + var n = t(r), + i = e(r); + return this._t(n, -i, 0, 0, i, n, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + } + function l(t, e) { + return this._t(1, e, t, 1, 0, 0); + } + function c(t, e) { + return this.shear(r(t), r(e)); + } + function u(n, i) { + var a = t(i), + s = e(i); + return this._t(a, s, 0, 0, -s, a, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) + ._t(1, 0, 0, 0, r(n), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) + ._t(a, -s, 0, 0, s, a, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + } + function f(t, e, r) { + return ( + r || 0 === r || (r = 1), + 1 === t && 1 === e && 1 === r + ? this + : this._t(t, 0, 0, 0, 0, e, 0, 0, 0, 0, r, 0, 0, 0, 0, 1) + ); + } + function p(t, e, r, n, i, a, s, o, h, l, c, u, f, p, d, m) { + return ( + (this.props[0] = t), + (this.props[1] = e), + (this.props[2] = r), + (this.props[3] = n), + (this.props[4] = i), + (this.props[5] = a), + (this.props[6] = s), + (this.props[7] = o), + (this.props[8] = h), + (this.props[9] = l), + (this.props[10] = c), + (this.props[11] = u), + (this.props[12] = f), + (this.props[13] = p), + (this.props[14] = d), + (this.props[15] = m), + this + ); + } + function d(t, e, r) { + return ( + (r = r || 0), + 0 !== t || 0 !== e || 0 !== r + ? this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, t, e, r, 1) + : this + ); + } + function m(t, e, r, n, i, a, s, o, h, l, c, u, f, p, d, m) { + var v = this.props; + if ( + 1 === t && + 0 === e && + 0 === r && + 0 === n && + 0 === i && + 1 === a && + 0 === s && + 0 === o && + 0 === h && + 0 === l && + 1 === c && + 0 === u + ) + return ( + (v[12] = v[12] * t + v[15] * f), + (v[13] = v[13] * a + v[15] * p), + (v[14] = v[14] * c + v[15] * d), + (v[15] *= m), + (this._identityCalculated = !1), + this + ); + var y = v[0], + g = v[1], + E = v[2], + b = v[3], + _ = v[4], + x = v[5], + S = v[6], + T = v[7], + A = v[8], + I = v[9], + P = v[10], + w = v[11], + C = v[12], + D = v[13], + M = v[14], + O = v[15]; + return ( + (v[0] = y * t + g * i + E * h + b * f), + (v[1] = y * e + g * a + E * l + b * p), + (v[2] = y * r + g * s + E * c + b * d), + (v[3] = y * n + g * o + E * u + b * m), + (v[4] = _ * t + x * i + S * h + T * f), + (v[5] = _ * e + x * a + S * l + T * p), + (v[6] = _ * r + x * s + S * c + T * d), + (v[7] = _ * n + x * o + S * u + T * m), + (v[8] = A * t + I * i + P * h + w * f), + (v[9] = A * e + I * a + P * l + w * p), + (v[10] = A * r + I * s + P * c + w * d), + (v[11] = A * n + I * o + P * u + w * m), + (v[12] = C * t + D * i + M * h + O * f), + (v[13] = C * e + D * a + M * l + O * p), + (v[14] = C * r + D * s + M * c + O * d), + (v[15] = C * n + D * o + M * u + O * m), + (this._identityCalculated = !1), + this + ); + } + function v() { + return ( + this._identityCalculated || + ((this._identity = !( + 1 !== this.props[0] || + 0 !== this.props[1] || + 0 !== this.props[2] || + 0 !== this.props[3] || + 0 !== this.props[4] || + 1 !== this.props[5] || + 0 !== this.props[6] || + 0 !== this.props[7] || + 0 !== this.props[8] || + 0 !== this.props[9] || + 1 !== this.props[10] || + 0 !== this.props[11] || + 0 !== this.props[12] || + 0 !== this.props[13] || + 0 !== this.props[14] || + 1 !== this.props[15] + )), + (this._identityCalculated = !0)), + this._identity + ); + } + function y(t) { + for (var e = 0; e < 16; ) { + if (t.props[e] !== this.props[e]) return !1; + e += 1; + } + return !0; + } + function g(t) { + var e; + for (e = 0; e < 16; e += 1) t.props[e] = this.props[e]; + return t; + } + function E(t) { + var e; + for (e = 0; e < 16; e += 1) this.props[e] = t[e]; + } + function b(t, e, r) { + return { + x: t * this.props[0] + e * this.props[4] + r * this.props[8] + this.props[12], + y: t * this.props[1] + e * this.props[5] + r * this.props[9] + this.props[13], + z: t * this.props[2] + e * this.props[6] + r * this.props[10] + this.props[14], + }; + } + function _(t, e, r) { + return t * this.props[0] + e * this.props[4] + r * this.props[8] + this.props[12]; + } + function x(t, e, r) { + return t * this.props[1] + e * this.props[5] + r * this.props[9] + this.props[13]; + } + function S(t, e, r) { + return t * this.props[2] + e * this.props[6] + r * this.props[10] + this.props[14]; + } + function T() { + var t = this.props[0] * this.props[5] - this.props[1] * this.props[4], + e = this.props[5] / t, + r = -this.props[1] / t, + n = -this.props[4] / t, + i = this.props[0] / t, + a = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / t, + s = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / t, + o = new Matrix(); + return ( + (o.props[0] = e), + (o.props[1] = r), + (o.props[4] = n), + (o.props[5] = i), + (o.props[12] = a), + (o.props[13] = s), + o + ); + } + function A(t) { + return this.getInverseMatrix().applyToPointArray(t[0], t[1], t[2] || 0); + } + function I(t) { + var e, + r = t.length, + n = []; + for (e = 0; e < r; e += 1) n[e] = A(t[e]); + return n; + } + function P(t, e, r) { + var n = createTypedArray('float32', 6); + if (this.isIdentity()) + (n[0] = t[0]), + (n[1] = t[1]), + (n[2] = e[0]), + (n[3] = e[1]), + (n[4] = r[0]), + (n[5] = r[1]); + else { + var i = this.props[0], + a = this.props[1], + s = this.props[4], + o = this.props[5], + h = this.props[12], + l = this.props[13]; + (n[0] = t[0] * i + t[1] * s + h), + (n[1] = t[0] * a + t[1] * o + l), + (n[2] = e[0] * i + e[1] * s + h), + (n[3] = e[0] * a + e[1] * o + l), + (n[4] = r[0] * i + r[1] * s + h), + (n[5] = r[0] * a + r[1] * o + l); + } + return n; + } + function w(t, e, r) { + return this.isIdentity() + ? [t, e, r] + : [ + t * this.props[0] + e * this.props[4] + r * this.props[8] + this.props[12], + t * this.props[1] + e * this.props[5] + r * this.props[9] + this.props[13], + t * this.props[2] + e * this.props[6] + r * this.props[10] + this.props[14], + ]; + } + function C(t, e) { + if (this.isIdentity()) return t + ',' + e; + var r = this.props; + return ( + Math.round(100 * (t * r[0] + e * r[4] + r[12])) / 100 + + ',' + + Math.round(100 * (t * r[1] + e * r[5] + r[13])) / 100 + ); + } + function D() { + for (var t = 0, e = this.props, r = 'matrix3d('; t < 16; ) + (r += n(1e4 * e[t]) / 1e4), (r += 15 === t ? ')' : ','), (t += 1); + return r; + } + function M(t) { + return (t < 1e-6 && 0 < t) || (-1e-6 < t && t < 0) ? n(1e4 * t) / 1e4 : t; + } + function O() { + var t = this.props; + return ( + 'matrix(' + + M(t[0]) + + ',' + + M(t[1]) + + ',' + + M(t[4]) + + ',' + + M(t[5]) + + ',' + + M(t[12]) + + ',' + + M(t[13]) + + ')' + ); + } + return function () { + (this.reset = i), + (this.rotate = a), + (this.rotateX = s), + (this.rotateY = o), + (this.rotateZ = h), + (this.skew = c), + (this.skewFromAxis = u), + (this.shear = l), + (this.scale = f), + (this.setTransform = p), + (this.translate = d), + (this.transform = m), + (this.applyToPoint = b), + (this.applyToX = _), + (this.applyToY = x), + (this.applyToZ = S), + (this.applyToPointArray = w), + (this.applyToTriplePoints = P), + (this.applyToPointStringified = C), + (this.toCSS = D), + (this.to2dCSS = O), + (this.clone = g), + (this.cloneFromProps = E), + (this.equals = y), + (this.inversePoints = I), + (this.inversePoint = A), + (this.getInverseMatrix = T), + (this._t = this.transform), + (this.isIdentity = v), + (this._identity = !0), + (this._identityCalculated = !1), + (this.props = createTypedArray('float32', 16)), + this.reset(); + }; + })(); + !(function (t, e) { + var r, + n = this, + i = 256, + a = 'random', + s = e.pow(i, 6), + o = e.pow(2, 52), + h = 2 * o, + l = i - 1; + function c(t) { + var e, + r = t.length, + n = this, + a = 0, + s = (n.i = n.j = 0), + o = (n.S = []); + for (r || (t = [r++]); a < i; ) o[a] = a++; + for (a = 0; a < i; a++) (o[a] = o[(s = l & (s + t[a % r] + (e = o[a])))]), (o[s] = e); + n.g = function (t) { + for (var e, r = 0, a = n.i, s = n.j, o = n.S; t--; ) + (e = o[(a = l & (a + 1))]), + (r = r * i + o[l & ((o[a] = o[(s = l & (s + e))]) + (o[s] = e))]); + return (n.i = a), (n.j = s), r; + }; + } + function u(t, e) { + return (e.i = t.i), (e.j = t.j), (e.S = t.S.slice()), e; + } + function f(t, e) { + for (var r, n = t + '', i = 0; i < n.length; ) + e[l & i] = l & ((r ^= 19 * e[l & i]) + n.charCodeAt(i++)); + return p(e); + } + function p(t) { + return String.fromCharCode.apply(0, t); + } + (e['seed' + a] = function (l, d, m) { + var v = [], + y = f( + (function t(e, r) { + var n, + i = [], + a = typeof e; + if (r && 'object' == a) + for (n in e) + try { + i.push(t(e[n], r - 1)); + } catch (t) {} + return i.length ? i : 'string' == a ? e : e + '\0'; + })( + (d = !0 === d ? { entropy: !0 } : d || {}).entropy + ? [l, p(t)] + : null === l + ? (function () { + try { + r; + var e = new Uint8Array(i); + return (n.crypto || n.msCrypto).getRandomValues(e), p(e); + } catch (e) { + var a = n.navigator, + s = a && a.plugins; + return [+new Date(), n, s, n.screen, p(t)]; + } + })() + : l, + 3, + ), + v, + ), + g = new c(v), + E = function () { + for (var t = g.g(6), e = s, r = 0; t < o; ) + (t = (t + r) * i), (e *= i), (r = g.g(1)); + for (; h <= t; ) (t /= 2), (e /= 2), (r >>>= 1); + return (t + r) / e; + }; + return ( + (E.int32 = function () { + return 0 | g.g(4); + }), + (E.quick = function () { + return g.g(4) / 4294967296; + }), + (E.double = E), + f(p(g.S), t), + ( + d.pass || + m || + function (t, r, n, i) { + return ( + i && + (i.S && u(i, g), + (t.state = function () { + return u(g, {}); + })), + n ? ((e[a] = t), r) : t + ); + } + )(E, y, 'global' in d ? d.global : this == e, d.state) + ); + }), + f(e.random(), t); + })([], BMMath); + var BezierFactory = (function () { + var t = { + getBezierEasing: function (t, r, n, i, a) { + var s = a || ('bez_' + t + '_' + r + '_' + n + '_' + i).replace(/\./g, 'p'); + if (e[s]) return e[s]; + var o = new c([t, r, n, i]); + return (e[s] = o); + }, + }, + e = {}, + r = 11, + n = 1 / (r - 1), + i = 'function' == typeof Float32Array; + function a(t, e) { + return 1 - 3 * e + 3 * t; + } + function s(t, e) { + return 3 * e - 6 * t; + } + function o(t) { + return 3 * t; + } + function h(t, e, r) { + return ((a(e, r) * t + s(e, r)) * t + o(e)) * t; + } + function l(t, e, r) { + return 3 * a(e, r) * t * t + 2 * s(e, r) * t + o(e); + } + function c(t) { + (this._p = t), + (this._mSampleValues = i ? new Float32Array(r) : new Array(r)), + (this._precomputed = !1), + (this.get = this.get.bind(this)); + } + return ( + (c.prototype = { + get: function (t) { + var e = this._p[0], + r = this._p[1], + n = this._p[2], + i = this._p[3]; + return ( + this._precomputed || this._precompute(), + e === r && n === i ? t : 0 === t ? 0 : 1 === t ? 1 : h(this._getTForX(t), r, i) + ); + }, + _precompute: function () { + var t = this._p[0], + e = this._p[1], + r = this._p[2], + n = this._p[3]; + (this._precomputed = !0), (t === e && r === n) || this._calcSampleValues(); + }, + _calcSampleValues: function () { + for (var t = this._p[0], e = this._p[2], i = 0; i < r; ++i) + this._mSampleValues[i] = h(i * n, t, e); + }, + _getTForX: function (t) { + for ( + var e = this._p[0], + i = this._p[2], + a = this._mSampleValues, + s = 0, + o = 1, + c = r - 1; + o !== c && a[o] <= t; + ++o + ) + s += n; + var u = s + ((t - a[--o]) / (a[o + 1] - a[o])) * n, + f = l(u, e, i); + return 0.001 <= f + ? (function (t, e, r, n) { + for (var i = 0; i < 4; ++i) { + var a = l(e, r, n); + if (0 === a) return e; + e -= (h(e, r, n) - t) / a; + } + return e; + })(t, u, e, i) + : 0 === f + ? u + : (function (t, e, r, n, i) { + for ( + var a, s, o = 0; + 0 < (a = h((s = e + (r - e) / 2), n, i) - t) ? (r = s) : (e = s), + 1e-7 < Math.abs(a) && ++o < 10; + + ); + return s; + })(t, s, s + n, e, i); + }, + }), + t + ); + })(); + function extendPrototype(t, e) { + var r, + n, + i = t.length; + for (r = 0; r < i; r += 1) + for (var a in (n = t[r].prototype)) + Object.prototype.hasOwnProperty.call(n, a) && (e.prototype[a] = n[a]); + } + function getDescriptor(t, e) { + return Object.getOwnPropertyDescriptor(t, e); + } + function createProxyFunction(t) { + function e() {} + return (e.prototype = t), e; + } + function bezFunction() { + var t = Math; + function e(t, e, r, n, i, a) { + var s = t * n + e * i + r * a - i * n - a * t - r * e; + return -0.001 < s && s < 0.001; + } + var r = function (t, e, r, n) { + var i, + a, + s, + o, + h, + l, + c = defaultCurveSegments, + u = 0, + f = [], + p = [], + d = bezierLengthPool.newElement(); + for (s = r.length, i = 0; i < c; i += 1) { + for (h = i / (c - 1), a = l = 0; a < s; a += 1) + (o = + bmPow(1 - h, 3) * t[a] + + 3 * bmPow(1 - h, 2) * h * r[a] + + 3 * (1 - h) * bmPow(h, 2) * n[a] + + bmPow(h, 3) * e[a]), + (f[a] = o), + null !== p[a] && (l += bmPow(f[a] - p[a], 2)), + (p[a] = f[a]); + l && (u += l = bmSqrt(l)), (d.percents[i] = h), (d.lengths[i] = u); + } + return (d.addedLength = u), d; + }; + function n(t) { + (this.segmentLength = 0), (this.points = new Array(t)); + } + function i(t, e) { + (this.partialLength = t), (this.point = e); + } + var a, + s = + ((a = {}), + function (t, r, s, o) { + var h = ( + t[0] + + '_' + + t[1] + + '_' + + r[0] + + '_' + + r[1] + + '_' + + s[0] + + '_' + + s[1] + + '_' + + o[0] + + '_' + + o[1] + ).replace(/\./g, 'p'); + if (!a[h]) { + var l, + c, + u, + f, + p, + d, + m, + v = defaultCurveSegments, + y = 0, + g = null; + 2 === t.length && + (t[0] !== r[0] || t[1] !== r[1]) && + e(t[0], t[1], r[0], r[1], t[0] + s[0], t[1] + s[1]) && + e(t[0], t[1], r[0], r[1], r[0] + o[0], r[1] + o[1]) && + (v = 2); + var E = new n(v); + for (u = s.length, l = 0; l < v; l += 1) { + for (m = createSizedArray(u), p = l / (v - 1), c = d = 0; c < u; c += 1) + (f = + bmPow(1 - p, 3) * t[c] + + 3 * bmPow(1 - p, 2) * p * (t[c] + s[c]) + + 3 * (1 - p) * bmPow(p, 2) * (r[c] + o[c]) + + bmPow(p, 3) * r[c]), + (m[c] = f), + null !== g && (d += bmPow(m[c] - g[c], 2)); + (y += d = bmSqrt(d)), (E.points[l] = new i(d, m)), (g = m); + } + (E.segmentLength = y), (a[h] = E); + } + return a[h]; + }); + function o(t, e) { + var r = e.percents, + n = e.lengths, + i = r.length, + a = bmFloor((i - 1) * t), + s = t * e.addedLength, + o = 0; + if (a === i - 1 || 0 === a || s === n[a]) return r[a]; + for (var h = n[a] > s ? -1 : 1, l = !0; l; ) + if ( + (n[a] <= s && n[a + 1] > s + ? ((o = (s - n[a]) / (n[a + 1] - n[a])), (l = !1)) + : (a += h), + a < 0 || i - 1 <= a) + ) { + if (a === i - 1) return r[a]; + l = !1; + } + return r[a] + (r[a + 1] - r[a]) * o; + } + var h = createTypedArray('float32', 8); + return { + getSegmentsLength: function (t) { + var e, + n = segmentsLengthPool.newElement(), + i = t.c, + a = t.v, + s = t.o, + o = t.i, + h = t._length, + l = n.lengths, + c = 0; + for (e = 0; e < h - 1; e += 1) + (l[e] = r(a[e], a[e + 1], s[e], o[e + 1])), (c += l[e].addedLength); + return ( + i && h && ((l[e] = r(a[e], a[0], s[e], o[0])), (c += l[e].addedLength)), + (n.totalLength = c), + n + ); + }, + getNewSegment: function (e, r, n, i, a, s, l) { + a < 0 ? (a = 0) : 1 < a && (a = 1); + var c, + u = o(a, l), + f = o((s = 1 < s ? 1 : s), l), + p = e.length, + d = 1 - u, + m = 1 - f, + v = d * d * d, + y = u * d * d * 3, + g = u * u * d * 3, + E = u * u * u, + b = d * d * m, + _ = u * d * m + d * u * m + d * d * f, + x = u * u * m + d * u * f + u * d * f, + S = u * u * f, + T = d * m * m, + A = u * m * m + d * f * m + d * m * f, + I = u * f * m + d * f * f + u * m * f, + P = u * f * f, + w = m * m * m, + C = f * m * m + m * f * m + m * m * f, + D = f * f * m + m * f * f + f * m * f, + M = f * f * f; + for (c = 0; c < p; c += 1) + (h[4 * c] = t.round(1e3 * (v * e[c] + y * n[c] + g * i[c] + E * r[c])) / 1e3), + (h[4 * c + 1] = t.round(1e3 * (b * e[c] + _ * n[c] + x * i[c] + S * r[c])) / 1e3), + (h[4 * c + 2] = t.round(1e3 * (T * e[c] + A * n[c] + I * i[c] + P * r[c])) / 1e3), + (h[4 * c + 3] = t.round(1e3 * (w * e[c] + C * n[c] + D * i[c] + M * r[c])) / 1e3); + return h; + }, + getPointInSegment: function (e, r, n, i, a, s) { + var h = o(a, s), + l = 1 - h; + return [ + t.round( + 1e3 * + (l * l * l * e[0] + + (h * l * l + l * h * l + l * l * h) * n[0] + + (h * h * l + l * h * h + h * l * h) * i[0] + + h * h * h * r[0]), + ) / 1e3, + t.round( + 1e3 * + (l * l * l * e[1] + + (h * l * l + l * h * l + l * l * h) * n[1] + + (h * h * l + l * h * h + h * l * h) * i[1] + + h * h * h * r[1]), + ) / 1e3, + ]; + }, + buildBezierData: s, + pointOnLine2D: e, + pointOnLine3D: function (r, n, i, a, s, o, h, l, c) { + if (0 === i && 0 === o && 0 === c) return e(r, n, a, s, h, l); + var u, + f = t.sqrt(t.pow(a - r, 2) + t.pow(s - n, 2) + t.pow(o - i, 2)), + p = t.sqrt(t.pow(h - r, 2) + t.pow(l - n, 2) + t.pow(c - i, 2)), + d = t.sqrt(t.pow(h - a, 2) + t.pow(l - s, 2) + t.pow(c - o, 2)); + return ( + -1e-4 < + (u = p < f ? (d < f ? f - p - d : d - p - f) : p < d ? d - p - f : p - f - d) && + u < 1e-4 + ); + }, + }; + } + !(function () { + for ( + var t = 0, e = ['ms', 'moz', 'webkit', 'o'], r = 0; + r < e.length && !window.requestAnimationFrame; + ++r + ) + (window.requestAnimationFrame = window[e[r] + 'RequestAnimationFrame']), + (window.cancelAnimationFrame = + window[e[r] + 'CancelAnimationFrame'] || + window[e[r] + 'CancelRequestAnimationFrame']); + window.requestAnimationFrame || + (window.requestAnimationFrame = function (e) { + var r = new Date().getTime(), + n = Math.max(0, 16 - (r - t)), + i = setTimeout(function () { + e(r + n); + }, n); + return (t = r + n), i; + }), + window.cancelAnimationFrame || + (window.cancelAnimationFrame = function (t) { + clearTimeout(t); + }); + })(); + var bez = bezFunction(); + function dataFunctionManager() { + function t(i, a, s) { + var o, + h, + l, + u, + f, + p, + d = i.length; + for (h = 0; h < d; h += 1) + if ('ks' in (o = i[h]) && !o.completed) { + if (((o.completed = !0), o.tt && (i[h - 1].td = o.tt), o.hasMask)) { + var m = o.masksProperties; + for (u = m.length, l = 0; l < u; l += 1) + if (m[l].pt.k.i) n(m[l].pt.k); + else + for (p = m[l].pt.k.length, f = 0; f < p; f += 1) + m[l].pt.k[f].s && n(m[l].pt.k[f].s[0]), + m[l].pt.k[f].e && n(m[l].pt.k[f].e[0]); + } + 0 === o.ty + ? ((o.layers = e(o.refId, a)), t(o.layers, a, s)) + : 4 === o.ty + ? r(o.shapes) + : 5 === o.ty && c(o); + } + } + function e(t, e) { + for (var r = 0, n = e.length; r < n; ) { + if (e[r].id === t) + return e[r].layers.__used + ? JSON.parse(JSON.stringify(e[r].layers)) + : ((e[r].layers.__used = !0), e[r].layers); + r += 1; + } + return null; + } + function r(t) { + var e, i, a; + for (e = t.length - 1; 0 <= e; e -= 1) + if ('sh' === t[e].ty) + if (t[e].ks.k.i) n(t[e].ks.k); + else + for (a = t[e].ks.k.length, i = 0; i < a; i += 1) + t[e].ks.k[i].s && n(t[e].ks.k[i].s[0]), t[e].ks.k[i].e && n(t[e].ks.k[i].e[0]); + else 'gr' === t[e].ty && r(t[e].it); + } + function n(t) { + var e, + r = t.i.length; + for (e = 0; e < r; e += 1) + (t.i[e][0] += t.v[e][0]), + (t.i[e][1] += t.v[e][1]), + (t.o[e][0] += t.v[e][0]), + (t.o[e][1] += t.v[e][1]); + } + function i(t, e) { + var r = e ? e.split('.') : [100, 100, 100]; + return ( + t[0] > r[0] || + (!(r[0] > t[0]) && + (t[1] > r[1] || (!(r[1] > t[1]) && (t[2] > r[2] || (!(r[2] > t[2]) && null))))) + ); + } + var a, + s = (function () { + var t = [4, 4, 14]; + function e(t) { + var e, + r, + n, + i = t.length; + for (e = 0; e < i; e += 1) + 5 === t[e].ty && ((n = (r = t[e]).t.d), (r.t.d = { k: [{ s: n, t: 0 }] })); + } + return function (r) { + if (i(t, r.v) && (e(r.layers), r.assets)) { + var n, + a = r.assets.length; + for (n = 0; n < a; n += 1) r.assets[n].layers && e(r.assets[n].layers); + } + }; + })(), + o = + ((a = [4, 7, 99]), + function (t) { + if (t.chars && !i(a, t.v)) { + var e, + r, + s, + o, + h, + l = t.chars.length; + for (e = 0; e < l; e += 1) + if (t.chars[e].data && t.chars[e].data.shapes) + for (s = (h = t.chars[e].data.shapes[0].it).length, r = 0; r < s; r += 1) + (o = h[r].ks.k).__converted || (n(h[r].ks.k), (o.__converted = !0)); + } + }), + h = (function () { + var t = [4, 1, 9]; + function e(t) { + var r, + n, + i, + a = t.length; + for (r = 0; r < a; r += 1) + if ('gr' === t[r].ty) e(t[r].it); + else if ('fl' === t[r].ty || 'st' === t[r].ty) + if (t[r].c.k && t[r].c.k[0].i) + for (i = t[r].c.k.length, n = 0; n < i; n += 1) + t[r].c.k[n].s && + ((t[r].c.k[n].s[0] /= 255), + (t[r].c.k[n].s[1] /= 255), + (t[r].c.k[n].s[2] /= 255), + (t[r].c.k[n].s[3] /= 255)), + t[r].c.k[n].e && + ((t[r].c.k[n].e[0] /= 255), + (t[r].c.k[n].e[1] /= 255), + (t[r].c.k[n].e[2] /= 255), + (t[r].c.k[n].e[3] /= 255)); + else + (t[r].c.k[0] /= 255), + (t[r].c.k[1] /= 255), + (t[r].c.k[2] /= 255), + (t[r].c.k[3] /= 255); + } + function r(t) { + var r, + n = t.length; + for (r = 0; r < n; r += 1) 4 === t[r].ty && e(t[r].shapes); + } + return function (e) { + if (i(t, e.v) && (r(e.layers), e.assets)) { + var n, + a = e.assets.length; + for (n = 0; n < a; n += 1) e.assets[n].layers && r(e.assets[n].layers); + } + }; + })(), + l = (function () { + var t = [4, 4, 18]; + function e(t) { + var r, n, i; + for (r = t.length - 1; 0 <= r; r -= 1) + if ('sh' === t[r].ty) + if (t[r].ks.k.i) t[r].ks.k.c = t[r].closed; + else + for (i = t[r].ks.k.length, n = 0; n < i; n += 1) + t[r].ks.k[n].s && (t[r].ks.k[n].s[0].c = t[r].closed), + t[r].ks.k[n].e && (t[r].ks.k[n].e[0].c = t[r].closed); + else 'gr' === t[r].ty && e(t[r].it); + } + function r(t) { + var r, + n, + i, + a, + s, + o, + h = t.length; + for (n = 0; n < h; n += 1) { + if ((r = t[n]).hasMask) { + var l = r.masksProperties; + for (a = l.length, i = 0; i < a; i += 1) + if (l[i].pt.k.i) l[i].pt.k.c = l[i].cl; + else + for (o = l[i].pt.k.length, s = 0; s < o; s += 1) + l[i].pt.k[s].s && (l[i].pt.k[s].s[0].c = l[i].cl), + l[i].pt.k[s].e && (l[i].pt.k[s].e[0].c = l[i].cl); + } + 4 === r.ty && e(r.shapes); + } + } + return function (e) { + if (i(t, e.v) && (r(e.layers), e.assets)) { + var n, + a = e.assets.length; + for (n = 0; n < a; n += 1) e.assets[n].layers && r(e.assets[n].layers); + } + }; + })(); + function c(t) { + 0 !== t.t.a.length || 'm' in t.t.p || (t.singleShape = !0); + } + var u = { + completeData: function (e, r) { + e.__complete || + (h(e), s(e), o(e), l(e), t(e.layers, e.assets, r), (e.__complete = !0)); + }, + }; + return ( + (u.checkColors = h), (u.checkChars = o), (u.checkShapes = l), (u.completeLayers = t), u + ); + } + var dataManager = dataFunctionManager(); + function getFontProperties(t) { + for ( + var e = t.fStyle ? t.fStyle.split(' ') : [], + r = 'normal', + n = 'normal', + i = e.length, + a = 0; + a < i; + a += 1 + ) + switch (e[a].toLowerCase()) { + case 'italic': + n = 'italic'; + break; + case 'bold': + r = '700'; + break; + case 'black': + r = '900'; + break; + case 'medium': + r = '500'; + break; + case 'regular': + case 'normal': + r = '400'; + break; + case 'light': + case 'thin': + r = '200'; + } + return { style: n, weight: t.fWeight || r }; + } + var FontManager = (function () { + var t = { w: 0, size: 0, shapes: [] }, + e = []; + e = e.concat([ + 2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, + 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, + 2389, 2390, 2391, 2402, 2403, + ]); + var r = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'], + n = [65039, 8205]; + function i(t, e) { + var r = createTag('span'); + r.setAttribute('aria-hidden', !0), (r.style.fontFamily = e); + var n = createTag('span'); + (n.innerText = 'giItT1WQy@!-/#'), + (r.style.position = 'absolute'), + (r.style.left = '-10000px'), + (r.style.top = '-10000px'), + (r.style.fontSize = '300px'), + (r.style.fontVariant = 'normal'), + (r.style.fontStyle = 'normal'), + (r.style.fontWeight = 'normal'), + (r.style.letterSpacing = '0'), + r.appendChild(n), + document.body.appendChild(r); + var i = n.offsetWidth; + return ( + (n.style.fontFamily = + (function (t) { + var e, + r = t.split(','), + n = r.length, + i = []; + for (e = 0; e < n; e += 1) + 'sans-serif' !== r[e] && 'monospace' !== r[e] && i.push(r[e]); + return i.join(','); + })(t) + + ', ' + + e), + { node: n, w: i, parent: r } + ); + } + function a(t, e) { + var r = createNS('text'); + r.style.fontSize = '100px'; + var n = getFontProperties(e); + return ( + r.setAttribute('font-family', e.fFamily), + r.setAttribute('font-style', n.style), + r.setAttribute('font-weight', n.weight), + (r.textContent = '1'), + e.fClass + ? ((r.style.fontFamily = 'inherit'), r.setAttribute('class', e.fClass)) + : (r.style.fontFamily = e.fFamily), + t.appendChild(r), + (createTag('canvas').getContext('2d').font = + e.fWeight + ' ' + e.fStyle + ' 100px ' + e.fFamily), + r + ); + } + var s = function () { + (this.fonts = []), + (this.chars = null), + (this.typekitLoaded = 0), + (this.isLoaded = !1), + (this._warned = !1), + (this.initTime = Date.now()), + (this.setIsLoadedBinded = this.setIsLoaded.bind(this)), + (this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this)); + }; + return ( + (s.isModifier = function (t, e) { + var n = t.toString(16) + e.toString(16); + return -1 !== r.indexOf(n); + }), + (s.isZeroWidthJoiner = function (t, e) { + return e ? t === n[0] && e === n[1] : t === n[1]; + }), + (s.isCombinedCharacter = function (t) { + return -1 !== e.indexOf(t); + }), + (s.prototype = { + addChars: function (t) { + if (t) { + var e; + this.chars || (this.chars = []); + var r, + n, + i = t.length, + a = this.chars.length; + for (e = 0; e < i; e += 1) { + for (r = 0, n = !1; r < a; ) + this.chars[r].style === t[e].style && + this.chars[r].fFamily === t[e].fFamily && + this.chars[r].ch === t[e].ch && + (n = !0), + (r += 1); + n || (this.chars.push(t[e]), (a += 1)); + } + } + }, + addFonts: function (t, e) { + if (t) { + if (this.chars) return (this.isLoaded = !0), void (this.fonts = t.list); + var r, + n = t.list, + s = n.length, + o = s; + for (r = 0; r < s; r += 1) { + var h, + l, + c = !0; + if ( + ((n[r].loaded = !1), + (n[r].monoCase = i(n[r].fFamily, 'monospace')), + (n[r].sansCase = i(n[r].fFamily, 'sans-serif')), + n[r].fPath) + ) { + if ('p' === n[r].fOrigin || 3 === n[r].origin) { + if ( + (0 < + (h = document.querySelectorAll( + 'style[f-forigin="p"][f-family="' + + n[r].fFamily + + '"], style[f-origin="3"][f-family="' + + n[r].fFamily + + '"]', + )).length && (c = !1), + c) + ) { + var u = createTag('style'); + u.setAttribute('f-forigin', n[r].fOrigin), + u.setAttribute('f-origin', n[r].origin), + u.setAttribute('f-family', n[r].fFamily), + (u.type = 'text/css'), + (u.innerText = + '@font-face {font-family: ' + + n[r].fFamily + + "; font-style: normal; src: url('" + + n[r].fPath + + "');}"), + e.appendChild(u); + } + } else if ('g' === n[r].fOrigin || 1 === n[r].origin) { + for ( + h = document.querySelectorAll( + 'link[f-forigin="g"], link[f-origin="1"]', + ), + l = 0; + l < h.length; + l += 1 + ) + -1 !== h[l].href.indexOf(n[r].fPath) && (c = !1); + if (c) { + var f = createTag('link'); + f.setAttribute('f-forigin', n[r].fOrigin), + f.setAttribute('f-origin', n[r].origin), + (f.type = 'text/css'), + (f.rel = 'stylesheet'), + (f.href = n[r].fPath), + document.body.appendChild(f); + } + } else if ('t' === n[r].fOrigin || 2 === n[r].origin) { + for ( + h = document.querySelectorAll( + 'script[f-forigin="t"], script[f-origin="2"]', + ), + l = 0; + l < h.length; + l += 1 + ) + n[r].fPath === h[l].src && (c = !1); + if (c) { + var p = createTag('link'); + p.setAttribute('f-forigin', n[r].fOrigin), + p.setAttribute('f-origin', n[r].origin), + p.setAttribute('rel', 'stylesheet'), + p.setAttribute('href', n[r].fPath), + e.appendChild(p); + } + } + } else (n[r].loaded = !0), (o -= 1); + (n[r].helper = a(e, n[r])), (n[r].cache = {}), this.fonts.push(n[r]); + } + 0 === o + ? (this.isLoaded = !0) + : setTimeout(this.checkLoadedFonts.bind(this), 100); + } else this.isLoaded = !0; + }, + getCharData: function (e, r, n) { + for (var i = 0, a = this.chars.length; i < a; ) { + if ( + this.chars[i].ch === e && + this.chars[i].style === r && + this.chars[i].fFamily === n + ) + return this.chars[i]; + i += 1; + } + return ( + (('string' == typeof e && 13 !== e.charCodeAt(0)) || !e) && + console && + console.warn && + !this._warned && + ((this._warned = !0), + console.warn('Missing character from exported characters list: ', e, r, n)), + t + ); + }, + getFontByName: function (t) { + for (var e = 0, r = this.fonts.length; e < r; ) { + if (this.fonts[e].fName === t) return this.fonts[e]; + e += 1; + } + return this.fonts[0]; + }, + measureText: function (t, e, r) { + var n = this.getFontByName(e), + i = t.charCodeAt(0); + if (!n.cache[i + 1]) { + var a = n.helper; + if (' ' === t) { + a.textContent = '|' + t + '|'; + var s = a.getComputedTextLength(); + a.textContent = '||'; + var o = a.getComputedTextLength(); + n.cache[i + 1] = (s - o) / 100; + } else (a.textContent = t), (n.cache[i + 1] = a.getComputedTextLength() / 100); + } + return n.cache[i + 1] * r; + }, + checkLoadedFonts: function () { + var t, + e, + r, + n = this.fonts.length, + i = n; + for (t = 0; t < n; t += 1) + this.fonts[t].loaded + ? (i -= 1) + : 'n' === this.fonts[t].fOrigin || 0 === this.fonts[t].origin + ? (this.fonts[t].loaded = !0) + : ((e = this.fonts[t].monoCase.node), + (r = this.fonts[t].monoCase.w), + e.offsetWidth !== r + ? ((i -= 1), (this.fonts[t].loaded = !0)) + : ((e = this.fonts[t].sansCase.node), + (r = this.fonts[t].sansCase.w), + e.offsetWidth !== r && ((i -= 1), (this.fonts[t].loaded = !0))), + this.fonts[t].loaded && + (this.fonts[t].sansCase.parent.parentNode.removeChild( + this.fonts[t].sansCase.parent, + ), + this.fonts[t].monoCase.parent.parentNode.removeChild( + this.fonts[t].monoCase.parent, + ))); + 0 !== i && Date.now() - this.initTime < 5e3 + ? setTimeout(this.checkLoadedFontsBinded, 20) + : setTimeout(this.setIsLoadedBinded, 10); + }, + setIsLoaded: function () { + this.isLoaded = !0; + }, + }), + s + ); + })(), + PropertyFactory = (function () { + var t = initialDefaultFrame, + e = Math.abs; + function r(t, e) { + var r, + i = this.offsetTime; + 'multidimensional' === this.propType && + (r = createTypedArray('float32', this.pv.length)); + for ( + var a, + s, + o, + h, + l, + c, + u, + f, + p = e.lastIndex, + d = p, + m = this.keyframes.length - 1, + v = !0; + v; + + ) { + if ( + ((a = this.keyframes[d]), + (s = this.keyframes[d + 1]), + d === m - 1 && t >= s.t - i) + ) { + a.h && (a = s), (p = 0); + break; + } + if (s.t - i > t) { + p = d; + break; + } + d < m - 1 ? (d += 1) : ((p = 0), (v = !1)); + } + var y, + g, + E, + b, + _, + x, + S, + T, + A, + I, + P = s.t - i, + w = a.t - i; + if (a.to) { + a.bezierData || (a.bezierData = bez.buildBezierData(a.s, s.s || a.e, a.to, a.ti)); + var C = a.bezierData; + if (P <= t || t < w) { + var D = P <= t ? C.points.length - 1 : 0; + for (h = C.points[D].point.length, o = 0; o < h; o += 1) + r[o] = C.points[D].point[o]; + } else { + a.__fnct + ? (f = a.__fnct) + : ((f = BezierFactory.getBezierEasing(a.o.x, a.o.y, a.i.x, a.i.y, a.n).get), + (a.__fnct = f)), + (l = f((t - w) / (P - w))); + var M, + O = C.segmentLength * l, + F = e.lastFrame < t && e._lastKeyframeIndex === d ? e._lastAddedLength : 0; + for ( + u = e.lastFrame < t && e._lastKeyframeIndex === d ? e._lastPoint : 0, + v = !0, + c = C.points.length; + v; + + ) { + if ( + ((F += C.points[u].partialLength), + 0 === O || 0 === l || u === C.points.length - 1) + ) { + for (h = C.points[u].point.length, o = 0; o < h; o += 1) + r[o] = C.points[u].point[o]; + break; + } + if (F <= O && O < F + C.points[u + 1].partialLength) { + for ( + M = (O - F) / C.points[u + 1].partialLength, + h = C.points[u].point.length, + o = 0; + o < h; + o += 1 + ) + r[o] = + C.points[u].point[o] + + (C.points[u + 1].point[o] - C.points[u].point[o]) * M; + break; + } + u < c - 1 ? (u += 1) : (v = !1); + } + (e._lastPoint = u), + (e._lastAddedLength = F - C.points[u].partialLength), + (e._lastKeyframeIndex = d); + } + } else { + var k, R, L, N, V; + if (((m = a.s.length), (y = s.s || a.e), this.sh && 1 !== a.h)) + if (P <= t) (r[0] = y[0]), (r[1] = y[1]), (r[2] = y[2]); + else if (t <= w) (r[0] = a.s[0]), (r[1] = a.s[1]), (r[2] = a.s[2]); + else { + (g = r), + (b = (E = (function (t, e, r) { + var n, + i, + a, + s, + o, + h = [], + l = t[0], + c = t[1], + u = t[2], + f = t[3], + p = e[0], + d = e[1], + m = e[2], + v = e[3]; + return ( + (i = l * p + c * d + u * m + f * v) < 0 && + ((i = -i), (p = -p), (d = -d), (m = -m), (v = -v)), + (o = + 1e-6 < 1 - i + ? ((n = Math.acos(i)), + (a = Math.sin(n)), + (s = Math.sin((1 - r) * n) / a), + Math.sin(r * n) / a) + : ((s = 1 - r), r)), + (h[0] = s * l + o * p), + (h[1] = s * c + o * d), + (h[2] = s * u + o * m), + (h[3] = s * f + o * v), + h + ); + })(n(a.s), n(y), (t - w) / (P - w)))[0]), + (_ = E[1]), + (x = E[2]), + (S = E[3]), + (T = Math.atan2(2 * _ * S - 2 * b * x, 1 - 2 * _ * _ - 2 * x * x)), + (A = Math.asin(2 * b * _ + 2 * x * S)), + (I = Math.atan2(2 * b * S - 2 * _ * x, 1 - 2 * b * b - 2 * x * x)), + (g[0] = T / degToRads), + (g[1] = A / degToRads), + (g[2] = I / degToRads); + } + else + for (d = 0; d < m; d += 1) + 1 !== a.h && + (l = + P <= t + ? 1 + : t < w + ? 0 + : (a.o.x.constructor === Array + ? (a.__fnct || (a.__fnct = []), + a.__fnct[d] + ? (f = a.__fnct[d]) + : ((k = void 0 === a.o.x[d] ? a.o.x[0] : a.o.x[d]), + (R = void 0 === a.o.y[d] ? a.o.y[0] : a.o.y[d]), + (L = void 0 === a.i.x[d] ? a.i.x[0] : a.i.x[d]), + (N = void 0 === a.i.y[d] ? a.i.y[0] : a.i.y[d]), + (f = BezierFactory.getBezierEasing(k, R, L, N).get), + (a.__fnct[d] = f))) + : a.__fnct + ? (f = a.__fnct) + : ((k = a.o.x), + (R = a.o.y), + (L = a.i.x), + (N = a.i.y), + (f = BezierFactory.getBezierEasing(k, R, L, N).get), + (a.__fnct = f)), + f((t - w) / (P - w)))), + (y = s.s || a.e), + (V = 1 === a.h ? a.s[d] : a.s[d] + (y[d] - a.s[d]) * l), + 'multidimensional' === this.propType ? (r[d] = V) : (r = V); + } + return (e.lastIndex = p), r; + } + function n(t) { + var e = t[0] * degToRads, + r = t[1] * degToRads, + n = t[2] * degToRads, + i = Math.cos(e / 2), + a = Math.cos(r / 2), + s = Math.cos(n / 2), + o = Math.sin(e / 2), + h = Math.sin(r / 2), + l = Math.sin(n / 2); + return [ + o * h * s + i * a * l, + o * a * s + i * h * l, + i * h * s - o * a * l, + i * a * s - o * h * l, + ]; + } + function i() { + var e = this.comp.renderedFrame - this.offsetTime, + r = this.keyframes[0].t - this.offsetTime, + n = this.keyframes[this.keyframes.length - 1].t - this.offsetTime; + if ( + !( + e === this._caching.lastFrame || + (this._caching.lastFrame !== t && + ((this._caching.lastFrame >= n && n <= e) || + (this._caching.lastFrame < r && e < r))) + ) + ) { + this._caching.lastFrame >= e && + ((this._caching._lastKeyframeIndex = -1), (this._caching.lastIndex = 0)); + var i = this.interpolateValue(e, this._caching); + this.pv = i; + } + return (this._caching.lastFrame = e), this.pv; + } + function a(t) { + var r; + if ('unidimensional' === this.propType) + (r = t * this.mult), 1e-5 < e(this.v - r) && ((this.v = r), (this._mdf = !0)); + else + for (var n = 0, i = this.v.length; n < i; ) + (r = t[n] * this.mult), + 1e-5 < e(this.v[n] - r) && ((this.v[n] = r), (this._mdf = !0)), + (n += 1); + } + function s() { + if (this.elem.globalData.frameId !== this.frameId && this.effectsSequence.length) + if (this.lock) this.setVValue(this.pv); + else { + var t; + (this.lock = !0), (this._mdf = this._isFirstFrame); + var e = this.effectsSequence.length, + r = this.kf ? this.pv : this.data.k; + for (t = 0; t < e; t += 1) r = this.effectsSequence[t](r); + this.setVValue(r), + (this._isFirstFrame = !1), + (this.lock = !1), + (this.frameId = this.elem.globalData.frameId); + } + } + function o(t) { + this.effectsSequence.push(t), this.container.addDynamicProperty(this); + } + function h(t, e, r, n) { + (this.propType = 'unidimensional'), + (this.mult = r || 1), + (this.data = e), + (this.v = r ? e.k * r : e.k), + (this.pv = e.k), + (this._mdf = !1), + (this.elem = t), + (this.container = n), + (this.comp = t.comp), + (this.k = !1), + (this.kf = !1), + (this.vel = 0), + (this.effectsSequence = []), + (this._isFirstFrame = !0), + (this.getValue = s), + (this.setVValue = a), + (this.addEffect = o); + } + function l(t, e, r, n) { + var i; + (this.propType = 'multidimensional'), + (this.mult = r || 1), + (this.data = e), + (this._mdf = !1), + (this.elem = t), + (this.container = n), + (this.comp = t.comp), + (this.k = !1), + (this.kf = !1), + (this.frameId = -1); + var h = e.k.length; + for ( + this.v = createTypedArray('float32', h), + this.pv = createTypedArray('float32', h), + this.vel = createTypedArray('float32', h), + i = 0; + i < h; + i += 1 + ) + (this.v[i] = e.k[i] * this.mult), (this.pv[i] = e.k[i]); + (this._isFirstFrame = !0), + (this.effectsSequence = []), + (this.getValue = s), + (this.setVValue = a), + (this.addEffect = o); + } + function c(e, n, h, l) { + (this.propType = 'unidimensional'), + (this.keyframes = n.k), + (this.offsetTime = e.data.st), + (this.frameId = -1), + (this._caching = { lastFrame: t, lastIndex: 0, value: 0, _lastKeyframeIndex: -1 }), + (this.k = !0), + (this.kf = !0), + (this.data = n), + (this.mult = h || 1), + (this.elem = e), + (this.container = l), + (this.comp = e.comp), + (this.v = t), + (this.pv = t), + (this._isFirstFrame = !0), + (this.getValue = s), + (this.setVValue = a), + (this.interpolateValue = r), + (this.effectsSequence = [i.bind(this)]), + (this.addEffect = o); + } + function u(e, n, h, l) { + var c; + this.propType = 'multidimensional'; + var u, + f, + p, + d, + m = n.k.length; + for (c = 0; c < m - 1; c += 1) + n.k[c].to && + n.k[c].s && + n.k[c + 1] && + n.k[c + 1].s && + ((u = n.k[c].s), + (f = n.k[c + 1].s), + (p = n.k[c].to), + (d = n.k[c].ti), + ((2 === u.length && + (u[0] !== f[0] || u[1] !== f[1]) && + bez.pointOnLine2D(u[0], u[1], f[0], f[1], u[0] + p[0], u[1] + p[1]) && + bez.pointOnLine2D(u[0], u[1], f[0], f[1], f[0] + d[0], f[1] + d[1])) || + (3 === u.length && + (u[0] !== f[0] || u[1] !== f[1] || u[2] !== f[2]) && + bez.pointOnLine3D( + u[0], + u[1], + u[2], + f[0], + f[1], + f[2], + u[0] + p[0], + u[1] + p[1], + u[2] + p[2], + ) && + bez.pointOnLine3D( + u[0], + u[1], + u[2], + f[0], + f[1], + f[2], + f[0] + d[0], + f[1] + d[1], + f[2] + d[2], + ))) && + ((n.k[c].to = null), (n.k[c].ti = null)), + u[0] === f[0] && + u[1] === f[1] && + 0 === p[0] && + 0 === p[1] && + 0 === d[0] && + 0 === d[1] && + (2 === u.length || (u[2] === f[2] && 0 === p[2] && 0 === d[2])) && + ((n.k[c].to = null), (n.k[c].ti = null))); + (this.effectsSequence = [i.bind(this)]), + (this.data = n), + (this.keyframes = n.k), + (this.offsetTime = e.data.st), + (this.k = !0), + (this.kf = !0), + (this._isFirstFrame = !0), + (this.mult = h || 1), + (this.elem = e), + (this.container = l), + (this.comp = e.comp), + (this.getValue = s), + (this.setVValue = a), + (this.interpolateValue = r), + (this.frameId = -1); + var v = n.k[0].s.length; + for ( + this.v = createTypedArray('float32', v), + this.pv = createTypedArray('float32', v), + c = 0; + c < v; + c += 1 + ) + (this.v[c] = t), (this.pv[c] = t); + (this._caching = { + lastFrame: t, + lastIndex: 0, + value: createTypedArray('float32', v), + }), + (this.addEffect = o); + } + return { + getProp: function (t, e, r, n, i) { + var a; + if (e.k.length) + if ('number' == typeof e.k[0]) a = new l(t, e, n, i); + else + switch (r) { + case 0: + a = new c(t, e, n, i); + break; + case 1: + a = new u(t, e, n, i); + } + else a = new h(t, e, n, i); + return a.effectsSequence.length && i.addDynamicProperty(a), a; + }, + }; + })(), + TransformPropertyFactory = (function () { + var t = [0, 0]; + function e(t, e, r) { + if ( + ((this.elem = t), + (this.frameId = -1), + (this.propType = 'transform'), + (this.data = e), + (this.v = new Matrix()), + (this.pre = new Matrix()), + (this.appliedTransformations = 0), + this.initDynamicPropertyContainer(r || t), + e.p && e.p.s + ? ((this.px = PropertyFactory.getProp(t, e.p.x, 0, 0, this)), + (this.py = PropertyFactory.getProp(t, e.p.y, 0, 0, this)), + e.p.z && (this.pz = PropertyFactory.getProp(t, e.p.z, 0, 0, this))) + : (this.p = PropertyFactory.getProp(t, e.p || { k: [0, 0, 0] }, 1, 0, this)), + e.rx) + ) { + if ( + ((this.rx = PropertyFactory.getProp(t, e.rx, 0, degToRads, this)), + (this.ry = PropertyFactory.getProp(t, e.ry, 0, degToRads, this)), + (this.rz = PropertyFactory.getProp(t, e.rz, 0, degToRads, this)), + e.or.k[0].ti) + ) { + var n, + i = e.or.k.length; + for (n = 0; n < i; n += 1) (e.or.k[n].to = null), (e.or.k[n].ti = null); + } + (this.or = PropertyFactory.getProp(t, e.or, 1, degToRads, this)), (this.or.sh = !0); + } else this.r = PropertyFactory.getProp(t, e.r || { k: 0 }, 0, degToRads, this); + e.sk && + ((this.sk = PropertyFactory.getProp(t, e.sk, 0, degToRads, this)), + (this.sa = PropertyFactory.getProp(t, e.sa, 0, degToRads, this))), + (this.a = PropertyFactory.getProp(t, e.a || { k: [0, 0, 0] }, 1, 0, this)), + (this.s = PropertyFactory.getProp(t, e.s || { k: [100, 100, 100] }, 1, 0.01, this)), + e.o + ? (this.o = PropertyFactory.getProp(t, e.o, 0, 0.01, t)) + : (this.o = { _mdf: !1, v: 1 }), + (this._isDirty = !0), + this.dynamicProperties.length || this.getValue(!0); + } + return ( + (e.prototype = { + applyToMatrix: function (t) { + var e = this._mdf; + this.iterateDynamicProperties(), + (this._mdf = this._mdf || e), + this.a && t.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]), + this.s && t.scale(this.s.v[0], this.s.v[1], this.s.v[2]), + this.sk && t.skewFromAxis(-this.sk.v, this.sa.v), + this.r + ? t.rotate(-this.r.v) + : t + .rotateZ(-this.rz.v) + .rotateY(this.ry.v) + .rotateX(this.rx.v) + .rotateZ(-this.or.v[2]) + .rotateY(this.or.v[1]) + .rotateX(this.or.v[0]), + this.data.p.s + ? this.data.p.z + ? t.translate(this.px.v, this.py.v, -this.pz.v) + : t.translate(this.px.v, this.py.v, 0) + : t.translate(this.p.v[0], this.p.v[1], -this.p.v[2]); + }, + getValue: function (e) { + if (this.elem.globalData.frameId !== this.frameId) { + if ( + (this._isDirty && (this.precalculateMatrix(), (this._isDirty = !1)), + this.iterateDynamicProperties(), + this._mdf || e) + ) { + var r; + if ( + (this.v.cloneFromProps(this.pre.props), + this.appliedTransformations < 1 && + this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]), + this.appliedTransformations < 2 && + this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]), + this.sk && + this.appliedTransformations < 3 && + this.v.skewFromAxis(-this.sk.v, this.sa.v), + this.r && this.appliedTransformations < 4 + ? this.v.rotate(-this.r.v) + : !this.r && + this.appliedTransformations < 4 && + this.v + .rotateZ(-this.rz.v) + .rotateY(this.ry.v) + .rotateX(this.rx.v) + .rotateZ(-this.or.v[2]) + .rotateY(this.or.v[1]) + .rotateX(this.or.v[0]), + this.autoOriented) + ) { + var n, i; + if ( + ((r = this.elem.globalData.frameRate), + this.p && this.p.keyframes && this.p.getValueAtTime) + ) + i = + this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t + ? ((n = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / r, 0)), + this.p.getValueAtTime(this.p.keyframes[0].t / r, 0)) + : this.p._caching.lastFrame + this.p.offsetTime >= + this.p.keyframes[this.p.keyframes.length - 1].t + ? ((n = this.p.getValueAtTime( + this.p.keyframes[this.p.keyframes.length - 1].t / r, + 0, + )), + this.p.getValueAtTime( + (this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / r, + 0, + )) + : ((n = this.p.pv), + this.p.getValueAtTime( + (this.p._caching.lastFrame + this.p.offsetTime - 0.01) / r, + this.p.offsetTime, + )); + else if ( + this.px && + this.px.keyframes && + this.py.keyframes && + this.px.getValueAtTime && + this.py.getValueAtTime + ) { + (n = []), (i = []); + var a = this.px, + s = this.py; + a._caching.lastFrame + a.offsetTime <= a.keyframes[0].t + ? ((n[0] = a.getValueAtTime((a.keyframes[0].t + 0.01) / r, 0)), + (n[1] = s.getValueAtTime((s.keyframes[0].t + 0.01) / r, 0)), + (i[0] = a.getValueAtTime(a.keyframes[0].t / r, 0)), + (i[1] = s.getValueAtTime(s.keyframes[0].t / r, 0))) + : a._caching.lastFrame + a.offsetTime >= + a.keyframes[a.keyframes.length - 1].t + ? ((n[0] = a.getValueAtTime( + a.keyframes[a.keyframes.length - 1].t / r, + 0, + )), + (n[1] = s.getValueAtTime( + s.keyframes[s.keyframes.length - 1].t / r, + 0, + )), + (i[0] = a.getValueAtTime( + (a.keyframes[a.keyframes.length - 1].t - 0.01) / r, + 0, + )), + (i[1] = s.getValueAtTime( + (s.keyframes[s.keyframes.length - 1].t - 0.01) / r, + 0, + ))) + : ((n = [a.pv, s.pv]), + (i[0] = a.getValueAtTime( + (a._caching.lastFrame + a.offsetTime - 0.01) / r, + a.offsetTime, + )), + (i[1] = s.getValueAtTime( + (s._caching.lastFrame + s.offsetTime - 0.01) / r, + s.offsetTime, + ))); + } else n = i = t; + this.v.rotate(-Math.atan2(n[1] - i[1], n[0] - i[0])); + } + this.data.p && this.data.p.s + ? this.data.p.z + ? this.v.translate(this.px.v, this.py.v, -this.pz.v) + : this.v.translate(this.px.v, this.py.v, 0) + : this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]); + } + this.frameId = this.elem.globalData.frameId; + } + }, + precalculateMatrix: function () { + if ( + !this.a.k && + (this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]), + (this.appliedTransformations = 1), + !this.s.effectsSequence.length) + ) { + if ( + (this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]), + (this.appliedTransformations = 2), + this.sk) + ) { + if (this.sk.effectsSequence.length || this.sa.effectsSequence.length) return; + this.pre.skewFromAxis(-this.sk.v, this.sa.v), + (this.appliedTransformations = 3); + } + this.r + ? this.r.effectsSequence.length || + (this.pre.rotate(-this.r.v), (this.appliedTransformations = 4)) + : this.rz.effectsSequence.length || + this.ry.effectsSequence.length || + this.rx.effectsSequence.length || + this.or.effectsSequence.length || + (this.pre + .rotateZ(-this.rz.v) + .rotateY(this.ry.v) + .rotateX(this.rx.v) + .rotateZ(-this.or.v[2]) + .rotateY(this.or.v[1]) + .rotateX(this.or.v[0]), + (this.appliedTransformations = 4)); + } + }, + autoOrient: function () {}, + }), + extendPrototype([DynamicPropertyContainer], e), + (e.prototype.addDynamicProperty = function (t) { + this._addDynamicProperty(t), this.elem.addDynamicProperty(t), (this._isDirty = !0); + }), + (e.prototype._addDynamicProperty = + DynamicPropertyContainer.prototype.addDynamicProperty), + { + getTransformProperty: function (t, r, n) { + return new e(t, r, n); + }, + } + ); + })(); + function ShapePath() { + (this.c = !1), + (this._length = 0), + (this._maxLength = 8), + (this.v = createSizedArray(this._maxLength)), + (this.o = createSizedArray(this._maxLength)), + (this.i = createSizedArray(this._maxLength)); + } + (ShapePath.prototype.setPathData = function (t, e) { + (this.c = t), this.setLength(e); + for (var r = 0; r < e; ) + (this.v[r] = pointPool.newElement()), + (this.o[r] = pointPool.newElement()), + (this.i[r] = pointPool.newElement()), + (r += 1); + }), + (ShapePath.prototype.setLength = function (t) { + for (; this._maxLength < t; ) this.doubleArrayLength(); + this._length = t; + }), + (ShapePath.prototype.doubleArrayLength = function () { + (this.v = this.v.concat(createSizedArray(this._maxLength))), + (this.i = this.i.concat(createSizedArray(this._maxLength))), + (this.o = this.o.concat(createSizedArray(this._maxLength))), + (this._maxLength *= 2); + }), + (ShapePath.prototype.setXYAt = function (t, e, r, n, i) { + var a; + switch ( + ((this._length = Math.max(this._length, n + 1)), + this._length >= this._maxLength && this.doubleArrayLength(), + r) + ) { + case 'v': + a = this.v; + break; + case 'i': + a = this.i; + break; + case 'o': + a = this.o; + break; + default: + a = []; + } + (!a[n] || (a[n] && !i)) && (a[n] = pointPool.newElement()), + (a[n][0] = t), + (a[n][1] = e); + }), + (ShapePath.prototype.setTripleAt = function (t, e, r, n, i, a, s, o) { + this.setXYAt(t, e, 'v', s, o), + this.setXYAt(r, n, 'o', s, o), + this.setXYAt(i, a, 'i', s, o); + }), + (ShapePath.prototype.reverse = function () { + var t = new ShapePath(); + t.setPathData(this.c, this._length); + var e = this.v, + r = this.o, + n = this.i, + i = 0; + this.c && + (t.setTripleAt(e[0][0], e[0][1], n[0][0], n[0][1], r[0][0], r[0][1], 0, !1), (i = 1)); + var a, + s = this._length - 1, + o = this._length; + for (a = i; a < o; a += 1) + t.setTripleAt(e[s][0], e[s][1], n[s][0], n[s][1], r[s][0], r[s][1], a, !1), (s -= 1); + return t; + }); + var ShapePropertyFactory = (function () { + var t = -999999; + function e(t, e, r) { + var n, + i, + a, + s, + o, + h, + l, + c, + u, + f = r.lastIndex, + p = this.keyframes; + if (t < p[0].t - this.offsetTime) (n = p[0].s[0]), (a = !0), (f = 0); + else if (t >= p[p.length - 1].t - this.offsetTime) + (n = p[p.length - 1].s ? p[p.length - 1].s[0] : p[p.length - 2].e[0]), (a = !0); + else { + for ( + var d, m, v = f, y = p.length - 1, g = !0; + g && ((d = p[v]), !((m = p[v + 1]).t - this.offsetTime > t)); + + ) + v < y - 1 ? (v += 1) : (g = !1); + if (((f = v), !(a = 1 === d.h))) { + if (t >= m.t - this.offsetTime) c = 1; + else if (t < d.t - this.offsetTime) c = 0; + else { + var E; + d.__fnct + ? (E = d.__fnct) + : ((E = BezierFactory.getBezierEasing(d.o.x, d.o.y, d.i.x, d.i.y).get), + (d.__fnct = E)), + (c = E( + (t - (d.t - this.offsetTime)) / + (m.t - this.offsetTime - (d.t - this.offsetTime)), + )); + } + i = m.s ? m.s[0] : d.e[0]; + } + n = d.s[0]; + } + for (h = e._length, l = n.i[0].length, r.lastIndex = f, s = 0; s < h; s += 1) + for (o = 0; o < l; o += 1) + (u = a ? n.i[s][o] : n.i[s][o] + (i.i[s][o] - n.i[s][o]) * c), + (e.i[s][o] = u), + (u = a ? n.o[s][o] : n.o[s][o] + (i.o[s][o] - n.o[s][o]) * c), + (e.o[s][o] = u), + (u = a ? n.v[s][o] : n.v[s][o] + (i.v[s][o] - n.v[s][o]) * c), + (e.v[s][o] = u); + } + function r() { + this.paths = this.localShapeCollection; + } + function n(t) { + (function (t, e) { + if (t._length !== e._length || t.c !== e.c) return !1; + var r, + n = t._length; + for (r = 0; r < n; r += 1) + if ( + t.v[r][0] !== e.v[r][0] || + t.v[r][1] !== e.v[r][1] || + t.o[r][0] !== e.o[r][0] || + t.o[r][1] !== e.o[r][1] || + t.i[r][0] !== e.i[r][0] || + t.i[r][1] !== e.i[r][1] + ) + return !1; + return !0; + })(this.v, t) || + ((this.v = shapePool.clone(t)), + this.localShapeCollection.releaseShapes(), + this.localShapeCollection.addShape(this.v), + (this._mdf = !0), + (this.paths = this.localShapeCollection)); + } + function i() { + if (this.elem.globalData.frameId !== this.frameId) + if (this.effectsSequence.length) + if (this.lock) this.setVValue(this.pv); + else { + var t, e; + (this.lock = !0), + (this._mdf = !1), + (t = this.kf ? this.pv : this.data.ks ? this.data.ks.k : this.data.pt.k); + var r = this.effectsSequence.length; + for (e = 0; e < r; e += 1) t = this.effectsSequence[e](t); + this.setVValue(t), + (this.lock = !1), + (this.frameId = this.elem.globalData.frameId); + } + else this._mdf = !1; + } + function a(t, e, n) { + (this.propType = 'shape'), + (this.comp = t.comp), + (this.container = t), + (this.elem = t), + (this.data = e), + (this.k = !1), + (this.kf = !1), + (this._mdf = !1); + var i = 3 === n ? e.pt.k : e.ks.k; + (this.v = shapePool.clone(i)), + (this.pv = shapePool.clone(this.v)), + (this.localShapeCollection = shapeCollectionPool.newShapeCollection()), + (this.paths = this.localShapeCollection), + this.paths.addShape(this.v), + (this.reset = r), + (this.effectsSequence = []); + } + function s(t) { + this.effectsSequence.push(t), this.container.addDynamicProperty(this); + } + function o(e, n, i) { + (this.propType = 'shape'), + (this.comp = e.comp), + (this.elem = e), + (this.container = e), + (this.offsetTime = e.data.st), + (this.keyframes = 3 === i ? n.pt.k : n.ks.k), + (this.k = !0), + (this.kf = !0); + var a = this.keyframes[0].s[0].i.length; + (this.v = shapePool.newElement()), + this.v.setPathData(this.keyframes[0].s[0].c, a), + (this.pv = shapePool.clone(this.v)), + (this.localShapeCollection = shapeCollectionPool.newShapeCollection()), + (this.paths = this.localShapeCollection), + this.paths.addShape(this.v), + (this.lastFrame = t), + (this.reset = r), + (this._caching = { lastFrame: t, lastIndex: 0 }), + (this.effectsSequence = [ + function () { + var e = this.comp.renderedFrame - this.offsetTime, + r = this.keyframes[0].t - this.offsetTime, + n = this.keyframes[this.keyframes.length - 1].t - this.offsetTime, + i = this._caching.lastFrame; + return ( + (i !== t && ((i < r && e < r) || (n < i && n < e))) || + ((this._caching.lastIndex = i < e ? this._caching.lastIndex : 0), + this.interpolateShape(e, this.pv, this._caching)), + (this._caching.lastFrame = e), + this.pv + ); + }.bind(this), + ]); + } + (a.prototype.interpolateShape = e), + (a.prototype.getValue = i), + (a.prototype.setVValue = n), + (a.prototype.addEffect = s), + (o.prototype.getValue = i), + (o.prototype.interpolateShape = e), + (o.prototype.setVValue = n), + (o.prototype.addEffect = s); + var h = (function () { + var t = roundCorner; + function e(t, e) { + (this.v = shapePool.newElement()), + this.v.setPathData(!0, 4), + (this.localShapeCollection = shapeCollectionPool.newShapeCollection()), + (this.paths = this.localShapeCollection), + this.localShapeCollection.addShape(this.v), + (this.d = e.d), + (this.elem = t), + (this.comp = t.comp), + (this.frameId = -1), + this.initDynamicPropertyContainer(t), + (this.p = PropertyFactory.getProp(t, e.p, 1, 0, this)), + (this.s = PropertyFactory.getProp(t, e.s, 1, 0, this)), + this.dynamicProperties.length + ? (this.k = !0) + : ((this.k = !1), this.convertEllToPath()); + } + return ( + (e.prototype = { + reset: r, + getValue: function () { + this.elem.globalData.frameId !== this.frameId && + ((this.frameId = this.elem.globalData.frameId), + this.iterateDynamicProperties(), + this._mdf && this.convertEllToPath()); + }, + convertEllToPath: function () { + var e = this.p.v[0], + r = this.p.v[1], + n = this.s.v[0] / 2, + i = this.s.v[1] / 2, + a = 3 !== this.d, + s = this.v; + (s.v[0][0] = e), + (s.v[0][1] = r - i), + (s.v[1][0] = a ? e + n : e - n), + (s.v[1][1] = r), + (s.v[2][0] = e), + (s.v[2][1] = r + i), + (s.v[3][0] = a ? e - n : e + n), + (s.v[3][1] = r), + (s.i[0][0] = a ? e - n * t : e + n * t), + (s.i[0][1] = r - i), + (s.i[1][0] = a ? e + n : e - n), + (s.i[1][1] = r - i * t), + (s.i[2][0] = a ? e + n * t : e - n * t), + (s.i[2][1] = r + i), + (s.i[3][0] = a ? e - n : e + n), + (s.i[3][1] = r + i * t), + (s.o[0][0] = a ? e + n * t : e - n * t), + (s.o[0][1] = r - i), + (s.o[1][0] = a ? e + n : e - n), + (s.o[1][1] = r + i * t), + (s.o[2][0] = a ? e - n * t : e + n * t), + (s.o[2][1] = r + i), + (s.o[3][0] = a ? e - n : e + n), + (s.o[3][1] = r - i * t); + }, + }), + extendPrototype([DynamicPropertyContainer], e), + e + ); + })(), + l = (function () { + function t(t, e) { + (this.v = shapePool.newElement()), + this.v.setPathData(!0, 0), + (this.elem = t), + (this.comp = t.comp), + (this.data = e), + (this.frameId = -1), + (this.d = e.d), + this.initDynamicPropertyContainer(t), + 1 === e.sy + ? ((this.ir = PropertyFactory.getProp(t, e.ir, 0, 0, this)), + (this.is = PropertyFactory.getProp(t, e.is, 0, 0.01, this)), + (this.convertToPath = this.convertStarToPath)) + : (this.convertToPath = this.convertPolygonToPath), + (this.pt = PropertyFactory.getProp(t, e.pt, 0, 0, this)), + (this.p = PropertyFactory.getProp(t, e.p, 1, 0, this)), + (this.r = PropertyFactory.getProp(t, e.r, 0, degToRads, this)), + (this.or = PropertyFactory.getProp(t, e.or, 0, 0, this)), + (this.os = PropertyFactory.getProp(t, e.os, 0, 0.01, this)), + (this.localShapeCollection = shapeCollectionPool.newShapeCollection()), + this.localShapeCollection.addShape(this.v), + (this.paths = this.localShapeCollection), + this.dynamicProperties.length + ? (this.k = !0) + : ((this.k = !1), this.convertToPath()); + } + return ( + (t.prototype = { + reset: r, + getValue: function () { + this.elem.globalData.frameId !== this.frameId && + ((this.frameId = this.elem.globalData.frameId), + this.iterateDynamicProperties(), + this._mdf && this.convertToPath()); + }, + convertStarToPath: function () { + var t, + e, + r, + n, + i = 2 * Math.floor(this.pt.v), + a = (2 * Math.PI) / i, + s = !0, + o = this.or.v, + h = this.ir.v, + l = this.os.v, + c = this.is.v, + u = (2 * Math.PI * o) / (2 * i), + f = (2 * Math.PI * h) / (2 * i), + p = -Math.PI / 2; + p += this.r.v; + var d = 3 === this.data.d ? -1 : 1; + for (t = this.v._length = 0; t < i; t += 1) { + (r = s ? l : c), (n = s ? u : f); + var m = (e = s ? o : h) * Math.cos(p), + v = e * Math.sin(p), + y = 0 === m && 0 === v ? 0 : v / Math.sqrt(m * m + v * v), + g = 0 === m && 0 === v ? 0 : -m / Math.sqrt(m * m + v * v); + (m += +this.p.v[0]), + (v += +this.p.v[1]), + this.v.setTripleAt( + m, + v, + m - y * n * r * d, + v - g * n * r * d, + m + y * n * r * d, + v + g * n * r * d, + t, + !0, + ), + (s = !s), + (p += a * d); + } + }, + convertPolygonToPath: function () { + var t, + e = Math.floor(this.pt.v), + r = (2 * Math.PI) / e, + n = this.or.v, + i = this.os.v, + a = (2 * Math.PI * n) / (4 * e), + s = 0.5 * -Math.PI, + o = 3 === this.data.d ? -1 : 1; + for (s += this.r.v, t = this.v._length = 0; t < e; t += 1) { + var h = n * Math.cos(s), + l = n * Math.sin(s), + c = 0 === h && 0 === l ? 0 : l / Math.sqrt(h * h + l * l), + u = 0 === h && 0 === l ? 0 : -h / Math.sqrt(h * h + l * l); + (h += +this.p.v[0]), + (l += +this.p.v[1]), + this.v.setTripleAt( + h, + l, + h - c * a * i * o, + l - u * a * i * o, + h + c * a * i * o, + l + u * a * i * o, + t, + !0, + ), + (s += r * o); + } + (this.paths.length = 0), (this.paths[0] = this.v); + }, + }), + extendPrototype([DynamicPropertyContainer], t), + t + ); + })(), + c = (function () { + function t(t, e) { + (this.v = shapePool.newElement()), + (this.v.c = !0), + (this.localShapeCollection = shapeCollectionPool.newShapeCollection()), + this.localShapeCollection.addShape(this.v), + (this.paths = this.localShapeCollection), + (this.elem = t), + (this.comp = t.comp), + (this.frameId = -1), + (this.d = e.d), + this.initDynamicPropertyContainer(t), + (this.p = PropertyFactory.getProp(t, e.p, 1, 0, this)), + (this.s = PropertyFactory.getProp(t, e.s, 1, 0, this)), + (this.r = PropertyFactory.getProp(t, e.r, 0, 0, this)), + this.dynamicProperties.length + ? (this.k = !0) + : ((this.k = !1), this.convertRectToPath()); + } + return ( + (t.prototype = { + convertRectToPath: function () { + var t = this.p.v[0], + e = this.p.v[1], + r = this.s.v[0] / 2, + n = this.s.v[1] / 2, + i = bmMin(r, n, this.r.v), + a = i * (1 - roundCorner); + (this.v._length = 0), + 2 === this.d || 1 === this.d + ? (this.v.setTripleAt( + t + r, + e - n + i, + t + r, + e - n + i, + t + r, + e - n + a, + 0, + !0, + ), + this.v.setTripleAt( + t + r, + e + n - i, + t + r, + e + n - a, + t + r, + e + n - i, + 1, + !0, + ), + 0 !== i + ? (this.v.setTripleAt( + t + r - i, + e + n, + t + r - i, + e + n, + t + r - a, + e + n, + 2, + !0, + ), + this.v.setTripleAt( + t - r + i, + e + n, + t - r + a, + e + n, + t - r + i, + e + n, + 3, + !0, + ), + this.v.setTripleAt( + t - r, + e + n - i, + t - r, + e + n - i, + t - r, + e + n - a, + 4, + !0, + ), + this.v.setTripleAt( + t - r, + e - n + i, + t - r, + e - n + a, + t - r, + e - n + i, + 5, + !0, + ), + this.v.setTripleAt( + t - r + i, + e - n, + t - r + i, + e - n, + t - r + a, + e - n, + 6, + !0, + ), + this.v.setTripleAt( + t + r - i, + e - n, + t + r - a, + e - n, + t + r - i, + e - n, + 7, + !0, + )) + : (this.v.setTripleAt( + t - r, + e + n, + t - r + a, + e + n, + t - r, + e + n, + 2, + ), + this.v.setTripleAt( + t - r, + e - n, + t - r, + e - n + a, + t - r, + e - n, + 3, + ))) + : (this.v.setTripleAt( + t + r, + e - n + i, + t + r, + e - n + a, + t + r, + e - n + i, + 0, + !0, + ), + 0 !== i + ? (this.v.setTripleAt( + t + r - i, + e - n, + t + r - i, + e - n, + t + r - a, + e - n, + 1, + !0, + ), + this.v.setTripleAt( + t - r + i, + e - n, + t - r + a, + e - n, + t - r + i, + e - n, + 2, + !0, + ), + this.v.setTripleAt( + t - r, + e - n + i, + t - r, + e - n + i, + t - r, + e - n + a, + 3, + !0, + ), + this.v.setTripleAt( + t - r, + e + n - i, + t - r, + e + n - a, + t - r, + e + n - i, + 4, + !0, + ), + this.v.setTripleAt( + t - r + i, + e + n, + t - r + i, + e + n, + t - r + a, + e + n, + 5, + !0, + ), + this.v.setTripleAt( + t + r - i, + e + n, + t + r - a, + e + n, + t + r - i, + e + n, + 6, + !0, + ), + this.v.setTripleAt( + t + r, + e + n - i, + t + r, + e + n - i, + t + r, + e + n - a, + 7, + !0, + )) + : (this.v.setTripleAt( + t - r, + e - n, + t - r + a, + e - n, + t - r, + e - n, + 1, + !0, + ), + this.v.setTripleAt( + t - r, + e + n, + t - r, + e + n - a, + t - r, + e + n, + 2, + !0, + ), + this.v.setTripleAt( + t + r, + e + n, + t + r - a, + e + n, + t + r, + e + n, + 3, + !0, + ))); + }, + getValue: function () { + this.elem.globalData.frameId !== this.frameId && + ((this.frameId = this.elem.globalData.frameId), + this.iterateDynamicProperties(), + this._mdf && this.convertRectToPath()); + }, + reset: r, + }), + extendPrototype([DynamicPropertyContainer], t), + t + ); + })(); + return { + getShapeProp: function (t, e, r) { + var n; + return ( + 3 === r || 4 === r + ? (n = (3 === r ? e.pt : e.ks).k.length ? new o(t, e, r) : new a(t, e, r)) + : 5 === r + ? (n = new c(t, e)) + : 6 === r + ? (n = new h(t, e)) + : 7 === r && (n = new l(t, e)), + n.k && t.addDynamicProperty(n), + n + ); + }, + getConstructorFunction: function () { + return a; + }, + getKeyframedConstructorFunction: function () { + return o; + }, + }; + })(), + ShapeModifiers = + ((gs = {}), + (hs = {}), + (gs.registerModifier = function (t, e) { + hs[t] || (hs[t] = e); + }), + (gs.getModifier = function (t, e, r) { + return new hs[t](e, r); + }), + gs), + gs, + hs; + function ShapeModifier() {} + function TrimModifier() {} + function RoundCornersModifier() {} + function PuckerAndBloatModifier() {} + function RepeaterModifier() {} + function ShapeCollection() { + (this._length = 0), + (this._maxLength = 4), + (this.shapes = createSizedArray(this._maxLength)); + } + function DashProperty(t, e, r, n) { + var i; + (this.elem = t), + (this.frameId = -1), + (this.dataProps = createSizedArray(e.length)), + (this.renderer = r), + (this.k = !1), + (this.dashStr = ''), + (this.dashArray = createTypedArray('float32', e.length ? e.length - 1 : 0)), + (this.dashoffset = createTypedArray('float32', 1)), + this.initDynamicPropertyContainer(n); + var a, + s = e.length || 0; + for (i = 0; i < s; i += 1) + (a = PropertyFactory.getProp(t, e[i].v, 0, 0, this)), + (this.k = a.k || this.k), + (this.dataProps[i] = { n: e[i].n, p: a }); + this.k || this.getValue(!0), (this._isAnimated = this.k); + } + function GradientProperty(t, e, r) { + (this.data = e), (this.c = createTypedArray('uint8c', 4 * e.p)); + var n = e.k.k[0].s ? e.k.k[0].s.length - 4 * e.p : e.k.k.length - 4 * e.p; + (this.o = createTypedArray('float32', n)), + (this._cmdf = !1), + (this._omdf = !1), + (this._collapsable = this.checkCollapsable()), + (this._hasOpacity = n), + this.initDynamicPropertyContainer(r), + (this.prop = PropertyFactory.getProp(t, e.k, 1, null, this)), + (this.k = this.prop.k), + this.getValue(!0); + } + (ShapeModifier.prototype.initModifierProperties = function () {}), + (ShapeModifier.prototype.addShapeToModifier = function () {}), + (ShapeModifier.prototype.addShape = function (t) { + if (!this.closed) { + t.sh.container.addDynamicProperty(t.sh); + var e = { + shape: t.sh, + data: t, + localShapeCollection: shapeCollectionPool.newShapeCollection(), + }; + this.shapes.push(e), + this.addShapeToModifier(e), + this._isAnimated && t.setAsAnimated(); + } + }), + (ShapeModifier.prototype.init = function (t, e) { + (this.shapes = []), + (this.elem = t), + this.initDynamicPropertyContainer(t), + this.initModifierProperties(t, e), + (this.frameId = initialDefaultFrame), + (this.closed = !1), + (this.k = !1), + this.dynamicProperties.length ? (this.k = !0) : this.getValue(!0); + }), + (ShapeModifier.prototype.processKeys = function () { + this.elem.globalData.frameId !== this.frameId && + ((this.frameId = this.elem.globalData.frameId), this.iterateDynamicProperties()); + }), + extendPrototype([DynamicPropertyContainer], ShapeModifier), + extendPrototype([ShapeModifier], TrimModifier), + (TrimModifier.prototype.initModifierProperties = function (t, e) { + (this.s = PropertyFactory.getProp(t, e.s, 0, 0.01, this)), + (this.e = PropertyFactory.getProp(t, e.e, 0, 0.01, this)), + (this.o = PropertyFactory.getProp(t, e.o, 0, 0, this)), + (this.sValue = 0), + (this.eValue = 0), + (this.getValue = this.processKeys), + (this.m = e.m), + (this._isAnimated = + !!this.s.effectsSequence.length || + !!this.e.effectsSequence.length || + !!this.o.effectsSequence.length); + }), + (TrimModifier.prototype.addShapeToModifier = function (t) { + t.pathsData = []; + }), + (TrimModifier.prototype.calculateShapeEdges = function (t, e, r, n, i) { + var a = []; + e <= 1 + ? a.push({ s: t, e: e }) + : 1 <= t + ? a.push({ s: t - 1, e: e - 1 }) + : (a.push({ s: t, e: 1 }), a.push({ s: 0, e: e - 1 })); + var s, + o, + h = [], + l = a.length; + for (s = 0; s < l; s += 1) { + var c, u; + (o = a[s]).e * i < n || + o.s * i > n + r || + ((c = o.s * i <= n ? 0 : (o.s * i - n) / r), + (u = o.e * i >= n + r ? 1 : (o.e * i - n) / r), + h.push([c, u])); + } + return h.length || h.push([0, 0]), h; + }), + (TrimModifier.prototype.releasePathsData = function (t) { + var e, + r = t.length; + for (e = 0; e < r; e += 1) segmentsLengthPool.release(t[e]); + return (t.length = 0), t; + }), + (TrimModifier.prototype.processShapes = function (t) { + var e, r, n, i; + if (this._mdf || t) { + var a = (this.o.v % 360) / 360; + if ( + (a < 0 && (a += 1), + (e = 1 < this.s.v ? 1 + a : this.s.v < 0 ? 0 + a : this.s.v + a), + (r = 1 < this.e.v ? 1 + a : this.e.v < 0 ? 0 + a : this.e.v + a) < e) + ) { + var s = e; + (e = r), (r = s); + } + (e = 1e-4 * Math.round(1e4 * e)), + (r = 1e-4 * Math.round(1e4 * r)), + (this.sValue = e), + (this.eValue = r); + } else (e = this.sValue), (r = this.eValue); + var o, + h, + l, + c, + u, + f = this.shapes.length, + p = 0; + if (r === e) + for (i = 0; i < f; i += 1) + this.shapes[i].localShapeCollection.releaseShapes(), + (this.shapes[i].shape._mdf = !0), + (this.shapes[i].shape.paths = this.shapes[i].localShapeCollection), + this._mdf && (this.shapes[i].pathsData.length = 0); + else if ((1 === r && 0 === e) || (0 === r && 1 === e)) { + if (this._mdf) + for (i = 0; i < f; i += 1) + (this.shapes[i].pathsData.length = 0), (this.shapes[i].shape._mdf = !0); + } else { + var d, + m, + v = []; + for (i = 0; i < f; i += 1) + if ((d = this.shapes[i]).shape._mdf || this._mdf || t || 2 === this.m) { + if ( + ((h = (n = d.shape.paths)._length), + (u = 0), + !d.shape._mdf && d.pathsData.length) + ) + u = d.totalShapeLength; + else { + for (l = this.releasePathsData(d.pathsData), o = 0; o < h; o += 1) + (c = bez.getSegmentsLength(n.shapes[o])), l.push(c), (u += c.totalLength); + (d.totalShapeLength = u), (d.pathsData = l); + } + (p += u), (d.shape._mdf = !0); + } else d.shape.paths = d.localShapeCollection; + var y, + g = e, + E = r, + b = 0; + for (i = f - 1; 0 <= i; i -= 1) + if ((d = this.shapes[i]).shape._mdf) { + for ( + (m = d.localShapeCollection).releaseShapes(), + 2 === this.m && 1 < f + ? ((y = this.calculateShapeEdges(e, r, d.totalShapeLength, b, p)), + (b += d.totalShapeLength)) + : (y = [[g, E]]), + h = y.length, + o = 0; + o < h; + o += 1 + ) { + (g = y[o][0]), + (E = y[o][1]), + (v.length = 0), + E <= 1 + ? v.push({ s: d.totalShapeLength * g, e: d.totalShapeLength * E }) + : 1 <= g + ? v.push({ + s: d.totalShapeLength * (g - 1), + e: d.totalShapeLength * (E - 1), + }) + : (v.push({ s: d.totalShapeLength * g, e: d.totalShapeLength }), + v.push({ s: 0, e: d.totalShapeLength * (E - 1) })); + var _ = this.addShapes(d, v[0]); + if (v[0].s !== v[0].e) { + if (1 < v.length) + if (d.shape.paths.shapes[d.shape.paths._length - 1].c) { + var x = _.pop(); + this.addPaths(_, m), (_ = this.addShapes(d, v[1], x)); + } else this.addPaths(_, m), (_ = this.addShapes(d, v[1])); + this.addPaths(_, m); + } + } + d.shape.paths = m; + } + } + }), + (TrimModifier.prototype.addPaths = function (t, e) { + var r, + n = t.length; + for (r = 0; r < n; r += 1) e.addShape(t[r]); + }), + (TrimModifier.prototype.addSegment = function (t, e, r, n, i, a, s) { + i.setXYAt(e[0], e[1], 'o', a), + i.setXYAt(r[0], r[1], 'i', a + 1), + s && i.setXYAt(t[0], t[1], 'v', a), + i.setXYAt(n[0], n[1], 'v', a + 1); + }), + (TrimModifier.prototype.addSegmentFromArray = function (t, e, r, n) { + e.setXYAt(t[1], t[5], 'o', r), + e.setXYAt(t[2], t[6], 'i', r + 1), + n && e.setXYAt(t[0], t[4], 'v', r), + e.setXYAt(t[3], t[7], 'v', r + 1); + }), + (TrimModifier.prototype.addShapes = function (t, e, r) { + var n, + i, + a, + s, + o, + h, + l, + c, + u = t.pathsData, + f = t.shape.paths.shapes, + p = t.shape.paths._length, + d = 0, + m = [], + v = !0; + for ( + c = r ? ((o = r._length), r._length) : ((r = shapePool.newElement()), (o = 0)), + m.push(r), + n = 0; + n < p; + n += 1 + ) { + for ( + h = u[n].lengths, r.c = f[n].c, a = f[n].c ? h.length : h.length + 1, i = 1; + i < a; + i += 1 + ) + if (d + (s = h[i - 1]).addedLength < e.s) (d += s.addedLength), (r.c = !1); + else { + if (d > e.e) { + r.c = !1; + break; + } + e.s <= d && e.e >= d + s.addedLength + ? (this.addSegment(f[n].v[i - 1], f[n].o[i - 1], f[n].i[i], f[n].v[i], r, o, v), + (v = !1)) + : ((l = bez.getNewSegment( + f[n].v[i - 1], + f[n].v[i], + f[n].o[i - 1], + f[n].i[i], + (e.s - d) / s.addedLength, + (e.e - d) / s.addedLength, + h[i - 1], + )), + this.addSegmentFromArray(l, r, o, v), + (v = !1), + (r.c = !1)), + (d += s.addedLength), + (o += 1); + } + if (f[n].c && h.length) { + if (((s = h[i - 1]), d <= e.e)) { + var y = h[i - 1].addedLength; + e.s <= d && e.e >= d + y + ? (this.addSegment(f[n].v[i - 1], f[n].o[i - 1], f[n].i[0], f[n].v[0], r, o, v), + (v = !1)) + : ((l = bez.getNewSegment( + f[n].v[i - 1], + f[n].v[0], + f[n].o[i - 1], + f[n].i[0], + (e.s - d) / y, + (e.e - d) / y, + h[i - 1], + )), + this.addSegmentFromArray(l, r, o, v), + (v = !1), + (r.c = !1)); + } else r.c = !1; + (d += s.addedLength), (o += 1); + } + if ( + (r._length && + (r.setXYAt(r.v[c][0], r.v[c][1], 'i', c), + r.setXYAt(r.v[r._length - 1][0], r.v[r._length - 1][1], 'o', r._length - 1)), + d > e.e) + ) + break; + n < p - 1 && ((r = shapePool.newElement()), (v = !0), m.push(r), (o = 0)); + } + return m; + }), + ShapeModifiers.registerModifier('tm', TrimModifier), + extendPrototype([ShapeModifier], RoundCornersModifier), + (RoundCornersModifier.prototype.initModifierProperties = function (t, e) { + (this.getValue = this.processKeys), + (this.rd = PropertyFactory.getProp(t, e.r, 0, null, this)), + (this._isAnimated = !!this.rd.effectsSequence.length); + }), + (RoundCornersModifier.prototype.processPath = function (t, e) { + var r, + n = shapePool.newElement(); + n.c = t.c; + var i, + a, + s, + o, + h, + l, + c, + u, + f, + p, + d, + m, + v = t._length, + y = 0; + for (r = 0; r < v; r += 1) + (i = t.v[r]), + (s = t.o[r]), + (a = t.i[r]), + i[0] === s[0] && i[1] === s[1] && i[0] === a[0] && i[1] === a[1] + ? (0 !== r && r !== v - 1) || t.c + ? ((o = 0 === r ? t.v[v - 1] : t.v[r - 1]), + (l = (h = Math.sqrt(Math.pow(i[0] - o[0], 2) + Math.pow(i[1] - o[1], 2))) + ? Math.min(h / 2, e) / h + : 0), + (c = d = i[0] + (o[0] - i[0]) * l), + (u = m = i[1] - (i[1] - o[1]) * l), + (f = c - (c - i[0]) * roundCorner), + (p = u - (u - i[1]) * roundCorner), + n.setTripleAt(c, u, f, p, d, m, y), + (y += 1), + (o = r === v - 1 ? t.v[0] : t.v[r + 1]), + (l = (h = Math.sqrt(Math.pow(i[0] - o[0], 2) + Math.pow(i[1] - o[1], 2))) + ? Math.min(h / 2, e) / h + : 0), + (c = f = i[0] + (o[0] - i[0]) * l), + (u = p = i[1] + (o[1] - i[1]) * l), + (d = c - (c - i[0]) * roundCorner), + (m = u - (u - i[1]) * roundCorner), + n.setTripleAt(c, u, f, p, d, m, y)) + : n.setTripleAt(i[0], i[1], s[0], s[1], a[0], a[1], y) + : n.setTripleAt( + t.v[r][0], + t.v[r][1], + t.o[r][0], + t.o[r][1], + t.i[r][0], + t.i[r][1], + y, + ), + (y += 1); + return n; + }), + (RoundCornersModifier.prototype.processShapes = function (t) { + var e, + r, + n, + i, + a, + s, + o = this.shapes.length, + h = this.rd.v; + if (0 !== h) + for (r = 0; r < o; r += 1) { + if ( + ((s = (a = this.shapes[r]).localShapeCollection), a.shape._mdf || this._mdf || t) + ) + for ( + s.releaseShapes(), + a.shape._mdf = !0, + e = a.shape.paths.shapes, + i = a.shape.paths._length, + n = 0; + n < i; + n += 1 + ) + s.addShape(this.processPath(e[n], h)); + a.shape.paths = a.localShapeCollection; + } + this.dynamicProperties.length || (this._mdf = !1); + }), + ShapeModifiers.registerModifier('rd', RoundCornersModifier), + extendPrototype([ShapeModifier], PuckerAndBloatModifier), + (PuckerAndBloatModifier.prototype.initModifierProperties = function (t, e) { + (this.getValue = this.processKeys), + (this.amount = PropertyFactory.getProp(t, e.a, 0, null, this)), + (this._isAnimated = !!this.amount.effectsSequence.length); + }), + (PuckerAndBloatModifier.prototype.processPath = function (t, e) { + var r = e / 100, + n = [0, 0], + i = t._length, + a = 0; + for (a = 0; a < i; a += 1) (n[0] += t.v[a][0]), (n[1] += t.v[a][1]); + (n[0] /= i), (n[1] /= i); + var s, + o, + h, + l, + c, + u, + f = shapePool.newElement(); + for (f.c = t.c, a = 0; a < i; a += 1) + (s = t.v[a][0] + (n[0] - t.v[a][0]) * r), + (o = t.v[a][1] + (n[1] - t.v[a][1]) * r), + (h = t.o[a][0] + (n[0] - t.o[a][0]) * -r), + (l = t.o[a][1] + (n[1] - t.o[a][1]) * -r), + (c = t.i[a][0] + (n[0] - t.i[a][0]) * -r), + (u = t.i[a][1] + (n[1] - t.i[a][1]) * -r), + f.setTripleAt(s, o, h, l, c, u, a); + return f; + }), + (PuckerAndBloatModifier.prototype.processShapes = function (t) { + var e, + r, + n, + i, + a, + s, + o = this.shapes.length, + h = this.amount.v; + if (0 !== h) + for (r = 0; r < o; r += 1) { + if ( + ((s = (a = this.shapes[r]).localShapeCollection), a.shape._mdf || this._mdf || t) + ) + for ( + s.releaseShapes(), + a.shape._mdf = !0, + e = a.shape.paths.shapes, + i = a.shape.paths._length, + n = 0; + n < i; + n += 1 + ) + s.addShape(this.processPath(e[n], h)); + a.shape.paths = a.localShapeCollection; + } + this.dynamicProperties.length || (this._mdf = !1); + }), + ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier), + extendPrototype([ShapeModifier], RepeaterModifier), + (RepeaterModifier.prototype.initModifierProperties = function (t, e) { + (this.getValue = this.processKeys), + (this.c = PropertyFactory.getProp(t, e.c, 0, null, this)), + (this.o = PropertyFactory.getProp(t, e.o, 0, null, this)), + (this.tr = TransformPropertyFactory.getTransformProperty(t, e.tr, this)), + (this.so = PropertyFactory.getProp(t, e.tr.so, 0, 0.01, this)), + (this.eo = PropertyFactory.getProp(t, e.tr.eo, 0, 0.01, this)), + (this.data = e), + this.dynamicProperties.length || this.getValue(!0), + (this._isAnimated = !!this.dynamicProperties.length), + (this.pMatrix = new Matrix()), + (this.rMatrix = new Matrix()), + (this.sMatrix = new Matrix()), + (this.tMatrix = new Matrix()), + (this.matrix = new Matrix()); + }), + (RepeaterModifier.prototype.applyTransforms = function (t, e, r, n, i, a) { + var s = a ? -1 : 1, + o = n.s.v[0] + (1 - n.s.v[0]) * (1 - i), + h = n.s.v[1] + (1 - n.s.v[1]) * (1 - i); + t.translate(n.p.v[0] * s * i, n.p.v[1] * s * i, n.p.v[2]), + e.translate(-n.a.v[0], -n.a.v[1], n.a.v[2]), + e.rotate(-n.r.v * s * i), + e.translate(n.a.v[0], n.a.v[1], n.a.v[2]), + r.translate(-n.a.v[0], -n.a.v[1], n.a.v[2]), + r.scale(a ? 1 / o : o, a ? 1 / h : h), + r.translate(n.a.v[0], n.a.v[1], n.a.v[2]); + }), + (RepeaterModifier.prototype.init = function (t, e, r, n) { + for ( + this.elem = t, + this.arr = e, + this.pos = r, + this.elemsData = n, + this._currentCopies = 0, + this._elements = [], + this._groups = [], + this.frameId = -1, + this.initDynamicPropertyContainer(t), + this.initModifierProperties(t, e[r]); + 0 < r; + + ) + (r -= 1), this._elements.unshift(e[r]); + this.dynamicProperties.length ? (this.k = !0) : this.getValue(!0); + }), + (RepeaterModifier.prototype.resetElements = function (t) { + var e, + r = t.length; + for (e = 0; e < r; e += 1) + (t[e]._processed = !1), 'gr' === t[e].ty && this.resetElements(t[e].it); + }), + (RepeaterModifier.prototype.cloneElements = function (t) { + var e = JSON.parse(JSON.stringify(t)); + return this.resetElements(e), e; + }), + (RepeaterModifier.prototype.changeGroupRender = function (t, e) { + var r, + n = t.length; + for (r = 0; r < n; r += 1) + (t[r]._render = e), 'gr' === t[r].ty && this.changeGroupRender(t[r].it, e); + }), + (RepeaterModifier.prototype.processShapes = function (t) { + var e, + r, + n, + i, + a, + s = !1; + if (this._mdf || t) { + var o, + h = Math.ceil(this.c.v); + if (this._groups.length < h) { + for (; this._groups.length < h; ) { + var l = { it: this.cloneElements(this._elements), ty: 'gr' }; + l.it.push({ + a: { a: 0, ix: 1, k: [0, 0] }, + nm: 'Transform', + o: { a: 0, ix: 7, k: 100 }, + p: { a: 0, ix: 2, k: [0, 0] }, + r: { + a: 1, + ix: 6, + k: [ + { s: 0, e: 0, t: 0 }, + { s: 0, e: 0, t: 1 }, + ], + }, + s: { a: 0, ix: 3, k: [100, 100] }, + sa: { a: 0, ix: 5, k: 0 }, + sk: { a: 0, ix: 4, k: 0 }, + ty: 'tr', + }), + this.arr.splice(0, 0, l), + this._groups.splice(0, 0, l), + (this._currentCopies += 1); + } + this.elem.reloadShapes(), (s = !0); + } + for (n = a = 0; n <= this._groups.length - 1; n += 1) { + if ( + ((o = a < h), + (this._groups[n]._render = o), + this.changeGroupRender(this._groups[n].it, o), + !o) + ) { + var c = this.elemsData[n].it, + u = c[c.length - 1]; + 0 !== u.transform.op.v + ? ((u.transform.op._mdf = !0), (u.transform.op.v = 0)) + : (u.transform.op._mdf = !1); + } + a += 1; + } + this._currentCopies = h; + var f = this.o.v, + p = f % 1, + d = 0 < f ? Math.floor(f) : Math.ceil(f), + m = this.pMatrix.props, + v = this.rMatrix.props, + y = this.sMatrix.props; + this.pMatrix.reset(), + this.rMatrix.reset(), + this.sMatrix.reset(), + this.tMatrix.reset(), + this.matrix.reset(); + var g, + E, + b = 0; + if (0 < f) { + for (; b < d; ) + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, !1), + (b += 1); + p && + (this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, p, !1), + (b += p)); + } else if (f < 0) { + for (; d < b; ) + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, !0), + (b -= 1); + p && + (this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -p, !0), + (b -= p)); + } + for ( + n = 1 === this.data.m ? 0 : this._currentCopies - 1, + i = 1 === this.data.m ? 1 : -1, + a = this._currentCopies; + a; + + ) { + if ( + ((E = (r = (e = this.elemsData[n].it)[e.length - 1].transform.mProps.v.props) + .length), + (e[e.length - 1].transform.mProps._mdf = !0), + (e[e.length - 1].transform.op._mdf = !0), + (e[e.length - 1].transform.op.v = + 1 === this._currentCopies + ? this.so.v + : this.so.v + (this.eo.v - this.so.v) * (n / (this._currentCopies - 1))), + 0 !== b) + ) { + for ( + ((0 !== n && 1 === i) || (n !== this._currentCopies - 1 && -1 === i)) && + this.applyTransforms( + this.pMatrix, + this.rMatrix, + this.sMatrix, + this.tr, + 1, + !1, + ), + this.matrix.transform( + v[0], + v[1], + v[2], + v[3], + v[4], + v[5], + v[6], + v[7], + v[8], + v[9], + v[10], + v[11], + v[12], + v[13], + v[14], + v[15], + ), + this.matrix.transform( + y[0], + y[1], + y[2], + y[3], + y[4], + y[5], + y[6], + y[7], + y[8], + y[9], + y[10], + y[11], + y[12], + y[13], + y[14], + y[15], + ), + this.matrix.transform( + m[0], + m[1], + m[2], + m[3], + m[4], + m[5], + m[6], + m[7], + m[8], + m[9], + m[10], + m[11], + m[12], + m[13], + m[14], + m[15], + ), + g = 0; + g < E; + g += 1 + ) + r[g] = this.matrix.props[g]; + this.matrix.reset(); + } else for (this.matrix.reset(), g = 0; g < E; g += 1) r[g] = this.matrix.props[g]; + (b += 1), (a -= 1), (n += i); + } + } else + for (a = this._currentCopies, n = 0, i = 1; a; ) + (r = (e = this.elemsData[n].it)[e.length - 1].transform.mProps.v.props), + (e[e.length - 1].transform.mProps._mdf = !1), + (e[e.length - 1].transform.op._mdf = !1), + (a -= 1), + (n += i); + return s; + }), + (RepeaterModifier.prototype.addShape = function () {}), + ShapeModifiers.registerModifier('rp', RepeaterModifier), + (ShapeCollection.prototype.addShape = function (t) { + this._length === this._maxLength && + ((this.shapes = this.shapes.concat(createSizedArray(this._maxLength))), + (this._maxLength *= 2)), + (this.shapes[this._length] = t), + (this._length += 1); + }), + (ShapeCollection.prototype.releaseShapes = function () { + var t; + for (t = 0; t < this._length; t += 1) shapePool.release(this.shapes[t]); + this._length = 0; + }), + (DashProperty.prototype.getValue = function (t) { + if ( + (this.elem.globalData.frameId !== this.frameId || t) && + ((this.frameId = this.elem.globalData.frameId), + this.iterateDynamicProperties(), + (this._mdf = this._mdf || t), + this._mdf) + ) { + var e = 0, + r = this.dataProps.length; + for ('svg' === this.renderer && (this.dashStr = ''), e = 0; e < r; e += 1) + 'o' !== this.dataProps[e].n + ? 'svg' === this.renderer + ? (this.dashStr += ' ' + this.dataProps[e].p.v) + : (this.dashArray[e] = this.dataProps[e].p.v) + : (this.dashoffset[0] = this.dataProps[e].p.v); + } + }), + extendPrototype([DynamicPropertyContainer], DashProperty), + (GradientProperty.prototype.comparePoints = function (t, e) { + for (var r = 0, n = this.o.length / 2; r < n; ) { + if (0.01 < Math.abs(t[4 * r] - t[4 * e + 2 * r])) return !1; + r += 1; + } + return !0; + }), + (GradientProperty.prototype.checkCollapsable = function () { + if (this.o.length / 2 != this.c.length / 4) return !1; + if (this.data.k.k[0].s) + for (var t = 0, e = this.data.k.k.length; t < e; ) { + if (!this.comparePoints(this.data.k.k[t].s, this.data.p)) return !1; + t += 1; + } + else if (!this.comparePoints(this.data.k.k, this.data.p)) return !1; + return !0; + }), + (GradientProperty.prototype.getValue = function (t) { + if ( + (this.prop.getValue(), + (this._mdf = !1), + (this._cmdf = !1), + (this._omdf = !1), + this.prop._mdf || t) + ) { + var e, + r, + n, + i = 4 * this.data.p; + for (e = 0; e < i; e += 1) + (r = e % 4 == 0 ? 100 : 255), + (n = Math.round(this.prop.v[e] * r)), + this.c[e] !== n && ((this.c[e] = n), (this._cmdf = !t)); + if (this.o.length) + for (i = this.prop.v.length, e = 4 * this.data.p; e < i; e += 1) + (r = e % 2 == 0 ? 100 : 1), + (n = e % 2 == 0 ? Math.round(100 * this.prop.v[e]) : this.prop.v[e]), + this.o[e - 4 * this.data.p] !== n && + ((this.o[e - 4 * this.data.p] = n), (this._omdf = !t)); + this._mdf = !t; + } + }), + extendPrototype([DynamicPropertyContainer], GradientProperty); + var buildShapeString = function (t, e, r, n) { + if (0 === e) return ''; + var i, + a = t.o, + s = t.i, + o = t.v, + h = ' M' + n.applyToPointStringified(o[0][0], o[0][1]); + for (i = 1; i < e; i += 1) + h += + ' C' + + n.applyToPointStringified(a[i - 1][0], a[i - 1][1]) + + ' ' + + n.applyToPointStringified(s[i][0], s[i][1]) + + ' ' + + n.applyToPointStringified(o[i][0], o[i][1]); + return ( + r && + e && + ((h += + ' C' + + n.applyToPointStringified(a[i - 1][0], a[i - 1][1]) + + ' ' + + n.applyToPointStringified(s[0][0], s[0][1]) + + ' ' + + n.applyToPointStringified(o[0][0], o[0][1])), + (h += 'z')), + h + ); + }, + audioControllerFactory = (function () { + function t(t) { + (this.audios = []), (this.audioFactory = t), (this._volume = 1), (this._isMuted = !1); + } + return ( + (t.prototype = { + addAudio: function (t) { + this.audios.push(t); + }, + pause: function () { + var t, + e = this.audios.length; + for (t = 0; t < e; t += 1) this.audios[t].pause(); + }, + resume: function () { + var t, + e = this.audios.length; + for (t = 0; t < e; t += 1) this.audios[t].resume(); + }, + setRate: function (t) { + var e, + r = this.audios.length; + for (e = 0; e < r; e += 1) this.audios[e].setRate(t); + }, + createAudio: function (t) { + return this.audioFactory + ? this.audioFactory(t) + : Howl + ? new Howl({ src: [t] }) + : { + isPlaying: !1, + play: function () { + this.isPlaying = !0; + }, + seek: function () { + this.isPlaying = !1; + }, + playing: function () {}, + rate: function () {}, + setVolume: function () {}, + }; + }, + setAudioFactory: function (t) { + this.audioFactory = t; + }, + setVolume: function (t) { + (this._volume = t), this._updateVolume(); + }, + mute: function () { + (this._isMuted = !0), this._updateVolume(); + }, + unmute: function () { + (this._isMuted = !1), this._updateVolume(); + }, + getVolume: function () { + return this._volume; + }, + _updateVolume: function () { + var t, + e = this.audios.length; + for (t = 0; t < e; t += 1) + this.audios[t].volume(this._volume * (this._isMuted ? 0 : 1)); + }, + }), + function () { + return new t(); + } + ); + })(), + ImagePreloader = (function () { + var t = (function () { + var t = createTag('canvas'); + (t.width = 1), (t.height = 1); + var e = t.getContext('2d'); + return (e.fillStyle = 'rgba(0,0,0,0)'), e.fillRect(0, 0, 1, 1), t; + })(); + function e() { + (this.loadedAssets += 1), + this.loadedAssets === this.totalImages && + this.loadedFootagesCount === this.totalFootages && + this.imagesLoadedCb && + this.imagesLoadedCb(null); + } + function r() { + (this.loadedFootagesCount += 1), + this.loadedAssets === this.totalImages && + this.loadedFootagesCount === this.totalFootages && + this.imagesLoadedCb && + this.imagesLoadedCb(null); + } + function n(t, e, r) { + var n = ''; + if (t.e) n = t.p; + else if (e) { + var i = t.p; + -1 !== i.indexOf('images/') && (i = i.split('/')[1]), (n = e + i); + } else (n = r), (n += t.u ? t.u : ''), (n += t.p); + return n; + } + function i() { + (this._imageLoaded = e.bind(this)), + (this._footageLoaded = r.bind(this)), + (this.testImageLoaded = function (t) { + var e = 0, + r = setInterval( + function () { + (t.getBBox().width || 500 < e) && (this._imageLoaded(), clearInterval(r)), + (e += 1); + }.bind(this), + 50, + ); + }.bind(this)), + (this.createFootageData = function (t) { + var e = { assetData: t }, + r = n(t, this.assetsPath, this.path); + return ( + assetLoader.load( + r, + function (t) { + (e.img = t), this._footageLoaded(); + }.bind(this), + function () { + (e.img = {}), this._footageLoaded(); + }.bind(this), + ), + e + ); + }.bind(this)), + (this.assetsPath = ''), + (this.path = ''), + (this.totalImages = 0), + (this.totalFootages = 0), + (this.loadedAssets = 0), + (this.loadedFootagesCount = 0), + (this.imagesLoadedCb = null), + (this.images = []); + } + return ( + (i.prototype = { + loadAssets: function (t, e) { + var r; + this.imagesLoadedCb = e; + var n = t.length; + for (r = 0; r < n; r += 1) + t[r].layers || + (t[r].t && 'seq' !== t[r].t + ? 3 === t[r].t && + ((this.totalFootages += 1), + this.images.push(this.createFootageData(t[r]))) + : ((this.totalImages += 1), this.images.push(this._createImageData(t[r])))); + }, + setAssetsPath: function (t) { + this.assetsPath = t || ''; + }, + setPath: function (t) { + this.path = t || ''; + }, + loadedImages: function () { + return this.totalImages === this.loadedAssets; + }, + loadedFootages: function () { + return this.totalFootages === this.loadedFootagesCount; + }, + destroy: function () { + (this.imagesLoadedCb = null), (this.images.length = 0); + }, + getAsset: function (t) { + for (var e = 0, r = this.images.length; e < r; ) { + if (this.images[e].assetData === t) return this.images[e].img; + e += 1; + } + return null; + }, + createImgData: function (e) { + var r = n(e, this.assetsPath, this.path), + i = createTag('img'); + (i.crossOrigin = 'anonymous'), + i.addEventListener('load', this._imageLoaded, !1), + i.addEventListener( + 'error', + function () { + (a.img = t), this._imageLoaded(); + }.bind(this), + !1, + ), + (i.src = r); + var a = { img: i, assetData: e }; + return a; + }, + createImageData: function (e) { + var r = n(e, this.assetsPath, this.path), + i = createNS('image'); + isSafari + ? this.testImageLoaded(i) + : i.addEventListener('load', this._imageLoaded, !1), + i.addEventListener( + 'error', + function () { + (a.img = t), this._imageLoaded(); + }.bind(this), + !1, + ), + i.setAttributeNS('http://www.w3.org/1999/xlink', 'href', r), + this._elementHelper.append + ? this._elementHelper.append(i) + : this._elementHelper.appendChild(i); + var a = { img: i, assetData: e }; + return a; + }, + imageLoaded: e, + footageLoaded: r, + setCacheType: function (t, e) { + this._createImageData = + 'svg' === t + ? ((this._elementHelper = e), this.createImageData.bind(this)) + : this.createImgData.bind(this); + }, + }), + i + ); + })(), + featureSupport = + ((zx = { maskType: !0 }), + (/MSIE 10/i.test(navigator.userAgent) || + /MSIE 9/i.test(navigator.userAgent) || + /rv:11.0/i.test(navigator.userAgent) || + /Edge\/\d./i.test(navigator.userAgent)) && + (zx.maskType = !1), + zx), + zx, + filtersFactory = + ((Ax = {}), + (Ax.createFilter = function (t, e) { + var r = createNS('filter'); + return ( + r.setAttribute('id', t), + !0 !== e && + (r.setAttribute('filterUnits', 'objectBoundingBox'), + r.setAttribute('x', '0%'), + r.setAttribute('y', '0%'), + r.setAttribute('width', '100%'), + r.setAttribute('height', '100%')), + r + ); + }), + (Ax.createAlphaToLuminanceFilter = function () { + var t = createNS('feColorMatrix'); + return ( + t.setAttribute('type', 'matrix'), + t.setAttribute('color-interpolation-filters', 'sRGB'), + t.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1'), + t + ); + }), + Ax), + Ax, + assetLoader = (function () { + function t(t) { + return t.response && 'object' == typeof t.response + ? t.response + : t.response && 'string' == typeof t.response + ? JSON.parse(t.response) + : t.responseText + ? JSON.parse(t.responseText) + : null; + } + return { + load: function (e, r, n) { + var i, + a = new XMLHttpRequest(); + try { + a.responseType = 'json'; + } catch (e) {} + (a.onreadystatechange = function () { + if (4 === a.readyState) + if (200 === a.status) (i = t(a)), r(i); + else + try { + (i = t(a)), r(i); + } catch (t) { + n && n(t); + } + }), + a.open('GET', e, !0), + a.send(); + }, + }; + })(); + function TextAnimatorProperty(t, e, r) { + (this._isFirstFrame = !0), + (this._hasMaskedPath = !1), + (this._frameId = -1), + (this._textData = t), + (this._renderType = e), + (this._elem = r), + (this._animatorsData = createSizedArray(this._textData.a.length)), + (this._pathData = {}), + (this._moreOptions = { alignment: {} }), + (this.renderedLetters = []), + (this.lettersChangedFlag = !1), + this.initDynamicPropertyContainer(r); + } + function TextAnimatorDataProperty(t, e, r) { + var n = { propType: !1 }, + i = PropertyFactory.getProp, + a = e.a; + (this.a = { + r: a.r ? i(t, a.r, 0, degToRads, r) : n, + rx: a.rx ? i(t, a.rx, 0, degToRads, r) : n, + ry: a.ry ? i(t, a.ry, 0, degToRads, r) : n, + sk: a.sk ? i(t, a.sk, 0, degToRads, r) : n, + sa: a.sa ? i(t, a.sa, 0, degToRads, r) : n, + s: a.s ? i(t, a.s, 1, 0.01, r) : n, + a: a.a ? i(t, a.a, 1, 0, r) : n, + o: a.o ? i(t, a.o, 0, 0.01, r) : n, + p: a.p ? i(t, a.p, 1, 0, r) : n, + sw: a.sw ? i(t, a.sw, 0, 0, r) : n, + sc: a.sc ? i(t, a.sc, 1, 0, r) : n, + fc: a.fc ? i(t, a.fc, 1, 0, r) : n, + fh: a.fh ? i(t, a.fh, 0, 0, r) : n, + fs: a.fs ? i(t, a.fs, 0, 0.01, r) : n, + fb: a.fb ? i(t, a.fb, 0, 0.01, r) : n, + t: a.t ? i(t, a.t, 0, 0, r) : n, + }), + (this.s = TextSelectorProp.getTextSelectorProp(t, e.s, r)), + (this.s.t = e.s.t); + } + function LetterProps(t, e, r, n, i, a) { + (this.o = t), + (this.sw = e), + (this.sc = r), + (this.fc = n), + (this.m = i), + (this.p = a), + (this._mdf = { o: !0, sw: !!e, sc: !!r, fc: !!n, m: !0, p: !0 }); + } + function TextProperty(t, e) { + (this._frameId = initialDefaultFrame), + (this.pv = ''), + (this.v = ''), + (this.kf = !1), + (this._isFirstFrame = !0), + (this._mdf = !1), + (this.data = e), + (this.elem = t), + (this.comp = this.elem.comp), + (this.keysIndex = 0), + (this.canResize = !1), + (this.minimumFontSize = 1), + (this.effectsSequence = []), + (this.currentData = { + ascent: 0, + boxWidth: this.defaultBoxWidth, + f: '', + fStyle: '', + fWeight: '', + fc: '', + j: '', + justifyOffset: '', + l: [], + lh: 0, + lineWidths: [], + ls: '', + of: '', + s: '', + sc: '', + sw: 0, + t: 0, + tr: 0, + sz: 0, + ps: null, + fillColorAnim: !1, + strokeColorAnim: !1, + strokeWidthAnim: !1, + yOffset: 0, + finalSize: 0, + finalText: [], + finalLineHeight: 0, + __complete: !1, + }), + this.copyData(this.currentData, this.data.d.k[0].s), + this.searchProperty() || this.completeTextData(this.currentData); + } + (TextAnimatorProperty.prototype.searchProperties = function () { + var t, + e, + r = this._textData.a.length, + n = PropertyFactory.getProp; + for (t = 0; t < r; t += 1) + (e = this._textData.a[t]), + (this._animatorsData[t] = new TextAnimatorDataProperty(this._elem, e, this)); + this._textData.p && 'm' in this._textData.p + ? ((this._pathData = { + f: n(this._elem, this._textData.p.f, 0, 0, this), + l: n(this._elem, this._textData.p.l, 0, 0, this), + r: this._textData.p.r, + m: this._elem.maskManager.getMaskProperty(this._textData.p.m), + }), + (this._hasMaskedPath = !0)) + : (this._hasMaskedPath = !1), + (this._moreOptions.alignment = n(this._elem, this._textData.m.a, 1, 0, this)); + }), + (TextAnimatorProperty.prototype.getMeasures = function (t, e) { + if ( + ((this.lettersChangedFlag = e), + this._mdf || + this._isFirstFrame || + e || + (this._hasMaskedPath && this._pathData.m._mdf)) + ) { + this._isFirstFrame = !1; + var r, + n, + i, + a, + s, + o, + h, + l, + c, + u, + f, + p, + d, + m, + v, + y, + g, + E, + b, + _ = this._moreOptions.alignment.v, + x = this._animatorsData, + S = this._textData, + T = this.mHelper, + A = this._renderType, + I = this.renderedLetters.length, + P = t.l; + if (this._hasMaskedPath) { + if (((b = this._pathData.m), !this._pathData.n || this._pathData._mdf)) { + var w, + C = b.v; + for ( + this._pathData.r && (C = C.reverse()), + s = { tLength: 0, segments: [] }, + a = C._length - 1, + i = y = 0; + i < a; + i += 1 + ) + (w = bez.buildBezierData( + C.v[i], + C.v[i + 1], + [C.o[i][0] - C.v[i][0], C.o[i][1] - C.v[i][1]], + [C.i[i + 1][0] - C.v[i + 1][0], C.i[i + 1][1] - C.v[i + 1][1]], + )), + (s.tLength += w.segmentLength), + s.segments.push(w), + (y += w.segmentLength); + (i = a), + b.v.c && + ((w = bez.buildBezierData( + C.v[i], + C.v[0], + [C.o[i][0] - C.v[i][0], C.o[i][1] - C.v[i][1]], + [C.i[0][0] - C.v[0][0], C.i[0][1] - C.v[0][1]], + )), + (s.tLength += w.segmentLength), + s.segments.push(w), + (y += w.segmentLength)), + (this._pathData.pi = s); + } + if ( + ((s = this._pathData.pi), + (o = this._pathData.f.v), + (u = 1), + (c = !(l = f = 0)), + (m = s.segments), + o < 0 && b.v.c) + ) + for ( + s.tLength < Math.abs(o) && (o = -Math.abs(o) % s.tLength), + u = (d = m[(f = m.length - 1)].points).length - 1; + o < 0; + + ) + (o += d[u].partialLength), + (u -= 1) < 0 && (u = (d = m[(f -= 1)].points).length - 1); + (p = (d = m[f].points)[u - 1]), (v = (h = d[u]).partialLength); + } + (a = P.length), (n = r = 0); + var D, + M, + O, + F, + k, + R = 1.2 * t.finalSize * 0.714, + L = !0; + O = x.length; + var N, + V, + B, + G, + j, + z, + H, + X, + W, + U, + q, + Y, + K = -1, + Q = o, + $ = f, + Z = u, + J = -1, + tt = '', + et = this.defaultPropsArray; + if (2 === t.j || 1 === t.j) { + var rt = 0, + nt = 0, + it = 2 === t.j ? -0.5 : -1, + at = 0, + st = !0; + for (i = 0; i < a; i += 1) + if (P[i].n) { + for (rt && (rt += nt); at < i; ) (P[at].animatorJustifyOffset = rt), (at += 1); + st = !(rt = 0); + } else { + for (M = 0; M < O; M += 1) + (D = x[M].a).t.propType && + (st && 2 === t.j && (nt += D.t.v * it), + (k = x[M].s.getMult(P[i].anIndexes[M], S.a[M].s.totalChars)).length + ? (rt += D.t.v * k[0] * it) + : (rt += D.t.v * k * it)); + st = !1; + } + for (rt && (rt += nt); at < i; ) (P[at].animatorJustifyOffset = rt), (at += 1); + } + for (i = 0; i < a; i += 1) { + if ((T.reset(), (G = 1), P[i].n)) + (r = 0), + (n += t.yOffset), + (n += L ? 1 : 0), + (o = Q), + (L = !1), + this._hasMaskedPath && + ((u = Z), + (p = (d = m[(f = $)].points)[u - 1]), + (v = (h = d[u]).partialLength), + (l = 0)), + (Y = W = q = tt = ''), + (et = this.defaultPropsArray); + else { + if (this._hasMaskedPath) { + if (J !== P[i].line) { + switch (t.j) { + case 1: + o += y - t.lineWidths[P[i].line]; + break; + case 2: + o += (y - t.lineWidths[P[i].line]) / 2; + } + J = P[i].line; + } + K !== P[i].ind && + (P[K] && (o += P[K].extra), (o += P[i].an / 2), (K = P[i].ind)), + (o += _[0] * P[i].an * 0.005); + var ot = 0; + for (M = 0; M < O; M += 1) + (D = x[M].a).p.propType && + ((k = x[M].s.getMult(P[i].anIndexes[M], S.a[M].s.totalChars)).length + ? (ot += D.p.v[0] * k[0]) + : (ot += D.p.v[0] * k)), + D.a.propType && + ((k = x[M].s.getMult(P[i].anIndexes[M], S.a[M].s.totalChars)).length + ? (ot += D.a.v[0] * k[0]) + : (ot += D.a.v[0] * k)); + for (c = !0; c; ) + o + ot <= l + v || !d + ? ((g = (o + ot - l) / h.partialLength), + (V = p.point[0] + (h.point[0] - p.point[0]) * g), + (B = p.point[1] + (h.point[1] - p.point[1]) * g), + T.translate(-_[0] * P[i].an * 0.005, -_[1] * R * 0.01), + (c = !1)) + : d && + ((l += h.partialLength), + (u += 1) >= d.length && + ((u = 0), + (d = m[(f += 1)] + ? m[f].points + : b.v.c + ? m[(f = u = 0)].points + : ((l -= h.partialLength), null))), + d && ((p = h), (v = (h = d[u]).partialLength))); + (N = P[i].an / 2 - P[i].add), T.translate(-N, 0, 0); + } else + (N = P[i].an / 2 - P[i].add), + T.translate(-N, 0, 0), + T.translate(-_[0] * P[i].an * 0.005, -_[1] * R * 0.01, 0); + for (M = 0; M < O; M += 1) + (D = x[M].a).t.propType && + ((k = x[M].s.getMult(P[i].anIndexes[M], S.a[M].s.totalChars)), + (0 === r && 0 === t.j) || + (this._hasMaskedPath + ? k.length + ? (o += D.t.v * k[0]) + : (o += D.t.v * k) + : k.length + ? (r += D.t.v * k[0]) + : (r += D.t.v * k))); + for ( + t.strokeWidthAnim && (z = t.sw || 0), + t.strokeColorAnim && (j = t.sc ? [t.sc[0], t.sc[1], t.sc[2]] : [0, 0, 0]), + t.fillColorAnim && t.fc && (H = [t.fc[0], t.fc[1], t.fc[2]]), + M = 0; + M < O; + M += 1 + ) + (D = x[M].a).a.propType && + ((k = x[M].s.getMult(P[i].anIndexes[M], S.a[M].s.totalChars)).length + ? T.translate(-D.a.v[0] * k[0], -D.a.v[1] * k[1], D.a.v[2] * k[2]) + : T.translate(-D.a.v[0] * k, -D.a.v[1] * k, D.a.v[2] * k)); + for (M = 0; M < O; M += 1) + (D = x[M].a).s.propType && + ((k = x[M].s.getMult(P[i].anIndexes[M], S.a[M].s.totalChars)).length + ? T.scale(1 + (D.s.v[0] - 1) * k[0], 1 + (D.s.v[1] - 1) * k[1], 1) + : T.scale(1 + (D.s.v[0] - 1) * k, 1 + (D.s.v[1] - 1) * k, 1)); + for (M = 0; M < O; M += 1) { + if ( + ((D = x[M].a), + (k = x[M].s.getMult(P[i].anIndexes[M], S.a[M].s.totalChars)), + D.sk.propType && + (k.length + ? T.skewFromAxis(-D.sk.v * k[0], D.sa.v * k[1]) + : T.skewFromAxis(-D.sk.v * k, D.sa.v * k)), + D.r.propType && (k.length ? T.rotateZ(-D.r.v * k[2]) : T.rotateZ(-D.r.v * k)), + D.ry.propType && + (k.length ? T.rotateY(D.ry.v * k[1]) : T.rotateY(D.ry.v * k)), + D.rx.propType && + (k.length ? T.rotateX(D.rx.v * k[0]) : T.rotateX(D.rx.v * k)), + D.o.propType && + (k.length ? (G += (D.o.v * k[0] - G) * k[0]) : (G += (D.o.v * k - G) * k)), + t.strokeWidthAnim && + D.sw.propType && + (k.length ? (z += D.sw.v * k[0]) : (z += D.sw.v * k)), + t.strokeColorAnim && D.sc.propType) + ) + for (X = 0; X < 3; X += 1) + k.length + ? (j[X] += (D.sc.v[X] - j[X]) * k[0]) + : (j[X] += (D.sc.v[X] - j[X]) * k); + if (t.fillColorAnim && t.fc) { + if (D.fc.propType) + for (X = 0; X < 3; X += 1) + k.length + ? (H[X] += (D.fc.v[X] - H[X]) * k[0]) + : (H[X] += (D.fc.v[X] - H[X]) * k); + D.fh.propType && + (H = k.length ? addHueToRGB(H, D.fh.v * k[0]) : addHueToRGB(H, D.fh.v * k)), + D.fs.propType && + (H = k.length + ? addSaturationToRGB(H, D.fs.v * k[0]) + : addSaturationToRGB(H, D.fs.v * k)), + D.fb.propType && + (H = k.length + ? addBrightnessToRGB(H, D.fb.v * k[0]) + : addBrightnessToRGB(H, D.fb.v * k)); + } + } + for (M = 0; M < O; M += 1) + (D = x[M].a).p.propType && + ((k = x[M].s.getMult(P[i].anIndexes[M], S.a[M].s.totalChars)), + this._hasMaskedPath + ? k.length + ? T.translate(0, D.p.v[1] * k[0], -D.p.v[2] * k[1]) + : T.translate(0, D.p.v[1] * k, -D.p.v[2] * k) + : k.length + ? T.translate(D.p.v[0] * k[0], D.p.v[1] * k[1], -D.p.v[2] * k[2]) + : T.translate(D.p.v[0] * k, D.p.v[1] * k, -D.p.v[2] * k)); + if ( + (t.strokeWidthAnim && (W = z < 0 ? 0 : z), + t.strokeColorAnim && + (U = + 'rgb(' + + Math.round(255 * j[0]) + + ',' + + Math.round(255 * j[1]) + + ',' + + Math.round(255 * j[2]) + + ')'), + t.fillColorAnim && + t.fc && + (q = + 'rgb(' + + Math.round(255 * H[0]) + + ',' + + Math.round(255 * H[1]) + + ',' + + Math.round(255 * H[2]) + + ')'), + this._hasMaskedPath) + ) { + if ((T.translate(0, -t.ls), T.translate(0, _[1] * R * 0.01 + n, 0), S.p.p)) { + E = (h.point[1] - p.point[1]) / (h.point[0] - p.point[0]); + var ht = (180 * Math.atan(E)) / Math.PI; + h.point[0] < p.point[0] && (ht += 180), T.rotate((-ht * Math.PI) / 180); + } + T.translate(V, B, 0), + (o -= _[0] * P[i].an * 0.005), + P[i + 1] && + K !== P[i + 1].ind && + ((o += P[i].an / 2), (o += 0.001 * t.tr * t.finalSize)); + } else { + switch ( + (T.translate(r, n, 0), + t.ps && T.translate(t.ps[0], t.ps[1] + t.ascent, 0), + t.j) + ) { + case 1: + T.translate( + P[i].animatorJustifyOffset + + t.justifyOffset + + (t.boxWidth - t.lineWidths[P[i].line]), + 0, + 0, + ); + break; + case 2: + T.translate( + P[i].animatorJustifyOffset + + t.justifyOffset + + (t.boxWidth - t.lineWidths[P[i].line]) / 2, + 0, + 0, + ); + } + T.translate(0, -t.ls), + T.translate(N, 0, 0), + T.translate(_[0] * P[i].an * 0.005, _[1] * R * 0.01, 0), + (r += P[i].l + 0.001 * t.tr * t.finalSize); + } + 'html' === A + ? (tt = T.toCSS()) + : 'svg' === A + ? (tt = T.to2dCSS()) + : (et = [ + T.props[0], + T.props[1], + T.props[2], + T.props[3], + T.props[4], + T.props[5], + T.props[6], + T.props[7], + T.props[8], + T.props[9], + T.props[10], + T.props[11], + T.props[12], + T.props[13], + T.props[14], + T.props[15], + ]), + (Y = G); + } + this.lettersChangedFlag = + I <= i + ? ((F = new LetterProps(Y, W, U, q, tt, et)), + this.renderedLetters.push(F), + (I += 1), + !0) + : (F = this.renderedLetters[i]).update(Y, W, U, q, tt, et) || + this.lettersChangedFlag; + } + } + }), + (TextAnimatorProperty.prototype.getValue = function () { + this._elem.globalData.frameId !== this._frameId && + ((this._frameId = this._elem.globalData.frameId), this.iterateDynamicProperties()); + }), + (TextAnimatorProperty.prototype.mHelper = new Matrix()), + (TextAnimatorProperty.prototype.defaultPropsArray = []), + extendPrototype([DynamicPropertyContainer], TextAnimatorProperty), + (LetterProps.prototype.update = function (t, e, r, n, i, a) { + (this._mdf.o = !1), + (this._mdf.sw = !1), + (this._mdf.sc = !1), + (this._mdf.fc = !1), + (this._mdf.m = !1); + var s = (this._mdf.p = !1); + return ( + this.o !== t && ((this.o = t), (s = this._mdf.o = !0)), + this.sw !== e && ((this.sw = e), (s = this._mdf.sw = !0)), + this.sc !== r && ((this.sc = r), (s = this._mdf.sc = !0)), + this.fc !== n && ((this.fc = n), (s = this._mdf.fc = !0)), + this.m !== i && ((this.m = i), (s = this._mdf.m = !0)), + !a.length || + (this.p[0] === a[0] && + this.p[1] === a[1] && + this.p[4] === a[4] && + this.p[5] === a[5] && + this.p[12] === a[12] && + this.p[13] === a[13]) || + ((this.p = a), (s = this._mdf.p = !0)), + s + ); + }), + (TextProperty.prototype.defaultBoxWidth = [0, 0]), + (TextProperty.prototype.copyData = function (t, e) { + for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r]); + return t; + }), + (TextProperty.prototype.setCurrentData = function (t) { + t.__complete || this.completeTextData(t), + (this.currentData = t), + (this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth), + (this._mdf = !0); + }), + (TextProperty.prototype.searchProperty = function () { + return this.searchKeyframes(); + }), + (TextProperty.prototype.searchKeyframes = function () { + return ( + (this.kf = 1 < this.data.d.k.length), + this.kf && this.addEffect(this.getKeyframeValue.bind(this)), + this.kf + ); + }), + (TextProperty.prototype.addEffect = function (t) { + this.effectsSequence.push(t), this.elem.addDynamicProperty(this); + }), + (TextProperty.prototype.getValue = function (t) { + if ( + (this.elem.globalData.frameId !== this.frameId && this.effectsSequence.length) || + t + ) { + this.currentData.t = this.data.d.k[this.keysIndex].s.t; + var e = this.currentData, + r = this.keysIndex; + if (this.lock) this.setCurrentData(this.currentData); + else { + var n; + (this.lock = !0), (this._mdf = !1); + var i = this.effectsSequence.length, + a = t || this.data.d.k[this.keysIndex].s; + for (n = 0; n < i; n += 1) + a = + r !== this.keysIndex + ? this.effectsSequence[n](a, a.t) + : this.effectsSequence[n](this.currentData, a.t); + e !== a && this.setCurrentData(a), + (this.v = this.currentData), + (this.pv = this.v), + (this.lock = !1), + (this.frameId = this.elem.globalData.frameId); + } + } + }), + (TextProperty.prototype.getKeyframeValue = function () { + for ( + var t = this.data.d.k, e = this.elem.comp.renderedFrame, r = 0, n = t.length; + r <= n - 1 && !(r === n - 1 || t[r + 1].t > e); + + ) + r += 1; + return this.keysIndex !== r && (this.keysIndex = r), this.data.d.k[this.keysIndex].s; + }), + (TextProperty.prototype.buildFinalText = function (t) { + for (var e, r, n = [], i = 0, a = t.length, s = !1; i < a; ) + (e = t.charCodeAt(i)), + FontManager.isCombinedCharacter(e) + ? (n[n.length - 1] += t.charAt(i)) + : 55296 <= e && e <= 56319 + ? 56320 <= (r = t.charCodeAt(i + 1)) && r <= 57343 + ? (s || FontManager.isModifier(e, r) + ? ((n[n.length - 1] += t.substr(i, 2)), (s = !1)) + : n.push(t.substr(i, 2)), + (i += 1)) + : n.push(t.charAt(i)) + : 56319 < e + ? ((r = t.charCodeAt(i + 1)), + FontManager.isZeroWidthJoiner(e, r) + ? ((s = !0), (n[n.length - 1] += t.substr(i, 2)), (i += 1)) + : n.push(t.charAt(i))) + : FontManager.isZeroWidthJoiner(e) + ? ((n[n.length - 1] += t.charAt(i)), (s = !0)) + : n.push(t.charAt(i)), + (i += 1); + return n; + }), + (TextProperty.prototype.completeTextData = function (t) { + t.__complete = !0; + var e, + r, + n, + i, + a, + s, + o, + h = this.elem.globalData.fontManager, + l = this.data, + c = [], + u = 0, + f = l.m.g, + p = 0, + d = 0, + m = 0, + v = [], + y = 0, + g = 0, + E = h.getFontByName(t.f), + b = 0, + _ = getFontProperties(E); + (t.fWeight = _.weight), + (t.fStyle = _.style), + (t.finalSize = t.s), + (t.finalText = this.buildFinalText(t.t)), + (r = t.finalText.length), + (t.finalLineHeight = t.lh); + var x, + S = (t.tr / 1e3) * t.finalSize; + if (t.sz) + for (var T, A, I = !0, P = t.sz[0], w = t.sz[1]; I; ) { + (y = T = 0), + (r = (A = this.buildFinalText(t.t)).length), + (S = (t.tr / 1e3) * t.finalSize); + var C = -1; + for (e = 0; e < r; e += 1) + (x = A[e].charCodeAt(0)), + (n = !1), + ' ' === A[e] + ? (C = e) + : (13 !== x && 3 !== x) || + ((n = !(y = 0)), (T += t.finalLineHeight || 1.2 * t.finalSize)), + P < + y + + (b = h.chars + ? ((o = h.getCharData(A[e], E.fStyle, E.fFamily)), + n ? 0 : (o.w * t.finalSize) / 100) + : h.measureText(A[e], t.f, t.finalSize)) && ' ' !== A[e] + ? (-1 === C ? (r += 1) : (e = C), + (T += t.finalLineHeight || 1.2 * t.finalSize), + A.splice(e, C === e ? 1 : 0, '\r'), + (C = -1), + (y = 0)) + : ((y += b), (y += S)); + (T += (E.ascent * t.finalSize) / 100), + this.canResize && t.finalSize > this.minimumFontSize && w < T + ? ((t.finalSize -= 1), (t.finalLineHeight = (t.finalSize * t.lh) / t.s)) + : ((t.finalText = A), (r = t.finalText.length), (I = !1)); + } + y = -S; + var D, + M = (b = 0); + for (e = 0; e < r; e += 1) + if ( + ((n = !1), + 13 === (x = (D = t.finalText[e]).charCodeAt(0)) || 3 === x + ? ((M = 0), + v.push(y), + (g = g < y ? y : g), + (y = -2 * S), + (n = !(i = '')), + (m += 1)) + : (i = D), + (b = h.chars + ? ((o = h.getCharData(D, E.fStyle, h.getFontByName(t.f).fFamily)), + n ? 0 : (o.w * t.finalSize) / 100) + : h.measureText(i, t.f, t.finalSize)), + ' ' === D ? (M += b + S) : ((y += b + S + M), (M = 0)), + c.push({ + l: b, + an: b, + add: p, + n: n, + anIndexes: [], + val: i, + line: m, + animatorJustifyOffset: 0, + }), + 2 == f) + ) { + if (((p += b), '' === i || ' ' === i || e === r - 1)) { + for (('' !== i && ' ' !== i) || (p -= b); d <= e; ) + (c[d].an = p), (c[d].ind = u), (c[d].extra = b), (d += 1); + (u += 1), (p = 0); + } + } else if (3 == f) { + if (((p += b), '' === i || e === r - 1)) { + for ('' === i && (p -= b); d <= e; ) + (c[d].an = p), (c[d].ind = u), (c[d].extra = b), (d += 1); + (p = 0), (u += 1); + } + } else (c[u].ind = u), (c[u].extra = 0), (u += 1); + if (((t.l = c), (g = g < y ? y : g), v.push(y), t.sz)) + (t.boxWidth = t.sz[0]), (t.justifyOffset = 0); + else + switch (((t.boxWidth = g), t.j)) { + case 1: + t.justifyOffset = -t.boxWidth; + break; + case 2: + t.justifyOffset = -t.boxWidth / 2; + break; + default: + t.justifyOffset = 0; + } + t.lineWidths = v; + var O, + F, + k, + R, + L = l.a; + s = L.length; + var N = []; + for (a = 0; a < s; a += 1) { + for ( + (O = L[a]).a.sc && (t.strokeColorAnim = !0), + O.a.sw && (t.strokeWidthAnim = !0), + (O.a.fc || O.a.fh || O.a.fs || O.a.fb) && (t.fillColorAnim = !0), + R = 0, + k = O.s.b, + e = 0; + e < r; + e += 1 + ) + ((F = c[e]).anIndexes[a] = R), + ((1 == k && '' !== F.val) || + (2 == k && '' !== F.val && ' ' !== F.val) || + (3 == k && (F.n || ' ' == F.val || e == r - 1)) || + (4 == k && (F.n || e == r - 1))) && + (1 === O.s.rn && N.push(R), (R += 1)); + l.a[a].s.totalChars = R; + var V, + B = -1; + if (1 === O.s.rn) + for (e = 0; e < r; e += 1) + B != (F = c[e]).anIndexes[a] && + ((B = F.anIndexes[a]), + (V = N.splice(Math.floor(Math.random() * N.length), 1)[0])), + (F.anIndexes[a] = V); + } + (t.yOffset = t.finalLineHeight || 1.2 * t.finalSize), + (t.ls = t.ls || 0), + (t.ascent = (E.ascent * t.finalSize) / 100); + }), + (TextProperty.prototype.updateDocumentData = function (t, e) { + e = void 0 === e ? this.keysIndex : e; + var r = this.copyData({}, this.data.d.k[e].s); + (r = this.copyData(r, t)), + (this.data.d.k[e].s = r), + this.recalculate(e), + this.elem.addDynamicProperty(this); + }), + (TextProperty.prototype.recalculate = function (t) { + var e = this.data.d.k[t].s; + (e.__complete = !1), (this.keysIndex = 0), (this._isFirstFrame = !0), this.getValue(e); + }), + (TextProperty.prototype.canResizeFont = function (t) { + (this.canResize = t), + this.recalculate(this.keysIndex), + this.elem.addDynamicProperty(this); + }), + (TextProperty.prototype.setMinimumFontSize = function (t) { + (this.minimumFontSize = Math.floor(t) || 1), + this.recalculate(this.keysIndex), + this.elem.addDynamicProperty(this); + }); + var TextSelectorProp = (function () { + var t = Math.max, + e = Math.min, + r = Math.floor; + function n(t, e) { + (this._currentTextLength = -1), + (this.k = !1), + (this.data = e), + (this.elem = t), + (this.comp = t.comp), + (this.finalS = 0), + (this.finalE = 0), + this.initDynamicPropertyContainer(t), + (this.s = PropertyFactory.getProp(t, e.s || { k: 0 }, 0, 0, this)), + (this.e = 'e' in e ? PropertyFactory.getProp(t, e.e, 0, 0, this) : { v: 100 }), + (this.o = PropertyFactory.getProp(t, e.o || { k: 0 }, 0, 0, this)), + (this.xe = PropertyFactory.getProp(t, e.xe || { k: 0 }, 0, 0, this)), + (this.ne = PropertyFactory.getProp(t, e.ne || { k: 0 }, 0, 0, this)), + (this.a = PropertyFactory.getProp(t, e.a, 0, 0.01, this)), + this.dynamicProperties.length || this.getValue(); + } + return ( + (n.prototype = { + getMult: function (n) { + this._currentTextLength !== this.elem.textProperty.currentData.l.length && + this.getValue(); + var i = 0, + a = 0, + s = 1, + o = 1; + 0 < this.ne.v ? (i = this.ne.v / 100) : (a = -this.ne.v / 100), + 0 < this.xe.v ? (s = 1 - this.xe.v / 100) : (o = 1 + this.xe.v / 100); + var h = BezierFactory.getBezierEasing(i, a, s, o).get, + l = 0, + c = this.finalS, + u = this.finalE, + f = this.data.sh; + if (2 === f) + l = h( + (l = + u === c ? (u <= n ? 1 : 0) : t(0, e(0.5 / (u - c) + (n - c) / (u - c), 1))), + ); + else if (3 === f) + l = h( + (l = + u === c + ? u <= n + ? 0 + : 1 + : 1 - t(0, e(0.5 / (u - c) + (n - c) / (u - c), 1))), + ); + else if (4 === f) + u === c + ? (l = 0) + : (l = t(0, e(0.5 / (u - c) + (n - c) / (u - c), 1))) < 0.5 + ? (l *= 2) + : (l = 1 - 2 * (l - 0.5)), + (l = h(l)); + else if (5 === f) { + if (u === c) l = 0; + else { + var p = u - c, + d = -p / 2 + (n = e(t(0, n + 0.5 - c), u - c)), + m = p / 2; + l = Math.sqrt(1 - (d * d) / (m * m)); + } + l = h(l); + } else + l = + 6 === f + ? h( + (l = + u === c + ? 0 + : ((n = e(t(0, n + 0.5 - c), u - c)), + (1 + Math.cos(Math.PI + (2 * Math.PI * n) / (u - c))) / 2)), + ) + : (n >= r(c) && (l = t(0, e(n - c < 0 ? e(u, 1) - (c - n) : u - n, 1))), + h(l)); + return l * this.a.v; + }, + getValue: function (t) { + this.iterateDynamicProperties(), + (this._mdf = t || this._mdf), + (this._currentTextLength = this.elem.textProperty.currentData.l.length || 0), + t && 2 === this.data.r && (this.e.v = this._currentTextLength); + var e = 2 === this.data.r ? 1 : 100 / this.data.totalChars, + r = this.o.v / e, + n = this.s.v / e + r, + i = this.e.v / e + r; + if (i < n) { + var a = n; + (n = i), (i = a); + } + (this.finalS = n), (this.finalE = i); + }, + }), + extendPrototype([DynamicPropertyContainer], n), + { + getTextSelectorProp: function (t, e, r) { + return new n(t, e, r); + }, + } + ); + })(), + poolFactory = function (t, e, r) { + var n = 0, + i = t, + a = createSizedArray(i); + return { + newElement: function () { + return n ? a[(n -= 1)] : e(); + }, + release: function (t) { + n === i && ((a = pooling.double(a)), (i *= 2)), r && r(t), (a[n] = t), (n += 1); + }, + }; + }, + pooling = { + double: function (t) { + return t.concat(createSizedArray(t.length)); + }, + }, + pointPool = poolFactory(8, function () { + return createTypedArray('float32', 2); + }), + shapePool = + ((IB = poolFactory( + 4, + function () { + return new ShapePath(); + }, + function (t) { + var e, + r = t._length; + for (e = 0; e < r; e += 1) + pointPool.release(t.v[e]), + pointPool.release(t.i[e]), + pointPool.release(t.o[e]), + (t.v[e] = null), + (t.i[e] = null), + (t.o[e] = null); + (t._length = 0), (t.c = !1); + }, + )), + (IB.clone = function (t) { + var e, + r = IB.newElement(), + n = void 0 === t._length ? t.v.length : t._length; + for (r.setLength(n), r.c = t.c, e = 0; e < n; e += 1) + r.setTripleAt(t.v[e][0], t.v[e][1], t.o[e][0], t.o[e][1], t.i[e][0], t.i[e][1], e); + return r; + }), + IB), + IB, + shapeCollectionPool = + ((QB = { + newShapeCollection: function () { + return RB ? TB[(RB -= 1)] : new ShapeCollection(); + }, + release: function (t) { + var e, + r = t._length; + for (e = 0; e < r; e += 1) shapePool.release(t.shapes[e]); + (t._length = 0), + RB === SB && ((TB = pooling.double(TB)), (SB *= 2)), + (TB[RB] = t), + (RB += 1); + }, + }), + (RB = 0), + (SB = 4), + (TB = createSizedArray(SB)), + QB), + QB, + RB, + SB, + TB, + segmentsLengthPool = poolFactory( + 8, + function () { + return { lengths: [], totalLength: 0 }; + }, + function (t) { + var e, + r = t.lengths.length; + for (e = 0; e < r; e += 1) bezierLengthPool.release(t.lengths[e]); + t.lengths.length = 0; + }, + ), + bezierLengthPool = poolFactory(8, function () { + return { + addedLength: 0, + percents: createTypedArray('float32', defaultCurveSegments), + lengths: createTypedArray('float32', defaultCurveSegments), + }; + }), + markerParser = (function () { + function t(t) { + for (var e, r = t.split('\r\n'), n = {}, i = 0, a = 0; a < r.length; a += 1) + 2 === (e = r[a].split(':')).length && ((n[e[0]] = e[1].trim()), (i += 1)); + if (0 === i) throw new Error(); + return n; + } + return function (e) { + for (var r = [], n = 0; n < e.length; n += 1) { + var i = e[n], + a = { time: i.tm, duration: i.dr }; + try { + a.payload = JSON.parse(e[n].cm); + } catch (r) { + try { + a.payload = t(e[n].cm); + } catch (r) { + a.payload = { name: e[n] }; + } + } + r.push(a); + } + return r; + }; + })(); + function BaseRenderer() {} + function SVGRenderer(t, e) { + (this.animationItem = t), + (this.layers = null), + (this.renderedFrame = -1), + (this.svgElement = createNS('svg')); + var r = ''; + if (e && e.title) { + var n = createNS('title'), + i = createElementID(); + n.setAttribute('id', i), + (n.textContent = e.title), + this.svgElement.appendChild(n), + (r += i); + } + if (e && e.description) { + var a = createNS('desc'), + s = createElementID(); + a.setAttribute('id', s), + (a.textContent = e.description), + this.svgElement.appendChild(a), + (r += ' ' + s); + } + r && this.svgElement.setAttribute('aria-labelledby', r); + var o = createNS('defs'); + this.svgElement.appendChild(o); + var h = createNS('g'); + this.svgElement.appendChild(h), + (this.layerElement = h), + (this.renderConfig = { + preserveAspectRatio: (e && e.preserveAspectRatio) || 'xMidYMid meet', + imagePreserveAspectRatio: (e && e.imagePreserveAspectRatio) || 'xMidYMid slice', + progressiveLoad: (e && e.progressiveLoad) || !1, + hideOnTransparent: !(e && !1 === e.hideOnTransparent), + viewBoxOnly: (e && e.viewBoxOnly) || !1, + viewBoxSize: (e && e.viewBoxSize) || !1, + className: (e && e.className) || '', + id: (e && e.id) || '', + focusable: e && e.focusable, + filterSize: { + width: (e && e.filterSize && e.filterSize.width) || '100%', + height: (e && e.filterSize && e.filterSize.height) || '100%', + x: (e && e.filterSize && e.filterSize.x) || '0%', + y: (e && e.filterSize && e.filterSize.y) || '0%', + }, + }), + (this.globalData = { + _mdf: !1, + frameNum: -1, + defs: o, + renderConfig: this.renderConfig, + }), + (this.elements = []), + (this.pendingElements = []), + (this.destroyed = !1), + (this.rendererType = 'svg'); + } + function CanvasRenderer(t, e) { + (this.animationItem = t), + (this.renderConfig = { + clearCanvas: !e || void 0 === e.clearCanvas || e.clearCanvas, + context: (e && e.context) || null, + progressiveLoad: (e && e.progressiveLoad) || !1, + preserveAspectRatio: (e && e.preserveAspectRatio) || 'xMidYMid meet', + imagePreserveAspectRatio: (e && e.imagePreserveAspectRatio) || 'xMidYMid slice', + className: (e && e.className) || '', + id: (e && e.id) || '', + }), + (this.renderConfig.dpr = (e && e.dpr) || 1), + this.animationItem.wrapper && + (this.renderConfig.dpr = (e && e.dpr) || window.devicePixelRatio || 1), + (this.renderedFrame = -1), + (this.globalData = { + frameNum: -1, + _mdf: !1, + renderConfig: this.renderConfig, + currentGlobalAlpha: -1, + }), + (this.contextData = new CVContextData()), + (this.elements = []), + (this.pendingElements = []), + (this.transformMat = new Matrix()), + (this.completeLayers = !1), + (this.rendererType = 'canvas'); + } + function HybridRenderer(t, e) { + (this.animationItem = t), + (this.layers = null), + (this.renderedFrame = -1), + (this.renderConfig = { + className: (e && e.className) || '', + imagePreserveAspectRatio: (e && e.imagePreserveAspectRatio) || 'xMidYMid slice', + hideOnTransparent: !(e && !1 === e.hideOnTransparent), + filterSize: { + width: (e && e.filterSize && e.filterSize.width) || '400%', + height: (e && e.filterSize && e.filterSize.height) || '400%', + x: (e && e.filterSize && e.filterSize.x) || '-100%', + y: (e && e.filterSize && e.filterSize.y) || '-100%', + }, + }), + (this.globalData = { _mdf: !1, frameNum: -1, renderConfig: this.renderConfig }), + (this.pendingElements = []), + (this.elements = []), + (this.threeDElements = []), + (this.destroyed = !1), + (this.camera = null), + (this.supports3d = !0), + (this.rendererType = 'html'); + } + function MaskElement(t, e, r) { + (this.data = t), + (this.element = e), + (this.globalData = r), + (this.storedData = []), + (this.masksProperties = this.data.masksProperties || []), + (this.maskElement = null); + var n, + i, + a = this.globalData.defs, + s = this.masksProperties ? this.masksProperties.length : 0; + (this.viewData = createSizedArray(s)), (this.solidPath = ''); + var o, + h, + l, + c, + u, + f, + p = this.masksProperties, + d = 0, + m = [], + v = createElementID(), + y = 'clipPath', + g = 'clip-path'; + for (n = 0; n < s; n += 1) + if ( + ((('a' !== p[n].mode && 'n' !== p[n].mode) || + p[n].inv || + 100 !== p[n].o.k || + p[n].o.x) && + (g = y = 'mask'), + ('s' !== p[n].mode && 'i' !== p[n].mode) || 0 !== d + ? (l = null) + : ((l = createNS('rect')).setAttribute('fill', '#ffffff'), + l.setAttribute('width', this.element.comp.data.w || 0), + l.setAttribute('height', this.element.comp.data.h || 0), + m.push(l)), + (i = createNS('path')), + 'n' === p[n].mode) + ) + (this.viewData[n] = { + op: PropertyFactory.getProp(this.element, p[n].o, 0, 0.01, this.element), + prop: ShapePropertyFactory.getShapeProp(this.element, p[n], 3), + elem: i, + lastPath: '', + }), + a.appendChild(i); + else { + var E; + if ( + ((d += 1), + i.setAttribute('fill', 's' === p[n].mode ? '#000000' : '#ffffff'), + i.setAttribute('clip-rule', 'nonzero'), + 0 !== p[n].x.k + ? ((g = y = 'mask'), + (f = PropertyFactory.getProp(this.element, p[n].x, 0, null, this.element)), + (E = createElementID()), + (c = createNS('filter')).setAttribute('id', E), + (u = createNS('feMorphology')).setAttribute('operator', 'erode'), + u.setAttribute('in', 'SourceGraphic'), + u.setAttribute('radius', '0'), + c.appendChild(u), + a.appendChild(c), + i.setAttribute('stroke', 's' === p[n].mode ? '#000000' : '#ffffff')) + : (f = u = null), + (this.storedData[n] = { + elem: i, + x: f, + expan: u, + lastPath: '', + lastOperator: '', + filterId: E, + lastRadius: 0, + }), + 'i' === p[n].mode) + ) { + h = m.length; + var b = createNS('g'); + for (o = 0; o < h; o += 1) b.appendChild(m[o]); + var _ = createNS('mask'); + _.setAttribute('mask-type', 'alpha'), + _.setAttribute('id', v + '_' + d), + _.appendChild(i), + a.appendChild(_), + b.setAttribute('mask', 'url(' + locationHref + '#' + v + '_' + d + ')'), + (m.length = 0), + m.push(b); + } else m.push(i); + p[n].inv && !this.solidPath && (this.solidPath = this.createLayerSolidPath()), + (this.viewData[n] = { + elem: i, + lastPath: '', + op: PropertyFactory.getProp(this.element, p[n].o, 0, 0.01, this.element), + prop: ShapePropertyFactory.getShapeProp(this.element, p[n], 3), + invRect: l, + }), + this.viewData[n].prop.k || + this.drawPath(p[n], this.viewData[n].prop.v, this.viewData[n]); + } + for (this.maskElement = createNS(y), s = m.length, n = 0; n < s; n += 1) + this.maskElement.appendChild(m[n]); + 0 < d && + (this.maskElement.setAttribute('id', v), + this.element.maskedElement.setAttribute(g, 'url(' + locationHref + '#' + v + ')'), + a.appendChild(this.maskElement)), + this.viewData.length && this.element.addRenderableComponent(this); + } + function HierarchyElement() {} + function FrameElement() {} + function TransformElement() {} + function RenderableElement() {} + function RenderableDOMElement() {} + function ProcessedElement(t, e) { + (this.elem = t), (this.pos = e); + } + function SVGStyleData(t, e) { + (this.data = t), + (this.type = t.ty), + (this.d = ''), + (this.lvl = e), + (this._mdf = !1), + (this.closed = !0 === t.hd), + (this.pElem = createNS('path')), + (this.msElem = null); + } + function SVGShapeData(t, e, r) { + (this.caches = []), + (this.styles = []), + (this.transformers = t), + (this.lStr = ''), + (this.sh = r), + (this.lvl = e), + (this._isAnimated = !!r.k); + for (var n = 0, i = t.length; n < i; ) { + if (t[n].mProps.dynamicProperties.length) { + this._isAnimated = !0; + break; + } + n += 1; + } + } + function SVGTransformData(t, e, r) { + (this.transform = { mProps: t, op: e, container: r }), + (this.elements = []), + (this._isAnimated = + this.transform.mProps.dynamicProperties.length || + this.transform.op.effectsSequence.length); + } + function SVGStrokeStyleData(t, e, r) { + this.initDynamicPropertyContainer(t), + (this.getValue = this.iterateDynamicProperties), + (this.o = PropertyFactory.getProp(t, e.o, 0, 0.01, this)), + (this.w = PropertyFactory.getProp(t, e.w, 0, null, this)), + (this.d = new DashProperty(t, e.d || {}, 'svg', this)), + (this.c = PropertyFactory.getProp(t, e.c, 1, 255, this)), + (this.style = r), + (this._isAnimated = !!this._isAnimated); + } + function SVGFillStyleData(t, e, r) { + this.initDynamicPropertyContainer(t), + (this.getValue = this.iterateDynamicProperties), + (this.o = PropertyFactory.getProp(t, e.o, 0, 0.01, this)), + (this.c = PropertyFactory.getProp(t, e.c, 1, 255, this)), + (this.style = r); + } + function SVGGradientFillStyleData(t, e, r) { + this.initDynamicPropertyContainer(t), + (this.getValue = this.iterateDynamicProperties), + this.initGradientData(t, e, r); + } + function SVGGradientStrokeStyleData(t, e, r) { + this.initDynamicPropertyContainer(t), + (this.getValue = this.iterateDynamicProperties), + (this.w = PropertyFactory.getProp(t, e.w, 0, null, this)), + (this.d = new DashProperty(t, e.d || {}, 'svg', this)), + this.initGradientData(t, e, r), + (this._isAnimated = !!this._isAnimated); + } + function ShapeGroupData() { + (this.it = []), (this.prevViewData = []), (this.gr = createNS('g')); + } + (BaseRenderer.prototype.checkLayers = function (t) { + var e, + r, + n = this.layers.length; + for (this.completeLayers = !0, e = n - 1; 0 <= e; e -= 1) + this.elements[e] || + ((r = this.layers[e]).ip - r.st <= t - this.layers[e].st && + r.op - r.st > t - this.layers[e].st && + this.buildItem(e)), + (this.completeLayers = !!this.elements[e] && this.completeLayers); + this.checkPendingElements(); + }), + (BaseRenderer.prototype.createItem = function (t) { + switch (t.ty) { + case 2: + return this.createImage(t); + case 0: + return this.createComp(t); + case 1: + return this.createSolid(t); + case 3: + return this.createNull(t); + case 4: + return this.createShape(t); + case 5: + return this.createText(t); + case 6: + return this.createAudio(t); + case 13: + return this.createCamera(t); + case 15: + return this.createFootage(t); + default: + return this.createNull(t); + } + }), + (BaseRenderer.prototype.createCamera = function () { + throw new Error("You're using a 3d camera. Try the html renderer."); + }), + (BaseRenderer.prototype.createAudio = function (t) { + return new AudioElement(t, this.globalData, this); + }), + (BaseRenderer.prototype.createFootage = function (t) { + return new FootageElement(t, this.globalData, this); + }), + (BaseRenderer.prototype.buildAllItems = function () { + var t, + e = this.layers.length; + for (t = 0; t < e; t += 1) this.buildItem(t); + this.checkPendingElements(); + }), + (BaseRenderer.prototype.includeLayers = function (t) { + var e; + this.completeLayers = !1; + var r, + n = t.length, + i = this.layers.length; + for (e = 0; e < n; e += 1) + for (r = 0; r < i; ) { + if (this.layers[r].id === t[e].id) { + this.layers[r] = t[e]; + break; + } + r += 1; + } + }), + (BaseRenderer.prototype.setProjectInterface = function (t) { + this.globalData.projectInterface = t; + }), + (BaseRenderer.prototype.initItems = function () { + this.globalData.progressiveLoad || this.buildAllItems(); + }), + (BaseRenderer.prototype.buildElementParenting = function (t, e, r) { + for (var n = this.elements, i = this.layers, a = 0, s = i.length; a < s; ) + i[a].ind == e && + (n[a] && !0 !== n[a] + ? (r.push(n[a]), + n[a].setAsParent(), + void 0 !== i[a].parent + ? this.buildElementParenting(t, i[a].parent, r) + : t.setHierarchy(r)) + : (this.buildItem(a), this.addPendingElement(t))), + (a += 1); + }), + (BaseRenderer.prototype.addPendingElement = function (t) { + this.pendingElements.push(t); + }), + (BaseRenderer.prototype.searchExtraCompositions = function (t) { + var e, + r = t.length; + for (e = 0; e < r; e += 1) + if (t[e].xt) { + var n = this.createComp(t[e]); + n.initExpressions(), this.globalData.projectInterface.registerComposition(n); + } + }), + (BaseRenderer.prototype.setupGlobalData = function (t, e) { + (this.globalData.fontManager = new FontManager()), + this.globalData.fontManager.addChars(t.chars), + this.globalData.fontManager.addFonts(t.fonts, e), + (this.globalData.getAssetData = this.animationItem.getAssetData.bind( + this.animationItem, + )), + (this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind( + this.animationItem, + )), + (this.globalData.imageLoader = this.animationItem.imagePreloader), + (this.globalData.audioController = this.animationItem.audioController), + (this.globalData.frameId = 0), + (this.globalData.frameRate = t.fr), + (this.globalData.nm = t.nm), + (this.globalData.compSize = { w: t.w, h: t.h }); + }), + extendPrototype([BaseRenderer], SVGRenderer), + (SVGRenderer.prototype.createNull = function (t) { + return new NullElement(t, this.globalData, this); + }), + (SVGRenderer.prototype.createShape = function (t) { + return new SVGShapeElement(t, this.globalData, this); + }), + (SVGRenderer.prototype.createText = function (t) { + return new SVGTextLottieElement(t, this.globalData, this); + }), + (SVGRenderer.prototype.createImage = function (t) { + return new IImageElement(t, this.globalData, this); + }), + (SVGRenderer.prototype.createComp = function (t) { + return new SVGCompElement(t, this.globalData, this); + }), + (SVGRenderer.prototype.createSolid = function (t) { + return new ISolidElement(t, this.globalData, this); + }), + (SVGRenderer.prototype.configAnimation = function (t) { + this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg'), + this.renderConfig.viewBoxSize + ? this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize) + : this.svgElement.setAttribute('viewBox', '0 0 ' + t.w + ' ' + t.h), + this.renderConfig.viewBoxOnly || + (this.svgElement.setAttribute('width', t.w), + this.svgElement.setAttribute('height', t.h), + (this.svgElement.style.width = '100%'), + (this.svgElement.style.height = '100%'), + (this.svgElement.style.transform = 'translate3d(0,0,0)')), + this.renderConfig.className && + this.svgElement.setAttribute('class', this.renderConfig.className), + this.renderConfig.id && this.svgElement.setAttribute('id', this.renderConfig.id), + void 0 !== this.renderConfig.focusable && + this.svgElement.setAttribute('focusable', this.renderConfig.focusable), + this.svgElement.setAttribute( + 'preserveAspectRatio', + this.renderConfig.preserveAspectRatio, + ), + this.animationItem.wrapper.appendChild(this.svgElement); + var e = this.globalData.defs; + this.setupGlobalData(t, e), + (this.globalData.progressiveLoad = this.renderConfig.progressiveLoad), + (this.data = t); + var r = createNS('clipPath'), + n = createNS('rect'); + n.setAttribute('width', t.w), + n.setAttribute('height', t.h), + n.setAttribute('x', 0), + n.setAttribute('y', 0); + var i = createElementID(); + r.setAttribute('id', i), + r.appendChild(n), + this.layerElement.setAttribute('clip-path', 'url(' + locationHref + '#' + i + ')'), + e.appendChild(r), + (this.layers = t.layers), + (this.elements = createSizedArray(t.layers.length)); + }), + (SVGRenderer.prototype.destroy = function () { + var t; + this.animationItem.wrapper && (this.animationItem.wrapper.innerText = ''), + (this.layerElement = null), + (this.globalData.defs = null); + var e = this.layers ? this.layers.length : 0; + for (t = 0; t < e; t += 1) this.elements[t] && this.elements[t].destroy(); + (this.elements.length = 0), (this.destroyed = !0), (this.animationItem = null); + }), + (SVGRenderer.prototype.updateContainerSize = function () {}), + (SVGRenderer.prototype.buildItem = function (t) { + var e = this.elements; + if (!e[t] && 99 !== this.layers[t].ty) { + e[t] = !0; + var r = this.createItem(this.layers[t]); + (e[t] = r), + expressionsPlugin && + (0 === this.layers[t].ty && + this.globalData.projectInterface.registerComposition(r), + r.initExpressions()), + this.appendElementInPos(r, t), + this.layers[t].tt && + (this.elements[t - 1] && !0 !== this.elements[t - 1] + ? r.setMatte(e[t - 1].layerId) + : (this.buildItem(t - 1), this.addPendingElement(r))); + } + }), + (SVGRenderer.prototype.checkPendingElements = function () { + for (; this.pendingElements.length; ) { + var t = this.pendingElements.pop(); + if ((t.checkParenting(), t.data.tt)) + for (var e = 0, r = this.elements.length; e < r; ) { + if (this.elements[e] === t) { + t.setMatte(this.elements[e - 1].layerId); + break; + } + e += 1; + } + } + }), + (SVGRenderer.prototype.renderFrame = function (t) { + if (this.renderedFrame !== t && !this.destroyed) { + var e; + null === t ? (t = this.renderedFrame) : (this.renderedFrame = t), + (this.globalData.frameNum = t), + (this.globalData.frameId += 1), + (this.globalData.projectInterface.currentFrame = t), + (this.globalData._mdf = !1); + var r = this.layers.length; + for (this.completeLayers || this.checkLayers(t), e = r - 1; 0 <= e; e -= 1) + (this.completeLayers || this.elements[e]) && + this.elements[e].prepareFrame(t - this.layers[e].st); + if (this.globalData._mdf) + for (e = 0; e < r; e += 1) + (this.completeLayers || this.elements[e]) && this.elements[e].renderFrame(); + } + }), + (SVGRenderer.prototype.appendElementInPos = function (t, e) { + var r = t.getBaseElement(); + if (r) { + for (var n, i = 0; i < e; ) + this.elements[i] && + !0 !== this.elements[i] && + this.elements[i].getBaseElement() && + (n = this.elements[i].getBaseElement()), + (i += 1); + n ? this.layerElement.insertBefore(r, n) : this.layerElement.appendChild(r); + } + }), + (SVGRenderer.prototype.hide = function () { + this.layerElement.style.display = 'none'; + }), + (SVGRenderer.prototype.show = function () { + this.layerElement.style.display = 'block'; + }), + extendPrototype([BaseRenderer], CanvasRenderer), + (CanvasRenderer.prototype.createShape = function (t) { + return new CVShapeElement(t, this.globalData, this); + }), + (CanvasRenderer.prototype.createText = function (t) { + return new CVTextElement(t, this.globalData, this); + }), + (CanvasRenderer.prototype.createImage = function (t) { + return new CVImageElement(t, this.globalData, this); + }), + (CanvasRenderer.prototype.createComp = function (t) { + return new CVCompElement(t, this.globalData, this); + }), + (CanvasRenderer.prototype.createSolid = function (t) { + return new CVSolidElement(t, this.globalData, this); + }), + (CanvasRenderer.prototype.createNull = SVGRenderer.prototype.createNull), + (CanvasRenderer.prototype.ctxTransform = function (t) { + if (1 !== t[0] || 0 !== t[1] || 0 !== t[4] || 1 !== t[5] || 0 !== t[12] || 0 !== t[13]) + if (this.renderConfig.clearCanvas) { + this.transformMat.cloneFromProps(t); + var e = this.contextData.cTr.props; + this.transformMat.transform( + e[0], + e[1], + e[2], + e[3], + e[4], + e[5], + e[6], + e[7], + e[8], + e[9], + e[10], + e[11], + e[12], + e[13], + e[14], + e[15], + ), + this.contextData.cTr.cloneFromProps(this.transformMat.props); + var r = this.contextData.cTr.props; + this.canvasContext.setTransform(r[0], r[1], r[4], r[5], r[12], r[13]); + } else this.canvasContext.transform(t[0], t[1], t[4], t[5], t[12], t[13]); + }), + (CanvasRenderer.prototype.ctxOpacity = function (t) { + if (!this.renderConfig.clearCanvas) + return ( + (this.canvasContext.globalAlpha *= t < 0 ? 0 : t), + void (this.globalData.currentGlobalAlpha = this.contextData.cO) + ); + (this.contextData.cO *= t < 0 ? 0 : t), + this.globalData.currentGlobalAlpha !== this.contextData.cO && + ((this.canvasContext.globalAlpha = this.contextData.cO), + (this.globalData.currentGlobalAlpha = this.contextData.cO)); + }), + (CanvasRenderer.prototype.reset = function () { + this.renderConfig.clearCanvas ? this.contextData.reset() : this.canvasContext.restore(); + }), + (CanvasRenderer.prototype.save = function (t) { + if (this.renderConfig.clearCanvas) { + t && this.canvasContext.save(); + var e, + r = this.contextData.cTr.props; + this.contextData._length <= this.contextData.cArrPos && this.contextData.duplicate(); + var n = this.contextData.saved[this.contextData.cArrPos]; + for (e = 0; e < 16; e += 1) n[e] = r[e]; + (this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO), + (this.contextData.cArrPos += 1); + } else this.canvasContext.save(); + }), + (CanvasRenderer.prototype.restore = function (t) { + if (this.renderConfig.clearCanvas) { + t && (this.canvasContext.restore(), (this.globalData.blendMode = 'source-over')), + (this.contextData.cArrPos -= 1); + var e, + r = this.contextData.saved[this.contextData.cArrPos], + n = this.contextData.cTr.props; + for (e = 0; e < 16; e += 1) n[e] = r[e]; + this.canvasContext.setTransform(r[0], r[1], r[4], r[5], r[12], r[13]), + (r = this.contextData.savedOp[this.contextData.cArrPos]), + (this.contextData.cO = r), + this.globalData.currentGlobalAlpha !== r && + ((this.canvasContext.globalAlpha = r), (this.globalData.currentGlobalAlpha = r)); + } else this.canvasContext.restore(); + }), + (CanvasRenderer.prototype.configAnimation = function (t) { + if (this.animationItem.wrapper) { + this.animationItem.container = createTag('canvas'); + var e = this.animationItem.container.style; + (e.width = '100%'), (e.height = '100%'); + var r = '0px 0px 0px'; + (e.transformOrigin = r), + (e.mozTransformOrigin = r), + (e.webkitTransformOrigin = r), + (e['-webkit-transform'] = r), + this.animationItem.wrapper.appendChild(this.animationItem.container), + (this.canvasContext = this.animationItem.container.getContext('2d')), + this.renderConfig.className && + this.animationItem.container.setAttribute('class', this.renderConfig.className), + this.renderConfig.id && + this.animationItem.container.setAttribute('id', this.renderConfig.id); + } else this.canvasContext = this.renderConfig.context; + (this.data = t), + (this.layers = t.layers), + (this.transformCanvas = { w: t.w, h: t.h, sx: 0, sy: 0, tx: 0, ty: 0 }), + this.setupGlobalData(t, document.body), + (this.globalData.canvasContext = this.canvasContext), + ((this.globalData.renderer = this).globalData.isDashed = !1), + (this.globalData.progressiveLoad = this.renderConfig.progressiveLoad), + (this.globalData.transformCanvas = this.transformCanvas), + (this.elements = createSizedArray(t.layers.length)), + this.updateContainerSize(); + }), + (CanvasRenderer.prototype.updateContainerSize = function () { + var t, e, r, n; + if ( + (this.reset(), + this.animationItem.wrapper && this.animationItem.container + ? ((t = this.animationItem.wrapper.offsetWidth), + (e = this.animationItem.wrapper.offsetHeight), + this.animationItem.container.setAttribute('width', t * this.renderConfig.dpr), + this.animationItem.container.setAttribute('height', e * this.renderConfig.dpr)) + : ((t = this.canvasContext.canvas.width * this.renderConfig.dpr), + (e = this.canvasContext.canvas.height * this.renderConfig.dpr)), + -1 !== this.renderConfig.preserveAspectRatio.indexOf('meet') || + -1 !== this.renderConfig.preserveAspectRatio.indexOf('slice')) + ) { + var i = this.renderConfig.preserveAspectRatio.split(' '), + a = i[1] || 'meet', + s = i[0] || 'xMidYMid', + o = s.substr(0, 4), + h = s.substr(4); + (r = t / e), + (n = this.transformCanvas.w / this.transformCanvas.h), + (this.transformCanvas.sy = + (r < n && 'meet' === a) || (n < r && 'slice' === a) + ? ((this.transformCanvas.sx = + t / (this.transformCanvas.w / this.renderConfig.dpr)), + t / (this.transformCanvas.w / this.renderConfig.dpr)) + : ((this.transformCanvas.sx = + e / (this.transformCanvas.h / this.renderConfig.dpr)), + e / (this.transformCanvas.h / this.renderConfig.dpr))), + (this.transformCanvas.tx = + 'xMid' === o && ((n < r && 'meet' === a) || (r < n && 'slice' === a)) + ? ((t - this.transformCanvas.w * (e / this.transformCanvas.h)) / 2) * + this.renderConfig.dpr + : 'xMax' === o && ((n < r && 'meet' === a) || (r < n && 'slice' === a)) + ? (t - this.transformCanvas.w * (e / this.transformCanvas.h)) * + this.renderConfig.dpr + : 0), + (this.transformCanvas.ty = + 'YMid' === h && ((r < n && 'meet' === a) || (n < r && 'slice' === a)) + ? ((e - this.transformCanvas.h * (t / this.transformCanvas.w)) / 2) * + this.renderConfig.dpr + : 'YMax' === h && ((r < n && 'meet' === a) || (n < r && 'slice' === a)) + ? (e - this.transformCanvas.h * (t / this.transformCanvas.w)) * + this.renderConfig.dpr + : 0); + } else + 'none' === this.renderConfig.preserveAspectRatio + ? ((this.transformCanvas.sx = t / (this.transformCanvas.w / this.renderConfig.dpr)), + (this.transformCanvas.sy = e / (this.transformCanvas.h / this.renderConfig.dpr))) + : ((this.transformCanvas.sx = this.renderConfig.dpr), + (this.transformCanvas.sy = this.renderConfig.dpr)), + (this.transformCanvas.tx = 0), + (this.transformCanvas.ty = 0); + (this.transformCanvas.props = [ + this.transformCanvas.sx, + 0, + 0, + 0, + 0, + this.transformCanvas.sy, + 0, + 0, + 0, + 0, + 1, + 0, + this.transformCanvas.tx, + this.transformCanvas.ty, + 0, + 1, + ]), + this.ctxTransform(this.transformCanvas.props), + this.canvasContext.beginPath(), + this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h), + this.canvasContext.closePath(), + this.canvasContext.clip(), + this.renderFrame(this.renderedFrame, !0); + }), + (CanvasRenderer.prototype.destroy = function () { + var t; + for ( + this.renderConfig.clearCanvas && + this.animationItem.wrapper && + (this.animationItem.wrapper.innerText = ''), + t = (this.layers ? this.layers.length : 0) - 1; + 0 <= t; + t -= 1 + ) + this.elements[t] && this.elements[t].destroy(); + (this.elements.length = 0), + (this.globalData.canvasContext = null), + (this.animationItem.container = null), + (this.destroyed = !0); + }), + (CanvasRenderer.prototype.renderFrame = function (t, e) { + if ( + (this.renderedFrame !== t || !0 !== this.renderConfig.clearCanvas || e) && + !this.destroyed && + -1 !== t + ) { + var r; + (this.renderedFrame = t), + (this.globalData.frameNum = t - this.animationItem._isFirstFrame), + (this.globalData.frameId += 1), + (this.globalData._mdf = !this.renderConfig.clearCanvas || e), + (this.globalData.projectInterface.currentFrame = t); + var n = this.layers.length; + for (this.completeLayers || this.checkLayers(t), r = 0; r < n; r += 1) + (this.completeLayers || this.elements[r]) && + this.elements[r].prepareFrame(t - this.layers[r].st); + if (this.globalData._mdf) { + for ( + !0 === this.renderConfig.clearCanvas + ? this.canvasContext.clearRect( + 0, + 0, + this.transformCanvas.w, + this.transformCanvas.h, + ) + : this.save(), + r = n - 1; + 0 <= r; + r -= 1 + ) + (this.completeLayers || this.elements[r]) && this.elements[r].renderFrame(); + !0 !== this.renderConfig.clearCanvas && this.restore(); + } + } + }), + (CanvasRenderer.prototype.buildItem = function (t) { + var e = this.elements; + if (!e[t] && 99 !== this.layers[t].ty) { + var r = this.createItem(this.layers[t], this, this.globalData); + (e[t] = r).initExpressions(); + } + }), + (CanvasRenderer.prototype.checkPendingElements = function () { + for (; this.pendingElements.length; ) this.pendingElements.pop().checkParenting(); + }), + (CanvasRenderer.prototype.hide = function () { + this.animationItem.container.style.display = 'none'; + }), + (CanvasRenderer.prototype.show = function () { + this.animationItem.container.style.display = 'block'; + }), + extendPrototype([BaseRenderer], HybridRenderer), + (HybridRenderer.prototype.buildItem = SVGRenderer.prototype.buildItem), + (HybridRenderer.prototype.checkPendingElements = function () { + for (; this.pendingElements.length; ) this.pendingElements.pop().checkParenting(); + }), + (HybridRenderer.prototype.appendElementInPos = function (t, e) { + var r = t.getBaseElement(); + if (r) { + var n = this.layers[e]; + if (n.ddd && this.supports3d) this.addTo3dContainer(r, e); + else if (this.threeDElements) this.addTo3dContainer(r, e); + else { + for (var i, a, s = 0; s < e; ) + this.elements[s] && + !0 !== this.elements[s] && + this.elements[s].getBaseElement && + ((a = this.elements[s]), + (i = + (this.layers[s].ddd ? this.getThreeDContainerByPos(s) : a.getBaseElement()) || + i)), + (s += 1); + i + ? (n.ddd && this.supports3d) || this.layerElement.insertBefore(r, i) + : (n.ddd && this.supports3d) || this.layerElement.appendChild(r); + } + } + }), + (HybridRenderer.prototype.createShape = function (t) { + return this.supports3d + ? new HShapeElement(t, this.globalData, this) + : new SVGShapeElement(t, this.globalData, this); + }), + (HybridRenderer.prototype.createText = function (t) { + return this.supports3d + ? new HTextElement(t, this.globalData, this) + : new SVGTextLottieElement(t, this.globalData, this); + }), + (HybridRenderer.prototype.createCamera = function (t) { + return (this.camera = new HCameraElement(t, this.globalData, this)), this.camera; + }), + (HybridRenderer.prototype.createImage = function (t) { + return this.supports3d + ? new HImageElement(t, this.globalData, this) + : new IImageElement(t, this.globalData, this); + }), + (HybridRenderer.prototype.createComp = function (t) { + return this.supports3d + ? new HCompElement(t, this.globalData, this) + : new SVGCompElement(t, this.globalData, this); + }), + (HybridRenderer.prototype.createSolid = function (t) { + return this.supports3d + ? new HSolidElement(t, this.globalData, this) + : new ISolidElement(t, this.globalData, this); + }), + (HybridRenderer.prototype.createNull = SVGRenderer.prototype.createNull), + (HybridRenderer.prototype.getThreeDContainerByPos = function (t) { + for (var e = 0, r = this.threeDElements.length; e < r; ) { + if (this.threeDElements[e].startPos <= t && this.threeDElements[e].endPos >= t) + return this.threeDElements[e].perspectiveElem; + e += 1; + } + return null; + }), + (HybridRenderer.prototype.createThreeDContainer = function (t, e) { + var r, + n, + i = createTag('div'); + styleDiv(i); + var a = createTag('div'); + if ((styleDiv(a), '3d' === e)) { + ((r = i.style).width = this.globalData.compSize.w + 'px'), + (r.height = this.globalData.compSize.h + 'px'); + var s = '50% 50%'; + (r.webkitTransformOrigin = s), (r.mozTransformOrigin = s), (r.transformOrigin = s); + var o = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)'; + ((n = a.style).transform = o), (n.webkitTransform = o); + } + i.appendChild(a); + var h = { container: a, perspectiveElem: i, startPos: t, endPos: t, type: e }; + return this.threeDElements.push(h), h; + }), + (HybridRenderer.prototype.build3dContainers = function () { + var t, + e, + r = this.layers.length, + n = ''; + for (t = 0; t < r; t += 1) + this.layers[t].ddd && 3 !== this.layers[t].ty + ? '3d' !== n && ((n = '3d'), (e = this.createThreeDContainer(t, '3d'))) + : '2d' !== n && ((n = '2d'), (e = this.createThreeDContainer(t, '2d'))), + (e.endPos = Math.max(e.endPos, t)); + for (t = (r = this.threeDElements.length) - 1; 0 <= t; t -= 1) + this.resizerElem.appendChild(this.threeDElements[t].perspectiveElem); + }), + (HybridRenderer.prototype.addTo3dContainer = function (t, e) { + for (var r = 0, n = this.threeDElements.length; r < n; ) { + if (e <= this.threeDElements[r].endPos) { + for (var i, a = this.threeDElements[r].startPos; a < e; ) + this.elements[a] && + this.elements[a].getBaseElement && + (i = this.elements[a].getBaseElement()), + (a += 1); + i + ? this.threeDElements[r].container.insertBefore(t, i) + : this.threeDElements[r].container.appendChild(t); + break; + } + r += 1; + } + }), + (HybridRenderer.prototype.configAnimation = function (t) { + var e = createTag('div'), + r = this.animationItem.wrapper, + n = e.style; + (n.width = t.w + 'px'), + (n.height = t.h + 'px'), + styleDiv((this.resizerElem = e)), + (n.transformStyle = 'flat'), + (n.mozTransformStyle = 'flat'), + (n.webkitTransformStyle = 'flat'), + this.renderConfig.className && e.setAttribute('class', this.renderConfig.className), + r.appendChild(e), + (n.overflow = 'hidden'); + var i = createNS('svg'); + i.setAttribute('width', '1'), + i.setAttribute('height', '1'), + styleDiv(i), + this.resizerElem.appendChild(i); + var a = createNS('defs'); + i.appendChild(a), + (this.data = t), + this.setupGlobalData(t, i), + (this.globalData.defs = a), + (this.layers = t.layers), + (this.layerElement = this.resizerElem), + this.build3dContainers(), + this.updateContainerSize(); + }), + (HybridRenderer.prototype.destroy = function () { + var t; + this.animationItem.wrapper && (this.animationItem.wrapper.innerText = ''), + (this.animationItem.container = null), + (this.globalData.defs = null); + var e = this.layers ? this.layers.length : 0; + for (t = 0; t < e; t += 1) this.elements[t].destroy(); + (this.elements.length = 0), (this.destroyed = !0), (this.animationItem = null); + }), + (HybridRenderer.prototype.updateContainerSize = function () { + var t, + e, + r, + n, + i = this.animationItem.wrapper.offsetWidth, + a = this.animationItem.wrapper.offsetHeight; + n = + i / a < this.globalData.compSize.w / this.globalData.compSize.h + ? ((t = i / this.globalData.compSize.w), + (e = i / this.globalData.compSize.w), + (r = 0), + (a - this.globalData.compSize.h * (i / this.globalData.compSize.w)) / 2) + : ((t = a / this.globalData.compSize.h), + (e = a / this.globalData.compSize.h), + (r = (i - this.globalData.compSize.w * (a / this.globalData.compSize.h)) / 2), + 0); + var s = this.resizerElem.style; + (s.webkitTransform = + 'matrix3d(' + t + ',0,0,0,0,' + e + ',0,0,0,0,1,0,' + r + ',' + n + ',0,1)'), + (s.transform = s.webkitTransform); + }), + (HybridRenderer.prototype.renderFrame = SVGRenderer.prototype.renderFrame), + (HybridRenderer.prototype.hide = function () { + this.resizerElem.style.display = 'none'; + }), + (HybridRenderer.prototype.show = function () { + this.resizerElem.style.display = 'block'; + }), + (HybridRenderer.prototype.initItems = function () { + if ((this.buildAllItems(), this.camera)) this.camera.setup(); + else { + var t, + e = this.globalData.compSize.w, + r = this.globalData.compSize.h, + n = this.threeDElements.length; + for (t = 0; t < n; t += 1) { + var i = this.threeDElements[t].perspectiveElem.style; + (i.webkitPerspective = Math.sqrt(Math.pow(e, 2) + Math.pow(r, 2)) + 'px'), + (i.perspective = i.webkitPerspective); + } + } + }), + (HybridRenderer.prototype.searchExtraCompositions = function (t) { + var e, + r = t.length, + n = createTag('div'); + for (e = 0; e < r; e += 1) + if (t[e].xt) { + var i = this.createComp(t[e], n, this.globalData.comp, null); + i.initExpressions(), this.globalData.projectInterface.registerComposition(i); + } + }), + (MaskElement.prototype.getMaskProperty = function (t) { + return this.viewData[t].prop; + }), + (MaskElement.prototype.renderFrame = function (t) { + var e, + r = this.element.finalTransform.mat, + n = this.masksProperties.length; + for (e = 0; e < n; e += 1) + if ( + ((this.viewData[e].prop._mdf || t) && + this.drawPath(this.masksProperties[e], this.viewData[e].prop.v, this.viewData[e]), + (this.viewData[e].op._mdf || t) && + this.viewData[e].elem.setAttribute('fill-opacity', this.viewData[e].op.v), + 'n' !== this.masksProperties[e].mode && + (this.viewData[e].invRect && + (this.element.finalTransform.mProp._mdf || t) && + this.viewData[e].invRect.setAttribute( + 'transform', + r.getInverseMatrix().to2dCSS(), + ), + this.storedData[e].x && (this.storedData[e].x._mdf || t))) + ) { + var i = this.storedData[e].expan; + this.storedData[e].x.v < 0 + ? ('erode' !== this.storedData[e].lastOperator && + ((this.storedData[e].lastOperator = 'erode'), + this.storedData[e].elem.setAttribute( + 'filter', + 'url(' + locationHref + '#' + this.storedData[e].filterId + ')', + )), + i.setAttribute('radius', -this.storedData[e].x.v)) + : ('dilate' !== this.storedData[e].lastOperator && + ((this.storedData[e].lastOperator = 'dilate'), + this.storedData[e].elem.setAttribute('filter', null)), + this.storedData[e].elem.setAttribute( + 'stroke-width', + 2 * this.storedData[e].x.v, + )); + } + }), + (MaskElement.prototype.getMaskelement = function () { + return this.maskElement; + }), + (MaskElement.prototype.createLayerSolidPath = function () { + var t = 'M0,0 '; + return ( + (t += ' h' + this.globalData.compSize.w), + (t += ' v' + this.globalData.compSize.h), + (t += ' h-' + this.globalData.compSize.w) + ' v-' + this.globalData.compSize.h + ' ' + ); + }), + (MaskElement.prototype.drawPath = function (t, e, r) { + var n, + i, + a = ' M' + e.v[0][0] + ',' + e.v[0][1]; + for (i = e._length, n = 1; n < i; n += 1) + a += + ' C' + + e.o[n - 1][0] + + ',' + + e.o[n - 1][1] + + ' ' + + e.i[n][0] + + ',' + + e.i[n][1] + + ' ' + + e.v[n][0] + + ',' + + e.v[n][1]; + if ( + (e.c && + 1 < i && + (a += + ' C' + + e.o[n - 1][0] + + ',' + + e.o[n - 1][1] + + ' ' + + e.i[0][0] + + ',' + + e.i[0][1] + + ' ' + + e.v[0][0] + + ',' + + e.v[0][1]), + r.lastPath !== a) + ) { + var s = ''; + r.elem && (e.c && (s = t.inv ? this.solidPath + a : a), r.elem.setAttribute('d', s)), + (r.lastPath = a); + } + }), + (MaskElement.prototype.destroy = function () { + (this.element = null), + (this.globalData = null), + (this.maskElement = null), + (this.data = null), + (this.masksProperties = null); + }), + (HierarchyElement.prototype = { + initHierarchy: function () { + (this.hierarchy = []), (this._isParent = !1), this.checkParenting(); + }, + setHierarchy: function (t) { + this.hierarchy = t; + }, + setAsParent: function () { + this._isParent = !0; + }, + checkParenting: function () { + void 0 !== this.data.parent && + this.comp.buildElementParenting(this, this.data.parent, []); + }, + }), + (FrameElement.prototype = { + initFrame: function () { + (this._isFirstFrame = !1), (this.dynamicProperties = []), (this._mdf = !1); + }, + prepareProperties: function (t, e) { + var r, + n = this.dynamicProperties.length; + for (r = 0; r < n; r += 1) + (e || (this._isParent && 'transform' === this.dynamicProperties[r].propType)) && + (this.dynamicProperties[r].getValue(), + this.dynamicProperties[r]._mdf && + ((this.globalData._mdf = !0), (this._mdf = !0))); + }, + addDynamicProperty: function (t) { + -1 === this.dynamicProperties.indexOf(t) && this.dynamicProperties.push(t); + }, + }), + (TransformElement.prototype = { + initTransform: function () { + (this.finalTransform = { + mProp: this.data.ks + ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) + : { o: 0 }, + _matMdf: !1, + _opMdf: !1, + mat: new Matrix(), + }), + this.data.ao && (this.finalTransform.mProp.autoOriented = !0), + this.data.ty; + }, + renderTransform: function () { + if ( + ((this.finalTransform._opMdf = + this.finalTransform.mProp.o._mdf || this._isFirstFrame), + (this.finalTransform._matMdf = + this.finalTransform.mProp._mdf || this._isFirstFrame), + this.hierarchy) + ) { + var t, + e = this.finalTransform.mat, + r = 0, + n = this.hierarchy.length; + if (!this.finalTransform._matMdf) + for (; r < n; ) { + if (this.hierarchy[r].finalTransform.mProp._mdf) { + this.finalTransform._matMdf = !0; + break; + } + r += 1; + } + if (this.finalTransform._matMdf) + for ( + t = this.finalTransform.mProp.v.props, e.cloneFromProps(t), r = 0; + r < n; + r += 1 + ) + (t = this.hierarchy[r].finalTransform.mProp.v.props), + e.transform( + t[0], + t[1], + t[2], + t[3], + t[4], + t[5], + t[6], + t[7], + t[8], + t[9], + t[10], + t[11], + t[12], + t[13], + t[14], + t[15], + ); + } + }, + globalToLocal: function (t) { + var e = []; + e.push(this.finalTransform); + for (var r, n = !0, i = this.comp; n; ) + i.finalTransform + ? (i.data.hasMask && e.splice(0, 0, i.finalTransform), (i = i.comp)) + : (n = !1); + var a, + s = e.length; + for (r = 0; r < s; r += 1) + (a = e[r].mat.applyToPointArray(0, 0, 0)), (t = [t[0] - a[0], t[1] - a[1], 0]); + return t; + }, + mHelper: new Matrix(), + }), + (RenderableElement.prototype = { + initRenderable: function () { + (this.isInRange = !1), + (this.hidden = !1), + (this.isTransparent = !1), + (this.renderableComponents = []); + }, + addRenderableComponent: function (t) { + -1 === this.renderableComponents.indexOf(t) && this.renderableComponents.push(t); + }, + removeRenderableComponent: function (t) { + -1 !== this.renderableComponents.indexOf(t) && + this.renderableComponents.splice(this.renderableComponents.indexOf(t), 1); + }, + prepareRenderableFrame: function (t) { + this.checkLayerLimits(t); + }, + checkTransparency: function () { + this.finalTransform.mProp.o.v <= 0 + ? !this.isTransparent && + this.globalData.renderConfig.hideOnTransparent && + ((this.isTransparent = !0), this.hide()) + : this.isTransparent && ((this.isTransparent = !1), this.show()); + }, + checkLayerLimits: function (t) { + this.data.ip - this.data.st <= t && this.data.op - this.data.st > t + ? !0 !== this.isInRange && + ((this.globalData._mdf = !0), + (this._mdf = !0), + (this.isInRange = !0), + this.show()) + : !1 !== this.isInRange && + ((this.globalData._mdf = !0), (this.isInRange = !1), this.hide()); + }, + renderRenderable: function () { + var t, + e = this.renderableComponents.length; + for (t = 0; t < e; t += 1) + this.renderableComponents[t].renderFrame(this._isFirstFrame); + }, + sourceRectAtTime: function () { + return { top: 0, left: 0, width: 100, height: 100 }; + }, + getLayerSize: function () { + return 5 === this.data.ty + ? { w: this.data.textData.width, h: this.data.textData.height } + : { w: this.data.width, h: this.data.height }; + }, + }), + extendPrototype( + [ + RenderableElement, + createProxyFunction({ + initElement: function (t, e, r) { + this.initFrame(), + this.initBaseData(t, e, r), + this.initTransform(t, e, r), + this.initHierarchy(), + this.initRenderable(), + this.initRendererElement(), + this.createContainerElements(), + this.createRenderableComponents(), + this.createContent(), + this.hide(); + }, + hide: function () { + this.hidden || + (this.isInRange && !this.isTransparent) || + (((this.baseElement || this.layerElement).style.display = 'none'), + (this.hidden = !0)); + }, + show: function () { + this.isInRange && + !this.isTransparent && + (this.data.hd || + ((this.baseElement || this.layerElement).style.display = 'block'), + (this.hidden = !1), + (this._isFirstFrame = !0)); + }, + renderFrame: function () { + this.data.hd || + this.hidden || + (this.renderTransform(), + this.renderRenderable(), + this.renderElement(), + this.renderInnerContent(), + this._isFirstFrame && (this._isFirstFrame = !1)); + }, + renderInnerContent: function () {}, + prepareFrame: function (t) { + (this._mdf = !1), + this.prepareRenderableFrame(t), + this.prepareProperties(t, this.isInRange), + this.checkTransparency(); + }, + destroy: function () { + (this.innerElem = null), this.destroyBaseElement(); + }, + }), + ], + RenderableDOMElement, + ), + (SVGStyleData.prototype.reset = function () { + (this.d = ''), (this._mdf = !1); + }), + (SVGShapeData.prototype.setAsAnimated = function () { + this._isAnimated = !0; + }), + extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData), + extendPrototype([DynamicPropertyContainer], SVGFillStyleData), + (SVGGradientFillStyleData.prototype.initGradientData = function (t, e, r) { + (this.o = PropertyFactory.getProp(t, e.o, 0, 0.01, this)), + (this.s = PropertyFactory.getProp(t, e.s, 1, null, this)), + (this.e = PropertyFactory.getProp(t, e.e, 1, null, this)), + (this.h = PropertyFactory.getProp(t, e.h || { k: 0 }, 0, 0.01, this)), + (this.a = PropertyFactory.getProp(t, e.a || { k: 0 }, 0, degToRads, this)), + (this.g = new GradientProperty(t, e.g, this)), + (this.style = r), + (this.stops = []), + this.setGradientData(r.pElem, e), + this.setGradientOpacity(e, r), + (this._isAnimated = !!this._isAnimated); + }), + (SVGGradientFillStyleData.prototype.setGradientData = function (t, e) { + var r = createElementID(), + n = createNS(1 === e.t ? 'linearGradient' : 'radialGradient'); + n.setAttribute('id', r), + n.setAttribute('spreadMethod', 'pad'), + n.setAttribute('gradientUnits', 'userSpaceOnUse'); + var i, + a, + s, + o = []; + for (s = 4 * e.g.p, a = 0; a < s; a += 4) + (i = createNS('stop')), n.appendChild(i), o.push(i); + t.setAttribute( + 'gf' === e.ty ? 'fill' : 'stroke', + 'url(' + locationHref + '#' + r + ')', + ), + (this.gf = n), + (this.cst = o); + }), + (SVGGradientFillStyleData.prototype.setGradientOpacity = function (t, e) { + if (this.g._hasOpacity && !this.g._collapsable) { + var r, + n, + i, + a = createNS('mask'), + s = createNS('path'); + a.appendChild(s); + var o = createElementID(), + h = createElementID(); + a.setAttribute('id', h); + var l = createNS(1 === t.t ? 'linearGradient' : 'radialGradient'); + l.setAttribute('id', o), + l.setAttribute('spreadMethod', 'pad'), + l.setAttribute('gradientUnits', 'userSpaceOnUse'), + (i = t.g.k.k[0].s ? t.g.k.k[0].s.length : t.g.k.k.length); + var c = this.stops; + for (n = 4 * t.g.p; n < i; n += 2) + (r = createNS('stop')).setAttribute('stop-color', 'rgb(255,255,255)'), + l.appendChild(r), + c.push(r); + s.setAttribute( + 'gf' === t.ty ? 'fill' : 'stroke', + 'url(' + locationHref + '#' + o + ')', + ), + 'gs' === t.ty && + (s.setAttribute('stroke-linecap', lineCapEnum[t.lc || 2]), + s.setAttribute('stroke-linejoin', lineJoinEnum[t.lj || 2]), + 1 === t.lj && s.setAttribute('stroke-miterlimit', t.ml)), + (this.of = l), + (this.ms = a), + (this.ost = c), + (this.maskId = h), + (e.msElem = s); + } + }), + extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData), + extendPrototype( + [SVGGradientFillStyleData, DynamicPropertyContainer], + SVGGradientStrokeStyleData, + ); + var SVGElementsRenderer = (function () { + var t = new Matrix(), + e = new Matrix(); + function r(t, e, r) { + (r || e.transform.op._mdf) && + e.transform.container.setAttribute('opacity', e.transform.op.v), + (r || e.transform.mProps._mdf) && + e.transform.container.setAttribute('transform', e.transform.mProps.v.to2dCSS()); + } + function n(r, n, i) { + var a, + s, + o, + h, + l, + c, + u, + f, + p, + d, + m, + v = n.styles.length, + y = n.lvl; + for (c = 0; c < v; c += 1) { + if (((h = n.sh._mdf || i), n.styles[c].lvl < y)) { + for ( + f = e.reset(), d = y - n.styles[c].lvl, m = n.transformers.length - 1; + !h && 0 < d; + + ) + (h = n.transformers[m].mProps._mdf || h), (d -= 1), (m -= 1); + if (h) + for (d = y - n.styles[c].lvl, m = n.transformers.length - 1; 0 < d; ) + (p = n.transformers[m].mProps.v.props), + f.transform( + p[0], + p[1], + p[2], + p[3], + p[4], + p[5], + p[6], + p[7], + p[8], + p[9], + p[10], + p[11], + p[12], + p[13], + p[14], + p[15], + ), + (d -= 1), + (m -= 1); + } else f = t; + if (((s = (u = n.sh.paths)._length), h)) { + for (o = '', a = 0; a < s; a += 1) + (l = u.shapes[a]) && l._length && (o += buildShapeString(l, l._length, l.c, f)); + n.caches[c] = o; + } else o = n.caches[c]; + (n.styles[c].d += !0 === r.hd ? '' : o), (n.styles[c]._mdf = h || n.styles[c]._mdf); + } + } + function i(t, e, r) { + var n = e.style; + (e.c._mdf || r) && + n.pElem.setAttribute( + 'fill', + 'rgb(' + + bmFloor(e.c.v[0]) + + ',' + + bmFloor(e.c.v[1]) + + ',' + + bmFloor(e.c.v[2]) + + ')', + ), + (e.o._mdf || r) && n.pElem.setAttribute('fill-opacity', e.o.v); + } + function a(t, e, r) { + s(t, e, r), o(t, e, r); + } + function s(t, e, r) { + var n, + i, + a, + s, + o, + h = e.gf, + l = e.g._hasOpacity, + c = e.s.v, + u = e.e.v; + if (e.o._mdf || r) { + var f = 'gf' === t.ty ? 'fill-opacity' : 'stroke-opacity'; + e.style.pElem.setAttribute(f, e.o.v); + } + if (e.s._mdf || r) { + var p = 1 === t.t ? 'x1' : 'cx', + d = 'x1' === p ? 'y1' : 'cy'; + h.setAttribute(p, c[0]), + h.setAttribute(d, c[1]), + l && !e.g._collapsable && (e.of.setAttribute(p, c[0]), e.of.setAttribute(d, c[1])); + } + if (e.g._cmdf || r) { + n = e.cst; + var m = e.g.c; + for (a = n.length, i = 0; i < a; i += 1) + (s = n[i]).setAttribute('offset', m[4 * i] + '%'), + s.setAttribute( + 'stop-color', + 'rgb(' + m[4 * i + 1] + ',' + m[4 * i + 2] + ',' + m[4 * i + 3] + ')', + ); + } + if (l && (e.g._omdf || r)) { + var v = e.g.o; + for (a = (n = e.g._collapsable ? e.cst : e.ost).length, i = 0; i < a; i += 1) + (s = n[i]), + e.g._collapsable || s.setAttribute('offset', v[2 * i] + '%'), + s.setAttribute('stop-opacity', v[2 * i + 1]); + } + if (1 === t.t) + (e.e._mdf || r) && + (h.setAttribute('x2', u[0]), + h.setAttribute('y2', u[1]), + l && + !e.g._collapsable && + (e.of.setAttribute('x2', u[0]), e.of.setAttribute('y2', u[1]))); + else if ( + ((e.s._mdf || e.e._mdf || r) && + ((o = Math.sqrt(Math.pow(c[0] - u[0], 2) + Math.pow(c[1] - u[1], 2))), + h.setAttribute('r', o), + l && !e.g._collapsable && e.of.setAttribute('r', o)), + e.e._mdf || e.h._mdf || e.a._mdf || r) + ) { + o || (o = Math.sqrt(Math.pow(c[0] - u[0], 2) + Math.pow(c[1] - u[1], 2))); + var y = Math.atan2(u[1] - c[1], u[0] - c[0]), + g = e.h.v; + 1 <= g ? (g = 0.99) : g <= -1 && (g = -0.99); + var E = o * g, + b = Math.cos(y + e.a.v) * E + c[0], + _ = Math.sin(y + e.a.v) * E + c[1]; + h.setAttribute('fx', b), + h.setAttribute('fy', _), + l && !e.g._collapsable && (e.of.setAttribute('fx', b), e.of.setAttribute('fy', _)); + } + } + function o(t, e, r) { + var n = e.style, + i = e.d; + i && + (i._mdf || r) && + i.dashStr && + (n.pElem.setAttribute('stroke-dasharray', i.dashStr), + n.pElem.setAttribute('stroke-dashoffset', i.dashoffset[0])), + e.c && + (e.c._mdf || r) && + n.pElem.setAttribute( + 'stroke', + 'rgb(' + + bmFloor(e.c.v[0]) + + ',' + + bmFloor(e.c.v[1]) + + ',' + + bmFloor(e.c.v[2]) + + ')', + ), + (e.o._mdf || r) && n.pElem.setAttribute('stroke-opacity', e.o.v), + (e.w._mdf || r) && + (n.pElem.setAttribute('stroke-width', e.w.v), + n.msElem && n.msElem.setAttribute('stroke-width', e.w.v)); + } + return { + createRenderFunction: function (t) { + switch (t.ty) { + case 'fl': + return i; + case 'gf': + return s; + case 'gs': + return a; + case 'st': + return o; + case 'sh': + case 'el': + case 'rc': + case 'sr': + return n; + case 'tr': + return r; + default: + return null; + } + }, + }; + })(); + function ShapeTransformManager() { + (this.sequences = {}), (this.sequenceList = []), (this.transform_key_count = 0); + } + function CVShapeData(t, e, r, n) { + (this.styledShapes = []), (this.tr = [0, 0, 0, 0, 0, 0]); + var i, + a = 4; + 'rc' === e.ty ? (a = 5) : 'el' === e.ty ? (a = 6) : 'sr' === e.ty && (a = 7), + (this.sh = ShapePropertyFactory.getShapeProp(t, e, a, t)); + var s, + o = r.length; + for (i = 0; i < o; i += 1) + r[i].closed || + ((s = { transforms: n.addTransformSequence(r[i].transforms), trNodes: [] }), + this.styledShapes.push(s), + r[i].elements.push(s)); + } + function BaseElement() {} + function NullElement(t, e, r) { + this.initFrame(), + this.initBaseData(t, e, r), + this.initFrame(), + this.initTransform(t, e, r), + this.initHierarchy(); + } + function SVGBaseElement() {} + function IShapeElement() {} + function ITextElement() {} + function ICompElement() {} + function IImageElement(t, e, r) { + (this.assetData = e.getAssetData(t.refId)), + this.initElement(t, e, r), + (this.sourceRect = { + top: 0, + left: 0, + width: this.assetData.w, + height: this.assetData.h, + }); + } + function ISolidElement(t, e, r) { + this.initElement(t, e, r); + } + function AudioElement(t, e, r) { + this.initFrame(), + this.initRenderable(), + (this.assetData = e.getAssetData(t.refId)), + this.initBaseData(t, e, r), + (this._isPlaying = !1), + (this._canPlay = !1); + var n = this.globalData.getAssetsPath(this.assetData); + (this.audio = this.globalData.audioController.createAudio(n)), + (this._currentTime = 0), + this.globalData.audioController.addAudio(this), + (this.tm = t.tm + ? PropertyFactory.getProp(this, t.tm, 0, e.frameRate, this) + : { _placeholder: !0 }); + } + function FootageElement(t, e, r) { + this.initFrame(), + this.initRenderable(), + (this.assetData = e.getAssetData(t.refId)), + (this.footageData = e.imageLoader.getAsset(this.assetData)), + this.initBaseData(t, e, r); + } + function SVGCompElement(t, e, r) { + (this.layers = t.layers), + (this.supports3d = !0), + (this.completeLayers = !1), + (this.pendingElements = []), + (this.elements = this.layers ? createSizedArray(this.layers.length) : []), + this.initElement(t, e, r), + (this.tm = t.tm + ? PropertyFactory.getProp(this, t.tm, 0, e.frameRate, this) + : { _placeholder: !0 }); + } + function SVGTextLottieElement(t, e, r) { + (this.textSpans = []), (this.renderType = 'svg'), this.initElement(t, e, r); + } + function SVGShapeElement(t, e, r) { + (this.shapes = []), + (this.shapesData = t.shapes), + (this.stylesList = []), + (this.shapeModifiers = []), + (this.itemsData = []), + (this.processedElements = []), + (this.animatedContents = []), + this.initElement(t, e, r), + (this.prevViewData = []); + } + function SVGTintFilter(t, e) { + this.filterManager = e; + var r = createNS('feColorMatrix'); + if ( + (r.setAttribute('type', 'matrix'), + r.setAttribute('color-interpolation-filters', 'linearRGB'), + r.setAttribute( + 'values', + '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0', + ), + r.setAttribute('result', 'f1'), + t.appendChild(r), + (r = createNS('feColorMatrix')).setAttribute('type', 'matrix'), + r.setAttribute('color-interpolation-filters', 'sRGB'), + r.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0'), + r.setAttribute('result', 'f2'), + t.appendChild(r), + (this.matrixFilter = r), + 100 !== e.effectElements[2].p.v || e.effectElements[2].p.k) + ) { + var n, + i = createNS('feMerge'); + t.appendChild(i), + (n = createNS('feMergeNode')).setAttribute('in', 'SourceGraphic'), + i.appendChild(n), + (n = createNS('feMergeNode')).setAttribute('in', 'f2'), + i.appendChild(n); + } + } + function SVGFillFilter(t, e) { + this.filterManager = e; + var r = createNS('feColorMatrix'); + r.setAttribute('type', 'matrix'), + r.setAttribute('color-interpolation-filters', 'sRGB'), + r.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0'), + t.appendChild(r), + (this.matrixFilter = r); + } + function SVGGaussianBlurEffect(t, e) { + t.setAttribute('x', '-100%'), + t.setAttribute('y', '-100%'), + t.setAttribute('width', '300%'), + t.setAttribute('height', '300%'), + (this.filterManager = e); + var r = createNS('feGaussianBlur'); + t.appendChild(r), (this.feGaussianBlur = r); + } + function SVGStrokeEffect(t, e) { + (this.initialized = !1), (this.filterManager = e), (this.elem = t), (this.paths = []); + } + function SVGTritoneFilter(t, e) { + this.filterManager = e; + var r = createNS('feColorMatrix'); + r.setAttribute('type', 'matrix'), + r.setAttribute('color-interpolation-filters', 'linearRGB'), + r.setAttribute( + 'values', + '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0', + ), + r.setAttribute('result', 'f1'), + t.appendChild(r); + var n = createNS('feComponentTransfer'); + n.setAttribute('color-interpolation-filters', 'sRGB'), + t.appendChild(n), + (this.matrixFilter = n); + var i = createNS('feFuncR'); + i.setAttribute('type', 'table'), n.appendChild(i), (this.feFuncR = i); + var a = createNS('feFuncG'); + a.setAttribute('type', 'table'), n.appendChild(a), (this.feFuncG = a); + var s = createNS('feFuncB'); + s.setAttribute('type', 'table'), n.appendChild(s), (this.feFuncB = s); + } + function SVGProLevelsFilter(t, e) { + this.filterManager = e; + var r = this.filterManager.effectElements, + n = createNS('feComponentTransfer'); + (r[10].p.k || + 0 !== r[10].p.v || + r[11].p.k || + 1 !== r[11].p.v || + r[12].p.k || + 1 !== r[12].p.v || + r[13].p.k || + 0 !== r[13].p.v || + r[14].p.k || + 1 !== r[14].p.v) && + (this.feFuncR = this.createFeFunc('feFuncR', n)), + (r[17].p.k || + 0 !== r[17].p.v || + r[18].p.k || + 1 !== r[18].p.v || + r[19].p.k || + 1 !== r[19].p.v || + r[20].p.k || + 0 !== r[20].p.v || + r[21].p.k || + 1 !== r[21].p.v) && + (this.feFuncG = this.createFeFunc('feFuncG', n)), + (r[24].p.k || + 0 !== r[24].p.v || + r[25].p.k || + 1 !== r[25].p.v || + r[26].p.k || + 1 !== r[26].p.v || + r[27].p.k || + 0 !== r[27].p.v || + r[28].p.k || + 1 !== r[28].p.v) && + (this.feFuncB = this.createFeFunc('feFuncB', n)), + (r[31].p.k || + 0 !== r[31].p.v || + r[32].p.k || + 1 !== r[32].p.v || + r[33].p.k || + 1 !== r[33].p.v || + r[34].p.k || + 0 !== r[34].p.v || + r[35].p.k || + 1 !== r[35].p.v) && + (this.feFuncA = this.createFeFunc('feFuncA', n)), + (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) && + (n.setAttribute('color-interpolation-filters', 'sRGB'), + t.appendChild(n), + (n = createNS('feComponentTransfer'))), + (r[3].p.k || + 0 !== r[3].p.v || + r[4].p.k || + 1 !== r[4].p.v || + r[5].p.k || + 1 !== r[5].p.v || + r[6].p.k || + 0 !== r[6].p.v || + r[7].p.k || + 1 !== r[7].p.v) && + (n.setAttribute('color-interpolation-filters', 'sRGB'), + t.appendChild(n), + (this.feFuncRComposed = this.createFeFunc('feFuncR', n)), + (this.feFuncGComposed = this.createFeFunc('feFuncG', n)), + (this.feFuncBComposed = this.createFeFunc('feFuncB', n))); + } + function SVGDropShadowEffect(t, e) { + var r = e.container.globalData.renderConfig.filterSize; + t.setAttribute('x', r.x), + t.setAttribute('y', r.y), + t.setAttribute('width', r.width), + t.setAttribute('height', r.height), + (this.filterManager = e); + var n = createNS('feGaussianBlur'); + n.setAttribute('in', 'SourceAlpha'), + n.setAttribute('result', 'drop_shadow_1'), + n.setAttribute('stdDeviation', '0'), + (this.feGaussianBlur = n), + t.appendChild(n); + var i = createNS('feOffset'); + i.setAttribute('dx', '25'), + i.setAttribute('dy', '0'), + i.setAttribute('in', 'drop_shadow_1'), + i.setAttribute('result', 'drop_shadow_2'), + (this.feOffset = i), + t.appendChild(i); + var a = createNS('feFlood'); + a.setAttribute('flood-color', '#00ff00'), + a.setAttribute('flood-opacity', '1'), + a.setAttribute('result', 'drop_shadow_3'), + (this.feFlood = a), + t.appendChild(a); + var s = createNS('feComposite'); + s.setAttribute('in', 'drop_shadow_3'), + s.setAttribute('in2', 'drop_shadow_2'), + s.setAttribute('operator', 'in'), + s.setAttribute('result', 'drop_shadow_4'), + t.appendChild(s); + var o, + h = createNS('feMerge'); + t.appendChild(h), + (o = createNS('feMergeNode')), + h.appendChild(o), + (o = createNS('feMergeNode')).setAttribute('in', 'SourceGraphic'), + (this.feMergeNode = o), + (this.feMerge = h), + (this.originalNodeAdded = !1), + h.appendChild(o); + } + (ShapeTransformManager.prototype = { + addTransformSequence: function (t) { + var e, + r = t.length, + n = '_'; + for (e = 0; e < r; e += 1) n += t[e].transform.key + '_'; + var i = this.sequences[n]; + return ( + i || + ((i = { transforms: [].concat(t), finalTransform: new Matrix(), _mdf: !1 }), + (this.sequences[n] = i), + this.sequenceList.push(i)), + i + ); + }, + processSequence: function (t, e) { + for (var r, n = 0, i = t.transforms.length, a = e; n < i && !e; ) { + if (t.transforms[n].transform.mProps._mdf) { + a = !0; + break; + } + n += 1; + } + if (a) + for (t.finalTransform.reset(), n = i - 1; 0 <= n; n -= 1) + (r = t.transforms[n].transform.mProps.v.props), + t.finalTransform.transform( + r[0], + r[1], + r[2], + r[3], + r[4], + r[5], + r[6], + r[7], + r[8], + r[9], + r[10], + r[11], + r[12], + r[13], + r[14], + r[15], + ); + t._mdf = a; + }, + processSequences: function (t) { + var e, + r = this.sequenceList.length; + for (e = 0; e < r; e += 1) this.processSequence(this.sequenceList[e], t); + }, + getNewKey: function () { + return (this.transform_key_count += 1), '_' + this.transform_key_count; + }, + }), + (CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated), + (BaseElement.prototype = { + checkMasks: function () { + if (!this.data.hasMask) return !1; + for (var t = 0, e = this.data.masksProperties.length; t < e; ) { + if ( + 'n' !== this.data.masksProperties[t].mode && + !1 !== this.data.masksProperties[t].cl + ) + return !0; + t += 1; + } + return !1; + }, + initExpressions: function () { + (this.layerInterface = LayerExpressionInterface(this)), + this.data.hasMask && + this.maskManager && + this.layerInterface.registerMaskInterface(this.maskManager); + var t = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface); + this.layerInterface.registerEffectsInterface(t), + 0 === this.data.ty || this.data.xt + ? (this.compInterface = CompExpressionInterface(this)) + : 4 === this.data.ty + ? ((this.layerInterface.shapeInterface = ShapeExpressionInterface( + this.shapesData, + this.itemsData, + this.layerInterface, + )), + (this.layerInterface.content = this.layerInterface.shapeInterface)) + : 5 === this.data.ty && + ((this.layerInterface.textInterface = TextExpressionInterface(this)), + (this.layerInterface.text = this.layerInterface.textInterface)); + }, + setBlendMode: function () { + var t = getBlendMode(this.data.bm); + (this.baseElement || this.layerElement).style['mix-blend-mode'] = t; + }, + initBaseData: function (t, e, r) { + (this.globalData = e), + (this.comp = r), + (this.data = t), + (this.layerId = createElementID()), + this.data.sr || (this.data.sr = 1), + (this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties)); + }, + getType: function () { + return this.type; + }, + sourceRectAtTime: function () {}, + }), + (NullElement.prototype.prepareFrame = function (t) { + this.prepareProperties(t, !0); + }), + (NullElement.prototype.renderFrame = function () {}), + (NullElement.prototype.getBaseElement = function () { + return null; + }), + (NullElement.prototype.destroy = function () {}), + (NullElement.prototype.sourceRectAtTime = function () {}), + (NullElement.prototype.hide = function () {}), + extendPrototype( + [BaseElement, TransformElement, HierarchyElement, FrameElement], + NullElement, + ), + (SVGBaseElement.prototype = { + initRendererElement: function () { + this.layerElement = createNS('g'); + }, + createContainerElements: function () { + (this.matteElement = createNS('g')), + (this.transformedElement = this.layerElement), + (this.maskedElement = this.layerElement), + (this._sizeChanged = !1); + var t, + e, + r, + n = null; + if (this.data.td) { + if (3 == this.data.td || 1 == this.data.td) { + var i = createNS('mask'); + i.setAttribute('id', this.layerId), + i.setAttribute('mask-type', 3 == this.data.td ? 'luminance' : 'alpha'), + i.appendChild(this.layerElement), + (n = i), + this.globalData.defs.appendChild(i), + featureSupport.maskType || + 1 != this.data.td || + (i.setAttribute('mask-type', 'luminance'), + (t = createElementID()), + (e = filtersFactory.createFilter(t)), + this.globalData.defs.appendChild(e), + e.appendChild(filtersFactory.createAlphaToLuminanceFilter()), + (r = createNS('g')).appendChild(this.layerElement), + (n = r), + i.appendChild(r), + r.setAttribute('filter', 'url(' + locationHref + '#' + t + ')')); + } else if (2 == this.data.td) { + var a = createNS('mask'); + a.setAttribute('id', this.layerId), a.setAttribute('mask-type', 'alpha'); + var s = createNS('g'); + a.appendChild(s), (t = createElementID()), (e = filtersFactory.createFilter(t)); + var o = createNS('feComponentTransfer'); + o.setAttribute('in', 'SourceGraphic'), e.appendChild(o); + var h = createNS('feFuncA'); + h.setAttribute('type', 'table'), + h.setAttribute('tableValues', '1.0 0.0'), + o.appendChild(h), + this.globalData.defs.appendChild(e); + var l = createNS('rect'); + l.setAttribute('width', this.comp.data.w), + l.setAttribute('height', this.comp.data.h), + l.setAttribute('x', '0'), + l.setAttribute('y', '0'), + l.setAttribute('fill', '#ffffff'), + l.setAttribute('opacity', '0'), + s.setAttribute('filter', 'url(' + locationHref + '#' + t + ')'), + s.appendChild(l), + s.appendChild(this.layerElement), + (n = s), + featureSupport.maskType || + (a.setAttribute('mask-type', 'luminance'), + e.appendChild(filtersFactory.createAlphaToLuminanceFilter()), + (r = createNS('g')), + s.appendChild(l), + r.appendChild(this.layerElement), + (n = r), + s.appendChild(r)), + this.globalData.defs.appendChild(a); + } + } else + this.data.tt + ? (this.matteElement.appendChild(this.layerElement), + (n = this.matteElement), + (this.baseElement = this.matteElement)) + : (this.baseElement = this.layerElement); + if ( + (this.data.ln && this.layerElement.setAttribute('id', this.data.ln), + this.data.cl && this.layerElement.setAttribute('class', this.data.cl), + 0 === this.data.ty && !this.data.hd) + ) { + var c = createNS('clipPath'), + u = createNS('path'); + u.setAttribute( + 'd', + 'M0,0 L' + + this.data.w + + ',0 L' + + this.data.w + + ',' + + this.data.h + + ' L0,' + + this.data.h + + 'z', + ); + var f = createElementID(); + if ( + (c.setAttribute('id', f), + c.appendChild(u), + this.globalData.defs.appendChild(c), + this.checkMasks()) + ) { + var p = createNS('g'); + p.setAttribute('clip-path', 'url(' + locationHref + '#' + f + ')'), + p.appendChild(this.layerElement), + (this.transformedElement = p), + n + ? n.appendChild(this.transformedElement) + : (this.baseElement = this.transformedElement); + } else + this.layerElement.setAttribute( + 'clip-path', + 'url(' + locationHref + '#' + f + ')', + ); + } + 0 !== this.data.bm && this.setBlendMode(); + }, + renderElement: function () { + this.finalTransform._matMdf && + this.transformedElement.setAttribute( + 'transform', + this.finalTransform.mat.to2dCSS(), + ), + this.finalTransform._opMdf && + this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v); + }, + destroyBaseElement: function () { + (this.layerElement = null), (this.matteElement = null), this.maskManager.destroy(); + }, + getBaseElement: function () { + return this.data.hd ? null : this.baseElement; + }, + createRenderableComponents: function () { + (this.maskManager = new MaskElement(this.data, this, this.globalData)), + (this.renderableEffectsManager = new SVGEffects(this)); + }, + setMatte: function (t) { + this.matteElement && + this.matteElement.setAttribute('mask', 'url(' + locationHref + '#' + t + ')'); + }, + }), + (IShapeElement.prototype = { + addShapeToModifiers: function (t) { + var e, + r = this.shapeModifiers.length; + for (e = 0; e < r; e += 1) this.shapeModifiers[e].addShape(t); + }, + isShapeInAnimatedModifiers: function (t) { + for (var e = this.shapeModifiers.length; 0 < e; ) + if (this.shapeModifiers[0].isAnimatedWithShape(t)) return !0; + return !1; + }, + renderModifiers: function () { + if (this.shapeModifiers.length) { + var t, + e = this.shapes.length; + for (t = 0; t < e; t += 1) this.shapes[t].sh.reset(); + for ( + t = (e = this.shapeModifiers.length) - 1; + 0 <= t && !this.shapeModifiers[t].processShapes(this._isFirstFrame); + t -= 1 + ); + } + }, + searchProcessedElement: function (t) { + for (var e = this.processedElements, r = 0, n = e.length; r < n; ) { + if (e[r].elem === t) return e[r].pos; + r += 1; + } + return 0; + }, + addProcessedElement: function (t, e) { + for (var r = this.processedElements, n = r.length; n; ) + if (r[(n -= 1)].elem === t) return void (r[n].pos = e); + r.push(new ProcessedElement(t, e)); + }, + prepareFrame: function (t) { + this.prepareRenderableFrame(t), this.prepareProperties(t, this.isInRange); + }, + }), + (ITextElement.prototype.initElement = function (t, e, r) { + (this.lettersChangedFlag = !0), + this.initFrame(), + this.initBaseData(t, e, r), + (this.textProperty = new TextProperty(this, t.t, this.dynamicProperties)), + (this.textAnimator = new TextAnimatorProperty(t.t, this.renderType, this)), + this.initTransform(t, e, r), + this.initHierarchy(), + this.initRenderable(), + this.initRendererElement(), + this.createContainerElements(), + this.createRenderableComponents(), + this.createContent(), + this.hide(), + this.textAnimator.searchProperties(this.dynamicProperties); + }), + (ITextElement.prototype.prepareFrame = function (t) { + (this._mdf = !1), + this.prepareRenderableFrame(t), + this.prepareProperties(t, this.isInRange), + (this.textProperty._mdf || this.textProperty._isFirstFrame) && + (this.buildNewText(), + (this.textProperty._isFirstFrame = !1), + (this.textProperty._mdf = !1)); + }), + (ITextElement.prototype.createPathShape = function (t, e) { + var r, + n, + i = e.length, + a = ''; + for (r = 0; r < i; r += 1) + (n = e[r].ks.k), (a += buildShapeString(n, n.i.length, !0, t)); + return a; + }), + (ITextElement.prototype.updateDocumentData = function (t, e) { + this.textProperty.updateDocumentData(t, e); + }), + (ITextElement.prototype.canResizeFont = function (t) { + this.textProperty.canResizeFont(t); + }), + (ITextElement.prototype.setMinimumFontSize = function (t) { + this.textProperty.setMinimumFontSize(t); + }), + (ITextElement.prototype.applyTextPropertiesToMatrix = function (t, e, r, n, i) { + switch ( + (t.ps && e.translate(t.ps[0], t.ps[1] + t.ascent, 0), e.translate(0, -t.ls, 0), t.j) + ) { + case 1: + e.translate(t.justifyOffset + (t.boxWidth - t.lineWidths[r]), 0, 0); + break; + case 2: + e.translate(t.justifyOffset + (t.boxWidth - t.lineWidths[r]) / 2, 0, 0); + } + e.translate(n, i, 0); + }), + (ITextElement.prototype.buildColor = function (t) { + return ( + 'rgb(' + + Math.round(255 * t[0]) + + ',' + + Math.round(255 * t[1]) + + ',' + + Math.round(255 * t[2]) + + ')' + ); + }), + (ITextElement.prototype.emptyProp = new LetterProps()), + (ITextElement.prototype.destroy = function () {}), + extendPrototype( + [BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], + ICompElement, + ), + (ICompElement.prototype.initElement = function (t, e, r) { + this.initFrame(), + this.initBaseData(t, e, r), + this.initTransform(t, e, r), + this.initRenderable(), + this.initHierarchy(), + this.initRendererElement(), + this.createContainerElements(), + this.createRenderableComponents(), + (!this.data.xt && e.progressiveLoad) || this.buildAllItems(), + this.hide(); + }), + (ICompElement.prototype.prepareFrame = function (t) { + if ( + ((this._mdf = !1), + this.prepareRenderableFrame(t), + this.prepareProperties(t, this.isInRange), + this.isInRange || this.data.xt) + ) { + if (this.tm._placeholder) this.renderedFrame = t / this.data.sr; + else { + var e = this.tm.v; + e === this.data.op && (e = this.data.op - 1), (this.renderedFrame = e); + } + var r, + n = this.elements.length; + for ( + this.completeLayers || this.checkLayers(this.renderedFrame), r = n - 1; + 0 <= r; + r -= 1 + ) + (this.completeLayers || this.elements[r]) && + (this.elements[r].prepareFrame(this.renderedFrame - this.layers[r].st), + this.elements[r]._mdf && (this._mdf = !0)); + } + }), + (ICompElement.prototype.renderInnerContent = function () { + var t, + e = this.layers.length; + for (t = 0; t < e; t += 1) + (this.completeLayers || this.elements[t]) && this.elements[t].renderFrame(); + }), + (ICompElement.prototype.setElements = function (t) { + this.elements = t; + }), + (ICompElement.prototype.getElements = function () { + return this.elements; + }), + (ICompElement.prototype.destroyElements = function () { + var t, + e = this.layers.length; + for (t = 0; t < e; t += 1) this.elements[t] && this.elements[t].destroy(); + }), + (ICompElement.prototype.destroy = function () { + this.destroyElements(), this.destroyBaseElement(); + }), + extendPrototype( + [ + BaseElement, + TransformElement, + SVGBaseElement, + HierarchyElement, + FrameElement, + RenderableDOMElement, + ], + IImageElement, + ), + (IImageElement.prototype.createContent = function () { + var t = this.globalData.getAssetsPath(this.assetData); + (this.innerElem = createNS('image')), + this.innerElem.setAttribute('width', this.assetData.w + 'px'), + this.innerElem.setAttribute('height', this.assetData.h + 'px'), + this.innerElem.setAttribute( + 'preserveAspectRatio', + this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio, + ), + this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', t), + this.layerElement.appendChild(this.innerElem); + }), + (IImageElement.prototype.sourceRectAtTime = function () { + return this.sourceRect; + }), + extendPrototype([IImageElement], ISolidElement), + (ISolidElement.prototype.createContent = function () { + var t = createNS('rect'); + t.setAttribute('width', this.data.sw), + t.setAttribute('height', this.data.sh), + t.setAttribute('fill', this.data.sc), + this.layerElement.appendChild(t); + }), + (AudioElement.prototype.prepareFrame = function (t) { + if ( + (this.prepareRenderableFrame(t, !0), + this.prepareProperties(t, !0), + this.tm._placeholder) + ) + this._currentTime = t / this.data.sr; + else { + var e = this.tm.v; + this._currentTime = e; + } + }), + extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement), + (AudioElement.prototype.renderFrame = function () { + this.isInRange && + this._canPlay && + (this._isPlaying + ? (!this.audio.playing() || + 0.1 < + Math.abs( + this._currentTime / this.globalData.frameRate - this.audio.seek(), + )) && + this.audio.seek(this._currentTime / this.globalData.frameRate) + : (this.audio.play(), + this.audio.seek(this._currentTime / this.globalData.frameRate), + (this._isPlaying = !0))); + }), + (AudioElement.prototype.show = function () {}), + (AudioElement.prototype.hide = function () { + this.audio.pause(), (this._isPlaying = !1); + }), + (AudioElement.prototype.pause = function () { + this.audio.pause(), (this._isPlaying = !1), (this._canPlay = !1); + }), + (AudioElement.prototype.resume = function () { + this._canPlay = !0; + }), + (AudioElement.prototype.setRate = function (t) { + this.audio.rate(t); + }), + (AudioElement.prototype.volume = function (t) { + this.audio.volume(t); + }), + (AudioElement.prototype.getBaseElement = function () { + return null; + }), + (AudioElement.prototype.destroy = function () {}), + (AudioElement.prototype.sourceRectAtTime = function () {}), + (AudioElement.prototype.initExpressions = function () {}), + (FootageElement.prototype.prepareFrame = function () {}), + extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement), + (FootageElement.prototype.getBaseElement = function () { + return null; + }), + (FootageElement.prototype.renderFrame = function () {}), + (FootageElement.prototype.destroy = function () {}), + (FootageElement.prototype.initExpressions = function () { + this.layerInterface = FootageInterface(this); + }), + (FootageElement.prototype.getFootageData = function () { + return this.footageData; + }), + extendPrototype([SVGRenderer, ICompElement, SVGBaseElement], SVGCompElement), + extendPrototype( + [ + BaseElement, + TransformElement, + SVGBaseElement, + HierarchyElement, + FrameElement, + RenderableDOMElement, + ITextElement, + ], + SVGTextLottieElement, + ), + (SVGTextLottieElement.prototype.createContent = function () { + this.data.singleShape && + !this.globalData.fontManager.chars && + (this.textContainer = createNS('text')); + }), + (SVGTextLottieElement.prototype.buildTextContents = function (t) { + for (var e = 0, r = t.length, n = [], i = ''; e < r; ) + t[e] === String.fromCharCode(13) || t[e] === String.fromCharCode(3) + ? (n.push(i), (i = '')) + : (i += t[e]), + (e += 1); + return n.push(i), n; + }), + (SVGTextLottieElement.prototype.buildNewText = function () { + var t, + e, + r = this.textProperty.currentData; + (this.renderedLetters = createSizedArray(r ? r.l.length : 0)), + r.fc + ? this.layerElement.setAttribute('fill', this.buildColor(r.fc)) + : this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)'), + r.sc && + (this.layerElement.setAttribute('stroke', this.buildColor(r.sc)), + this.layerElement.setAttribute('stroke-width', r.sw)), + this.layerElement.setAttribute('font-size', r.finalSize); + var n = this.globalData.fontManager.getFontByName(r.f); + if (n.fClass) this.layerElement.setAttribute('class', n.fClass); + else { + this.layerElement.setAttribute('font-family', n.fFamily); + var i = r.fWeight, + a = r.fStyle; + this.layerElement.setAttribute('font-style', a), + this.layerElement.setAttribute('font-weight', i); + } + this.layerElement.setAttribute('aria-label', r.t); + var s, + o = r.l || [], + h = !!this.globalData.fontManager.chars; + e = o.length; + var l, + c = this.mHelper, + u = '', + f = this.data.singleShape, + p = 0, + d = 0, + m = !0, + v = 0.001 * r.tr * r.finalSize; + if (!f || h || r.sz) { + var y, + g, + E = this.textSpans.length; + for (t = 0; t < e; t += 1) + (h && f && 0 !== t) || + ((s = t < E ? this.textSpans[t] : createNS(h ? 'path' : 'text')), + E <= t && + (s.setAttribute('stroke-linecap', 'butt'), + s.setAttribute('stroke-linejoin', 'round'), + s.setAttribute('stroke-miterlimit', '4'), + (this.textSpans[t] = s), + this.layerElement.appendChild(s)), + (s.style.display = 'inherit')), + c.reset(), + c.scale(r.finalSize / 100, r.finalSize / 100), + f && + (o[t].n && ((p = -v), (d += r.yOffset), (d += m ? 1 : 0), (m = !1)), + this.applyTextPropertiesToMatrix(r, c, o[t].line, p, d), + (p += o[t].l || 0), + (p += v)), + h + ? ((l = (y = + ((g = this.globalData.fontManager.getCharData( + r.finalText[t], + n.fStyle, + this.globalData.fontManager.getFontByName(r.f).fFamily, + )) && + g.data) || + {}).shapes + ? y.shapes[0].it + : []), + f + ? (u += this.createPathShape(c, l)) + : s.setAttribute('d', this.createPathShape(c, l))) + : (f && + s.setAttribute( + 'transform', + 'translate(' + c.props[12] + ',' + c.props[13] + ')', + ), + (s.textContent = o[t].val), + s.setAttributeNS( + 'http://www.w3.org/XML/1998/namespace', + 'xml:space', + 'preserve', + )); + f && s && s.setAttribute('d', u); + } else { + var b = this.textContainer, + _ = 'start'; + switch (r.j) { + case 1: + _ = 'end'; + break; + case 2: + _ = 'middle'; + break; + default: + _ = 'start'; + } + b.setAttribute('text-anchor', _), b.setAttribute('letter-spacing', v); + var x = this.buildTextContents(r.finalText); + for (e = x.length, d = r.ps ? r.ps[1] + r.ascent : 0, t = 0; t < e; t += 1) + ((s = this.textSpans[t] || createNS('tspan')).textContent = x[t]), + s.setAttribute('x', 0), + s.setAttribute('y', d), + (s.style.display = 'inherit'), + b.appendChild(s), + (this.textSpans[t] = s), + (d += r.finalLineHeight); + this.layerElement.appendChild(b); + } + for (; t < this.textSpans.length; ) + (this.textSpans[t].style.display = 'none'), (t += 1); + this._sizeChanged = !0; + }), + (SVGTextLottieElement.prototype.sourceRectAtTime = function () { + if ( + (this.prepareFrame(this.comp.renderedFrame - this.data.st), + this.renderInnerContent(), + this._sizeChanged) + ) { + this._sizeChanged = !1; + var t = this.layerElement.getBBox(); + this.bbox = { top: t.y, left: t.x, width: t.width, height: t.height }; + } + return this.bbox; + }), + (SVGTextLottieElement.prototype.renderInnerContent = function () { + if ( + !this.data.singleShape && + (this.textAnimator.getMeasures( + this.textProperty.currentData, + this.lettersChangedFlag, + ), + this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) + ) { + var t, e; + this._sizeChanged = !0; + var r, + n, + i = this.textAnimator.renderedLetters, + a = this.textProperty.currentData.l; + for (e = a.length, t = 0; t < e; t += 1) + a[t].n || + ((r = i[t]), + (n = this.textSpans[t]), + r._mdf.m && n.setAttribute('transform', r.m), + r._mdf.o && n.setAttribute('opacity', r.o), + r._mdf.sw && n.setAttribute('stroke-width', r.sw), + r._mdf.sc && n.setAttribute('stroke', r.sc), + r._mdf.fc && n.setAttribute('fill', r.fc)); + } + }), + extendPrototype( + [ + BaseElement, + TransformElement, + SVGBaseElement, + IShapeElement, + HierarchyElement, + FrameElement, + RenderableDOMElement, + ], + SVGShapeElement, + ), + (SVGShapeElement.prototype.initSecondaryElement = function () {}), + (SVGShapeElement.prototype.identityMatrix = new Matrix()), + (SVGShapeElement.prototype.buildExpressionInterface = function () {}), + (SVGShapeElement.prototype.createContent = function () { + this.searchShapes( + this.shapesData, + this.itemsData, + this.prevViewData, + this.layerElement, + 0, + [], + !0, + ), + this.filterUniqueShapes(); + }), + (SVGShapeElement.prototype.filterUniqueShapes = function () { + var t, + e, + r, + n, + i = this.shapes.length, + a = this.stylesList.length, + s = [], + o = !1; + for (r = 0; r < a; r += 1) { + for (n = this.stylesList[r], o = !1, t = s.length = 0; t < i; t += 1) + -1 !== (e = this.shapes[t]).styles.indexOf(n) && + (s.push(e), (o = e._isAnimated || o)); + 1 < s.length && o && this.setShapesAsAnimated(s); + } + }), + (SVGShapeElement.prototype.setShapesAsAnimated = function (t) { + var e, + r = t.length; + for (e = 0; e < r; e += 1) t[e].setAsAnimated(); + }), + (SVGShapeElement.prototype.createStyleElement = function (t, e) { + var r, + n = new SVGStyleData(t, e), + i = n.pElem; + return ( + 'st' === t.ty + ? (r = new SVGStrokeStyleData(this, t, n)) + : 'fl' === t.ty + ? (r = new SVGFillStyleData(this, t, n)) + : ('gf' !== t.ty && 'gs' !== t.ty) || + ((r = new ('gf' === t.ty ? SVGGradientFillStyleData : SVGGradientStrokeStyleData)( + this, + t, + n, + )), + this.globalData.defs.appendChild(r.gf), + r.maskId && + (this.globalData.defs.appendChild(r.ms), + this.globalData.defs.appendChild(r.of), + i.setAttribute('mask', 'url(' + locationHref + '#' + r.maskId + ')'))), + ('st' !== t.ty && 'gs' !== t.ty) || + (i.setAttribute('stroke-linecap', lineCapEnum[t.lc || 2]), + i.setAttribute('stroke-linejoin', lineJoinEnum[t.lj || 2]), + i.setAttribute('fill-opacity', '0'), + 1 === t.lj && i.setAttribute('stroke-miterlimit', t.ml)), + 2 === t.r && i.setAttribute('fill-rule', 'evenodd'), + t.ln && i.setAttribute('id', t.ln), + t.cl && i.setAttribute('class', t.cl), + t.bm && (i.style['mix-blend-mode'] = getBlendMode(t.bm)), + this.stylesList.push(n), + this.addToAnimatedContents(t, r), + r + ); + }), + (SVGShapeElement.prototype.createGroupElement = function (t) { + var e = new ShapeGroupData(); + return ( + t.ln && e.gr.setAttribute('id', t.ln), + t.cl && e.gr.setAttribute('class', t.cl), + t.bm && (e.gr.style['mix-blend-mode'] = getBlendMode(t.bm)), + e + ); + }), + (SVGShapeElement.prototype.createTransformElement = function (t, e) { + var r = TransformPropertyFactory.getTransformProperty(this, t, this), + n = new SVGTransformData(r, r.o, e); + return this.addToAnimatedContents(t, n), n; + }), + (SVGShapeElement.prototype.createShapeElement = function (t, e, r) { + var n = 4; + 'rc' === t.ty ? (n = 5) : 'el' === t.ty ? (n = 6) : 'sr' === t.ty && (n = 7); + var i = new SVGShapeData(e, r, ShapePropertyFactory.getShapeProp(this, t, n, this)); + return ( + this.shapes.push(i), this.addShapeToModifiers(i), this.addToAnimatedContents(t, i), i + ); + }), + (SVGShapeElement.prototype.addToAnimatedContents = function (t, e) { + for (var r = 0, n = this.animatedContents.length; r < n; ) { + if (this.animatedContents[r].element === e) return; + r += 1; + } + this.animatedContents.push({ + fn: SVGElementsRenderer.createRenderFunction(t), + element: e, + data: t, + }); + }), + (SVGShapeElement.prototype.setElementStyles = function (t) { + var e, + r = t.styles, + n = this.stylesList.length; + for (e = 0; e < n; e += 1) this.stylesList[e].closed || r.push(this.stylesList[e]); + }), + (SVGShapeElement.prototype.reloadShapes = function () { + var t; + this._isFirstFrame = !0; + var e = this.itemsData.length; + for (t = 0; t < e; t += 1) this.prevViewData[t] = this.itemsData[t]; + for ( + this.searchShapes( + this.shapesData, + this.itemsData, + this.prevViewData, + this.layerElement, + 0, + [], + !0, + ), + this.filterUniqueShapes(), + e = this.dynamicProperties.length, + t = 0; + t < e; + t += 1 + ) + this.dynamicProperties[t].getValue(); + this.renderModifiers(); + }), + (SVGShapeElement.prototype.searchShapes = function (t, e, r, n, i, a, s) { + var o, + h, + l, + c, + u, + f, + p = [].concat(a), + d = t.length - 1, + m = [], + v = []; + for (o = d; 0 <= o; o -= 1) { + if ( + ((f = this.searchProcessedElement(t[o])) ? (e[o] = r[f - 1]) : (t[o]._render = s), + 'fl' === t[o].ty || 'st' === t[o].ty || 'gf' === t[o].ty || 'gs' === t[o].ty) + ) + f ? (e[o].style.closed = !1) : (e[o] = this.createStyleElement(t[o], i)), + t[o]._render && n.appendChild(e[o].style.pElem), + m.push(e[o].style); + else if ('gr' === t[o].ty) { + if (f) + for (l = e[o].it.length, h = 0; h < l; h += 1) e[o].prevViewData[h] = e[o].it[h]; + else e[o] = this.createGroupElement(t[o]); + this.searchShapes(t[o].it, e[o].it, e[o].prevViewData, e[o].gr, i + 1, p, s), + t[o]._render && n.appendChild(e[o].gr); + } else + 'tr' === t[o].ty + ? (f || (e[o] = this.createTransformElement(t[o], n)), + (c = e[o].transform), + p.push(c)) + : 'sh' === t[o].ty || 'rc' === t[o].ty || 'el' === t[o].ty || 'sr' === t[o].ty + ? (f || (e[o] = this.createShapeElement(t[o], p, i)), this.setElementStyles(e[o])) + : 'tm' === t[o].ty || 'rd' === t[o].ty || 'ms' === t[o].ty || 'pb' === t[o].ty + ? (f + ? ((u = e[o]).closed = !1) + : ((u = ShapeModifiers.getModifier(t[o].ty)).init(this, t[o]), + (e[o] = u), + this.shapeModifiers.push(u)), + v.push(u)) + : 'rp' === t[o].ty && + (f + ? ((u = e[o]).closed = !0) + : ((u = ShapeModifiers.getModifier(t[o].ty)), + (e[o] = u).init(this, t, o, e), + this.shapeModifiers.push(u), + (s = !1)), + v.push(u)); + this.addProcessedElement(t[o], o + 1); + } + for (d = m.length, o = 0; o < d; o += 1) m[o].closed = !0; + for (d = v.length, o = 0; o < d; o += 1) v[o].closed = !0; + }), + (SVGShapeElement.prototype.renderInnerContent = function () { + var t; + this.renderModifiers(); + var e = this.stylesList.length; + for (t = 0; t < e; t += 1) this.stylesList[t].reset(); + for (this.renderShape(), t = 0; t < e; t += 1) + (this.stylesList[t]._mdf || this._isFirstFrame) && + (this.stylesList[t].msElem && + (this.stylesList[t].msElem.setAttribute('d', this.stylesList[t].d), + (this.stylesList[t].d = 'M0 0' + this.stylesList[t].d)), + this.stylesList[t].pElem.setAttribute('d', this.stylesList[t].d || 'M0 0')); + }), + (SVGShapeElement.prototype.renderShape = function () { + var t, + e, + r = this.animatedContents.length; + for (t = 0; t < r; t += 1) + (e = this.animatedContents[t]), + (this._isFirstFrame || e.element._isAnimated) && + !0 !== e.data && + e.fn(e.data, e.element, this._isFirstFrame); + }), + (SVGShapeElement.prototype.destroy = function () { + this.destroyBaseElement(), (this.shapesData = null), (this.itemsData = null); + }), + (SVGTintFilter.prototype.renderFrame = function (t) { + if (t || this.filterManager._mdf) { + var e = this.filterManager.effectElements[0].p.v, + r = this.filterManager.effectElements[1].p.v, + n = this.filterManager.effectElements[2].p.v / 100; + this.matrixFilter.setAttribute( + 'values', + r[0] - + e[0] + + ' 0 0 0 ' + + e[0] + + ' ' + + (r[1] - e[1]) + + ' 0 0 0 ' + + e[1] + + ' ' + + (r[2] - e[2]) + + ' 0 0 0 ' + + e[2] + + ' 0 0 0 ' + + n + + ' 0', + ); + } + }), + (SVGFillFilter.prototype.renderFrame = function (t) { + if (t || this.filterManager._mdf) { + var e = this.filterManager.effectElements[2].p.v, + r = this.filterManager.effectElements[6].p.v; + this.matrixFilter.setAttribute( + 'values', + '0 0 0 0 ' + e[0] + ' 0 0 0 0 ' + e[1] + ' 0 0 0 0 ' + e[2] + ' 0 0 0 ' + r + ' 0', + ); + } + }), + (SVGGaussianBlurEffect.prototype.renderFrame = function (t) { + if (t || this.filterManager._mdf) { + var e = 0.3 * this.filterManager.effectElements[0].p.v, + r = this.filterManager.effectElements[1].p.v, + n = 3 == r ? 0 : e, + i = 2 == r ? 0 : e; + this.feGaussianBlur.setAttribute('stdDeviation', n + ' ' + i); + var a = 1 == this.filterManager.effectElements[2].p.v ? 'wrap' : 'duplicate'; + this.feGaussianBlur.setAttribute('edgeMode', a); + } + }), + (SVGStrokeEffect.prototype.initialize = function () { + var t, + e, + r, + n, + i = this.elem.layerElement.children || this.elem.layerElement.childNodes; + for ( + 1 === this.filterManager.effectElements[1].p.v + ? ((n = this.elem.maskManager.masksProperties.length), (r = 0)) + : (n = 1 + (r = this.filterManager.effectElements[0].p.v - 1)), + (e = createNS('g')).setAttribute('fill', 'none'), + e.setAttribute('stroke-linecap', 'round'), + e.setAttribute('stroke-dashoffset', 1); + r < n; + r += 1 + ) + (t = createNS('path')), e.appendChild(t), this.paths.push({ p: t, m: r }); + if (3 === this.filterManager.effectElements[10].p.v) { + var a = createNS('mask'), + s = createElementID(); + a.setAttribute('id', s), + a.setAttribute('mask-type', 'alpha'), + a.appendChild(e), + this.elem.globalData.defs.appendChild(a); + var o = createNS('g'); + for (o.setAttribute('mask', 'url(' + locationHref + '#' + s + ')'); i[0]; ) + o.appendChild(i[0]); + this.elem.layerElement.appendChild(o), + (this.masker = a), + e.setAttribute('stroke', '#fff'); + } else if ( + 1 === this.filterManager.effectElements[10].p.v || + 2 === this.filterManager.effectElements[10].p.v + ) { + if (2 === this.filterManager.effectElements[10].p.v) + for ( + i = this.elem.layerElement.children || this.elem.layerElement.childNodes; + i.length; + + ) + this.elem.layerElement.removeChild(i[0]); + this.elem.layerElement.appendChild(e), + this.elem.layerElement.removeAttribute('mask'), + e.setAttribute('stroke', '#fff'); + } + (this.initialized = !0), (this.pathMasker = e); + }), + (SVGStrokeEffect.prototype.renderFrame = function (t) { + var e; + this.initialized || this.initialize(); + var r, + n, + i = this.paths.length; + for (e = 0; e < i; e += 1) + if ( + -1 !== this.paths[e].m && + ((r = this.elem.maskManager.viewData[this.paths[e].m]), + (n = this.paths[e].p), + (t || this.filterManager._mdf || r.prop._mdf) && n.setAttribute('d', r.lastPath), + t || + this.filterManager.effectElements[9].p._mdf || + this.filterManager.effectElements[4].p._mdf || + this.filterManager.effectElements[7].p._mdf || + this.filterManager.effectElements[8].p._mdf || + r.prop._mdf) + ) { + var a; + if ( + 0 !== this.filterManager.effectElements[7].p.v || + 100 !== this.filterManager.effectElements[8].p.v + ) { + var s = + 0.01 * + Math.min( + this.filterManager.effectElements[7].p.v, + this.filterManager.effectElements[8].p.v, + ), + o = + 0.01 * + Math.max( + this.filterManager.effectElements[7].p.v, + this.filterManager.effectElements[8].p.v, + ), + h = n.getTotalLength(); + a = '0 0 0 ' + h * s + ' '; + var l, + c = h * (o - s), + u = + 1 + + 2 * + this.filterManager.effectElements[4].p.v * + this.filterManager.effectElements[9].p.v * + 0.01, + f = Math.floor(c / u); + for (l = 0; l < f; l += 1) + a += + '1 ' + + 2 * + this.filterManager.effectElements[4].p.v * + this.filterManager.effectElements[9].p.v * + 0.01 + + ' '; + a += '0 ' + 10 * h + ' 0 0'; + } else + a = + '1 ' + + 2 * + this.filterManager.effectElements[4].p.v * + this.filterManager.effectElements[9].p.v * + 0.01; + n.setAttribute('stroke-dasharray', a); + } + if ( + ((t || this.filterManager.effectElements[4].p._mdf) && + this.pathMasker.setAttribute( + 'stroke-width', + 2 * this.filterManager.effectElements[4].p.v, + ), + (t || this.filterManager.effectElements[6].p._mdf) && + this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v), + (1 === this.filterManager.effectElements[10].p.v || + 2 === this.filterManager.effectElements[10].p.v) && + (t || this.filterManager.effectElements[3].p._mdf)) + ) { + var p = this.filterManager.effectElements[3].p.v; + this.pathMasker.setAttribute( + 'stroke', + 'rgb(' + + bmFloor(255 * p[0]) + + ',' + + bmFloor(255 * p[1]) + + ',' + + bmFloor(255 * p[2]) + + ')', + ); + } + }), + (SVGTritoneFilter.prototype.renderFrame = function (t) { + if (t || this.filterManager._mdf) { + var e = this.filterManager.effectElements[0].p.v, + r = this.filterManager.effectElements[1].p.v, + n = this.filterManager.effectElements[2].p.v, + i = n[0] + ' ' + r[0] + ' ' + e[0], + a = n[1] + ' ' + r[1] + ' ' + e[1], + s = n[2] + ' ' + r[2] + ' ' + e[2]; + this.feFuncR.setAttribute('tableValues', i), + this.feFuncG.setAttribute('tableValues', a), + this.feFuncB.setAttribute('tableValues', s); + } + }), + (SVGProLevelsFilter.prototype.createFeFunc = function (t, e) { + var r = createNS(t); + return r.setAttribute('type', 'table'), e.appendChild(r), r; + }), + (SVGProLevelsFilter.prototype.getTableValue = function (t, e, r, n, i) { + for ( + var a, + s, + o = 0, + h = Math.min(t, e), + l = Math.max(t, e), + c = Array.call(null, { length: 256 }), + u = 0, + f = i - n, + p = e - t; + o <= 256; + + ) + (s = + (a = o / 256) <= h + ? p < 0 + ? i + : n + : l <= a + ? p < 0 + ? n + : i + : n + f * Math.pow((a - t) / p, 1 / r)), + (c[u] = s), + (u += 1), + (o += 256 / 255); + return c.join(' '); + }), + (SVGProLevelsFilter.prototype.renderFrame = function (t) { + if (t || this.filterManager._mdf) { + var e, + r = this.filterManager.effectElements; + this.feFuncRComposed && + (t || r[3].p._mdf || r[4].p._mdf || r[5].p._mdf || r[6].p._mdf || r[7].p._mdf) && + ((e = this.getTableValue(r[3].p.v, r[4].p.v, r[5].p.v, r[6].p.v, r[7].p.v)), + this.feFuncRComposed.setAttribute('tableValues', e), + this.feFuncGComposed.setAttribute('tableValues', e), + this.feFuncBComposed.setAttribute('tableValues', e)), + this.feFuncR && + (t || + r[10].p._mdf || + r[11].p._mdf || + r[12].p._mdf || + r[13].p._mdf || + r[14].p._mdf) && + ((e = this.getTableValue(r[10].p.v, r[11].p.v, r[12].p.v, r[13].p.v, r[14].p.v)), + this.feFuncR.setAttribute('tableValues', e)), + this.feFuncG && + (t || + r[17].p._mdf || + r[18].p._mdf || + r[19].p._mdf || + r[20].p._mdf || + r[21].p._mdf) && + ((e = this.getTableValue(r[17].p.v, r[18].p.v, r[19].p.v, r[20].p.v, r[21].p.v)), + this.feFuncG.setAttribute('tableValues', e)), + this.feFuncB && + (t || + r[24].p._mdf || + r[25].p._mdf || + r[26].p._mdf || + r[27].p._mdf || + r[28].p._mdf) && + ((e = this.getTableValue(r[24].p.v, r[25].p.v, r[26].p.v, r[27].p.v, r[28].p.v)), + this.feFuncB.setAttribute('tableValues', e)), + this.feFuncA && + (t || + r[31].p._mdf || + r[32].p._mdf || + r[33].p._mdf || + r[34].p._mdf || + r[35].p._mdf) && + ((e = this.getTableValue(r[31].p.v, r[32].p.v, r[33].p.v, r[34].p.v, r[35].p.v)), + this.feFuncA.setAttribute('tableValues', e)); + } + }), + (SVGDropShadowEffect.prototype.renderFrame = function (t) { + if (t || this.filterManager._mdf) { + if ( + ((t || this.filterManager.effectElements[4].p._mdf) && + this.feGaussianBlur.setAttribute( + 'stdDeviation', + this.filterManager.effectElements[4].p.v / 4, + ), + t || this.filterManager.effectElements[0].p._mdf) + ) { + var e = this.filterManager.effectElements[0].p.v; + this.feFlood.setAttribute( + 'flood-color', + rgbToHex(Math.round(255 * e[0]), Math.round(255 * e[1]), Math.round(255 * e[2])), + ); + } + if ( + ((t || this.filterManager.effectElements[1].p._mdf) && + this.feFlood.setAttribute( + 'flood-opacity', + this.filterManager.effectElements[1].p.v / 255, + ), + t || + this.filterManager.effectElements[2].p._mdf || + this.filterManager.effectElements[3].p._mdf) + ) { + var r = this.filterManager.effectElements[3].p.v, + n = (this.filterManager.effectElements[2].p.v - 90) * degToRads, + i = r * Math.cos(n), + a = r * Math.sin(n); + this.feOffset.setAttribute('dx', i), this.feOffset.setAttribute('dy', a); + } + } + }); + var _svgMatteSymbols = []; + function SVGMatte3Effect(t, e, r) { + (this.initialized = !1), + (this.filterManager = e), + (this.filterElem = t), + ((this.elem = r).matteElement = createNS('g')), + r.matteElement.appendChild(r.layerElement), + r.matteElement.appendChild(r.transformedElement), + (r.baseElement = r.matteElement); + } + function SVGEffects(t) { + var e, + r, + n = t.data.ef ? t.data.ef.length : 0, + i = createElementID(), + a = filtersFactory.createFilter(i, !0), + s = 0; + for (this.filters = [], e = 0; e < n; e += 1) + (r = null), + 20 === t.data.ef[e].ty + ? ((s += 1), (r = new SVGTintFilter(a, t.effectsManager.effectElements[e]))) + : 21 === t.data.ef[e].ty + ? ((s += 1), (r = new SVGFillFilter(a, t.effectsManager.effectElements[e]))) + : 22 === t.data.ef[e].ty + ? (r = new SVGStrokeEffect(t, t.effectsManager.effectElements[e])) + : 23 === t.data.ef[e].ty + ? ((s += 1), (r = new SVGTritoneFilter(a, t.effectsManager.effectElements[e]))) + : 24 === t.data.ef[e].ty + ? ((s += 1), (r = new SVGProLevelsFilter(a, t.effectsManager.effectElements[e]))) + : 25 === t.data.ef[e].ty + ? ((s += 1), (r = new SVGDropShadowEffect(a, t.effectsManager.effectElements[e]))) + : 28 === t.data.ef[e].ty + ? (r = new SVGMatte3Effect(a, t.effectsManager.effectElements[e], t)) + : 29 === t.data.ef[e].ty && + ((s += 1), + (r = new SVGGaussianBlurEffect(a, t.effectsManager.effectElements[e]))), + r && this.filters.push(r); + s && + (t.globalData.defs.appendChild(a), + t.layerElement.setAttribute('filter', 'url(' + locationHref + '#' + i + ')')), + this.filters.length && t.addRenderableComponent(this); + } + function CVContextData() { + var t; + for ( + this.saved = [], + this.cArrPos = 0, + this.cTr = new Matrix(), + this.cO = 1, + this.savedOp = createTypedArray('float32', 15), + t = 0; + t < 15; + t += 1 + ) + this.saved[t] = createTypedArray('float32', 16); + this._length = 15; + } + function CVBaseElement() {} + function CVImageElement(t, e, r) { + (this.assetData = e.getAssetData(t.refId)), + (this.img = e.imageLoader.getAsset(this.assetData)), + this.initElement(t, e, r); + } + function CVCompElement(t, e, r) { + (this.completeLayers = !1), + (this.layers = t.layers), + (this.pendingElements = []), + (this.elements = createSizedArray(this.layers.length)), + this.initElement(t, e, r), + (this.tm = t.tm + ? PropertyFactory.getProp(this, t.tm, 0, e.frameRate, this) + : { _placeholder: !0 }); + } + function CVMaskElement(t, e) { + var r; + (this.data = t), + (this.element = e), + (this.masksProperties = this.data.masksProperties || []), + (this.viewData = createSizedArray(this.masksProperties.length)); + var n = this.masksProperties.length, + i = !1; + for (r = 0; r < n; r += 1) + 'n' !== this.masksProperties[r].mode && (i = !0), + (this.viewData[r] = ShapePropertyFactory.getShapeProp( + this.element, + this.masksProperties[r], + 3, + )); + (this.hasMasks = i) && this.element.addRenderableComponent(this); + } + function CVShapeElement(t, e, r) { + (this.shapes = []), + (this.shapesData = t.shapes), + (this.stylesList = []), + (this.itemsData = []), + (this.prevViewData = []), + (this.shapeModifiers = []), + (this.processedElements = []), + (this.transformsManager = new ShapeTransformManager()), + this.initElement(t, e, r); + } + function CVSolidElement(t, e, r) { + this.initElement(t, e, r); + } + function CVTextElement(t, e, r) { + (this.textSpans = []), + (this.yOffset = 0), + (this.fillColorAnim = !1), + (this.strokeColorAnim = !1), + (this.strokeWidthAnim = !1), + (this.stroke = !1), + (this.fill = !1), + (this.justifyOffset = 0), + (this.currentRender = null), + (this.renderType = 'canvas'), + (this.values = { + fill: 'rgba(0,0,0,0)', + stroke: 'rgba(0,0,0,0)', + sWidth: 0, + fValue: '', + }), + this.initElement(t, e, r); + } + function CVEffects() {} + function HBaseElement() {} + function HSolidElement(t, e, r) { + this.initElement(t, e, r); + } + function HCompElement(t, e, r) { + (this.layers = t.layers), + (this.supports3d = !t.hasMask), + (this.completeLayers = !1), + (this.pendingElements = []), + (this.elements = this.layers ? createSizedArray(this.layers.length) : []), + this.initElement(t, e, r), + (this.tm = t.tm + ? PropertyFactory.getProp(this, t.tm, 0, e.frameRate, this) + : { _placeholder: !0 }); + } + function HShapeElement(t, e, r) { + (this.shapes = []), + (this.shapesData = t.shapes), + (this.stylesList = []), + (this.shapeModifiers = []), + (this.itemsData = []), + (this.processedElements = []), + (this.animatedContents = []), + (this.shapesContainer = createNS('g')), + this.initElement(t, e, r), + (this.prevViewData = []), + (this.currentBBox = { x: 999999, y: -999999, h: 0, w: 0 }); + } + function HTextElement(t, e, r) { + (this.textSpans = []), + (this.textPaths = []), + (this.currentBBox = { x: 999999, y: -999999, h: 0, w: 0 }), + (this.renderType = 'svg'), + (this.isMasked = !1), + this.initElement(t, e, r); + } + function HImageElement(t, e, r) { + (this.assetData = e.getAssetData(t.refId)), this.initElement(t, e, r); + } + function HCameraElement(t, e, r) { + this.initFrame(), this.initBaseData(t, e, r), this.initHierarchy(); + var n = PropertyFactory.getProp; + if ( + ((this.pe = n(this, t.pe, 0, 0, this)), + t.ks.p.s + ? ((this.px = n(this, t.ks.p.x, 1, 0, this)), + (this.py = n(this, t.ks.p.y, 1, 0, this)), + (this.pz = n(this, t.ks.p.z, 1, 0, this))) + : (this.p = n(this, t.ks.p, 1, 0, this)), + t.ks.a && (this.a = n(this, t.ks.a, 1, 0, this)), + t.ks.or.k.length && t.ks.or.k[0].to) + ) { + var i, + a = t.ks.or.k.length; + for (i = 0; i < a; i += 1) (t.ks.or.k[i].to = null), (t.ks.or.k[i].ti = null); + } + (this.or = n(this, t.ks.or, 1, degToRads, this)), + (this.or.sh = !0), + (this.rx = n(this, t.ks.rx, 0, degToRads, this)), + (this.ry = n(this, t.ks.ry, 0, degToRads, this)), + (this.rz = n(this, t.ks.rz, 0, degToRads, this)), + (this.mat = new Matrix()), + (this._prevMat = new Matrix()), + (this._isFirstFrame = !0), + (this.finalTransform = { mProp: this }); + } + function HEffects() {} + (SVGMatte3Effect.prototype.findSymbol = function (t) { + for (var e = 0, r = _svgMatteSymbols.length; e < r; ) { + if (_svgMatteSymbols[e] === t) return _svgMatteSymbols[e]; + e += 1; + } + return null; + }), + (SVGMatte3Effect.prototype.replaceInParent = function (t, e) { + var r = t.layerElement.parentNode; + if (r) { + for (var n, i = r.children, a = 0, s = i.length; a < s && i[a] !== t.layerElement; ) + a += 1; + a <= s - 2 && (n = i[a + 1]); + var o = createNS('use'); + o.setAttribute('href', '#' + e), n ? r.insertBefore(o, n) : r.appendChild(o); + } + }), + (SVGMatte3Effect.prototype.setElementAsMask = function (t, e) { + if (!this.findSymbol(e)) { + var r = createElementID(), + n = createNS('mask'); + n.setAttribute('id', e.layerId), + n.setAttribute('mask-type', 'alpha'), + _svgMatteSymbols.push(e); + var i = t.globalData.defs; + i.appendChild(n); + var a = createNS('symbol'); + a.setAttribute('id', r), + this.replaceInParent(e, r), + a.appendChild(e.layerElement), + i.appendChild(a); + var s = createNS('use'); + s.setAttribute('href', '#' + r), n.appendChild(s), (e.data.hd = !1), e.show(); + } + t.setMatte(e.layerId); + }), + (SVGMatte3Effect.prototype.initialize = function () { + for ( + var t = this.filterManager.effectElements[0].p.v, + e = this.elem.comp.elements, + r = 0, + n = e.length; + r < n; + + ) + e[r] && e[r].data.ind === t && this.setElementAsMask(this.elem, e[r]), (r += 1); + this.initialized = !0; + }), + (SVGMatte3Effect.prototype.renderFrame = function () { + this.initialized || this.initialize(); + }), + (SVGEffects.prototype.renderFrame = function (t) { + var e, + r = this.filters.length; + for (e = 0; e < r; e += 1) this.filters[e].renderFrame(t); + }), + (CVContextData.prototype.duplicate = function () { + var t = 2 * this._length, + e = this.savedOp; + (this.savedOp = createTypedArray('float32', t)), this.savedOp.set(e); + var r = 0; + for (r = this._length; r < t; r += 1) this.saved[r] = createTypedArray('float32', 16); + this._length = t; + }), + (CVContextData.prototype.reset = function () { + (this.cArrPos = 0), this.cTr.reset(), (this.cO = 1); + }), + (CVBaseElement.prototype = { + createElements: function () {}, + initRendererElement: function () {}, + createContainerElements: function () { + (this.canvasContext = this.globalData.canvasContext), + (this.renderableEffectsManager = new CVEffects(this)); + }, + createContent: function () {}, + setBlendMode: function () { + var t = this.globalData; + if (t.blendMode !== this.data.bm) { + t.blendMode = this.data.bm; + var e = getBlendMode(this.data.bm); + t.canvasContext.globalCompositeOperation = e; + } + }, + createRenderableComponents: function () { + this.maskManager = new CVMaskElement(this.data, this); + }, + hideElement: function () { + this.hidden || (this.isInRange && !this.isTransparent) || (this.hidden = !0); + }, + showElement: function () { + this.isInRange && + !this.isTransparent && + ((this.hidden = !1), + (this._isFirstFrame = !0), + (this.maskManager._isFirstFrame = !0)); + }, + renderFrame: function () { + if (!this.hidden && !this.data.hd) { + this.renderTransform(), this.renderRenderable(), this.setBlendMode(); + var t = 0 === this.data.ty; + this.globalData.renderer.save(t), + this.globalData.renderer.ctxTransform(this.finalTransform.mat.props), + this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v), + this.renderInnerContent(), + this.globalData.renderer.restore(t), + this.maskManager.hasMasks && this.globalData.renderer.restore(!0), + this._isFirstFrame && (this._isFirstFrame = !1); + } + }, + destroy: function () { + (this.canvasContext = null), + (this.data = null), + (this.globalData = null), + this.maskManager.destroy(); + }, + mHelper: new Matrix(), + }), + (CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement), + (CVBaseElement.prototype.show = CVBaseElement.prototype.showElement), + extendPrototype( + [ + BaseElement, + TransformElement, + CVBaseElement, + HierarchyElement, + FrameElement, + RenderableElement, + ], + CVImageElement, + ), + (CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement), + (CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame), + (CVImageElement.prototype.createContent = function () { + if ( + this.img.width && + (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height) + ) { + var t = createTag('canvas'); + (t.width = this.assetData.w), (t.height = this.assetData.h); + var e, + r, + n = t.getContext('2d'), + i = this.img.width, + a = this.img.height, + s = i / a, + o = this.assetData.w / this.assetData.h, + h = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio; + (o < s && 'xMidYMid slice' === h) || (s < o && 'xMidYMid slice' !== h) + ? (e = (r = a) * o) + : (r = (e = i) / o), + n.drawImage( + this.img, + (i - e) / 2, + (a - r) / 2, + e, + r, + 0, + 0, + this.assetData.w, + this.assetData.h, + ), + (this.img = t); + } + }), + (CVImageElement.prototype.renderInnerContent = function () { + this.canvasContext.drawImage(this.img, 0, 0); + }), + (CVImageElement.prototype.destroy = function () { + this.img = null; + }), + extendPrototype([CanvasRenderer, ICompElement, CVBaseElement], CVCompElement), + (CVCompElement.prototype.renderInnerContent = function () { + var t, + e = this.canvasContext; + for ( + e.beginPath(), + e.moveTo(0, 0), + e.lineTo(this.data.w, 0), + e.lineTo(this.data.w, this.data.h), + e.lineTo(0, this.data.h), + e.lineTo(0, 0), + e.clip(), + t = this.layers.length - 1; + 0 <= t; + t -= 1 + ) + (this.completeLayers || this.elements[t]) && this.elements[t].renderFrame(); + }), + (CVCompElement.prototype.destroy = function () { + var t; + for (t = this.layers.length - 1; 0 <= t; t -= 1) + this.elements[t] && this.elements[t].destroy(); + (this.layers = null), (this.elements = null); + }), + (CVMaskElement.prototype.renderFrame = function () { + if (this.hasMasks) { + var t, + e, + r, + n, + i = this.element.finalTransform.mat, + a = this.element.canvasContext, + s = this.masksProperties.length; + for (a.beginPath(), t = 0; t < s; t += 1) + if ('n' !== this.masksProperties[t].mode) { + var o; + this.masksProperties[t].inv && + (a.moveTo(0, 0), + a.lineTo(this.element.globalData.compSize.w, 0), + a.lineTo( + this.element.globalData.compSize.w, + this.element.globalData.compSize.h, + ), + a.lineTo(0, this.element.globalData.compSize.h), + a.lineTo(0, 0)), + (n = this.viewData[t].v), + (e = i.applyToPointArray(n.v[0][0], n.v[0][1], 0)), + a.moveTo(e[0], e[1]); + var h = n._length; + for (o = 1; o < h; o += 1) + (r = i.applyToTriplePoints(n.o[o - 1], n.i[o], n.v[o])), + a.bezierCurveTo(r[0], r[1], r[2], r[3], r[4], r[5]); + (r = i.applyToTriplePoints(n.o[o - 1], n.i[0], n.v[0])), + a.bezierCurveTo(r[0], r[1], r[2], r[3], r[4], r[5]); + } + this.element.globalData.renderer.save(!0), a.clip(); + } + }), + (CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty), + (CVMaskElement.prototype.destroy = function () { + this.element = null; + }), + extendPrototype( + [ + BaseElement, + TransformElement, + CVBaseElement, + IShapeElement, + HierarchyElement, + FrameElement, + RenderableElement, + ], + CVShapeElement, + ), + (CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement), + (CVShapeElement.prototype.transformHelper = { opacity: 1, _opMdf: !1 }), + (CVShapeElement.prototype.dashResetter = []), + (CVShapeElement.prototype.createContent = function () { + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, !0, []); + }), + (CVShapeElement.prototype.createStyleElement = function (t, e) { + var r = { + data: t, + type: t.ty, + preTransforms: this.transformsManager.addTransformSequence(e), + transforms: [], + elements: [], + closed: !0 === t.hd, + }, + n = {}; + if ( + ('fl' === t.ty || 'st' === t.ty + ? ((n.c = PropertyFactory.getProp(this, t.c, 1, 255, this)), + n.c.k || + (r.co = + 'rgb(' + + bmFloor(n.c.v[0]) + + ',' + + bmFloor(n.c.v[1]) + + ',' + + bmFloor(n.c.v[2]) + + ')')) + : ('gf' !== t.ty && 'gs' !== t.ty) || + ((n.s = PropertyFactory.getProp(this, t.s, 1, null, this)), + (n.e = PropertyFactory.getProp(this, t.e, 1, null, this)), + (n.h = PropertyFactory.getProp(this, t.h || { k: 0 }, 0, 0.01, this)), + (n.a = PropertyFactory.getProp(this, t.a || { k: 0 }, 0, degToRads, this)), + (n.g = new GradientProperty(this, t.g, this))), + (n.o = PropertyFactory.getProp(this, t.o, 0, 0.01, this)), + 'st' === t.ty || 'gs' === t.ty) + ) { + if ( + ((r.lc = lineCapEnum[t.lc || 2]), + (r.lj = lineJoinEnum[t.lj || 2]), + 1 == t.lj && (r.ml = t.ml), + (n.w = PropertyFactory.getProp(this, t.w, 0, null, this)), + n.w.k || (r.wi = n.w.v), + t.d) + ) { + var i = new DashProperty(this, t.d, 'canvas', this); + (n.d = i), n.d.k || ((r.da = n.d.dashArray), (r.do = n.d.dashoffset[0])); + } + } else r.r = 2 === t.r ? 'evenodd' : 'nonzero'; + return this.stylesList.push(r), (n.style = r), n; + }), + (CVShapeElement.prototype.createGroupElement = function () { + return { it: [], prevViewData: [] }; + }), + (CVShapeElement.prototype.createTransformElement = function (t) { + return { + transform: { + opacity: 1, + _opMdf: !1, + key: this.transformsManager.getNewKey(), + op: PropertyFactory.getProp(this, t.o, 0, 0.01, this), + mProps: TransformPropertyFactory.getTransformProperty(this, t, this), + }, + }; + }), + (CVShapeElement.prototype.createShapeElement = function (t) { + var e = new CVShapeData(this, t, this.stylesList, this.transformsManager); + return this.shapes.push(e), this.addShapeToModifiers(e), e; + }), + (CVShapeElement.prototype.reloadShapes = function () { + var t; + this._isFirstFrame = !0; + var e = this.itemsData.length; + for (t = 0; t < e; t += 1) this.prevViewData[t] = this.itemsData[t]; + for ( + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, !0, []), + e = this.dynamicProperties.length, + t = 0; + t < e; + t += 1 + ) + this.dynamicProperties[t].getValue(); + this.renderModifiers(), this.transformsManager.processSequences(this._isFirstFrame); + }), + (CVShapeElement.prototype.addTransformToStyleList = function (t) { + var e, + r = this.stylesList.length; + for (e = 0; e < r; e += 1) + this.stylesList[e].closed || this.stylesList[e].transforms.push(t); + }), + (CVShapeElement.prototype.removeTransformFromStyleList = function () { + var t, + e = this.stylesList.length; + for (t = 0; t < e; t += 1) + this.stylesList[t].closed || this.stylesList[t].transforms.pop(); + }), + (CVShapeElement.prototype.closeStyles = function (t) { + var e, + r = t.length; + for (e = 0; e < r; e += 1) t[e].closed = !0; + }), + (CVShapeElement.prototype.searchShapes = function (t, e, r, n, i) { + var a, + s, + o, + h, + l, + c, + u = t.length - 1, + f = [], + p = [], + d = [].concat(i); + for (a = u; 0 <= a; a -= 1) { + if ( + ((h = this.searchProcessedElement(t[a])) + ? (e[a] = r[h - 1]) + : (t[a]._shouldRender = n), + 'fl' === t[a].ty || 'st' === t[a].ty || 'gf' === t[a].ty || 'gs' === t[a].ty) + ) + h ? (e[a].style.closed = !1) : (e[a] = this.createStyleElement(t[a], d)), + f.push(e[a].style); + else if ('gr' === t[a].ty) { + if (h) + for (o = e[a].it.length, s = 0; s < o; s += 1) e[a].prevViewData[s] = e[a].it[s]; + else e[a] = this.createGroupElement(t[a]); + this.searchShapes(t[a].it, e[a].it, e[a].prevViewData, n, d); + } else + 'tr' === t[a].ty + ? (h || ((c = this.createTransformElement(t[a])), (e[a] = c)), + d.push(e[a]), + this.addTransformToStyleList(e[a])) + : 'sh' === t[a].ty || 'rc' === t[a].ty || 'el' === t[a].ty || 'sr' === t[a].ty + ? h || (e[a] = this.createShapeElement(t[a])) + : 'tm' === t[a].ty || 'rd' === t[a].ty || 'pb' === t[a].ty + ? (h + ? ((l = e[a]).closed = !1) + : ((l = ShapeModifiers.getModifier(t[a].ty)).init(this, t[a]), + (e[a] = l), + this.shapeModifiers.push(l)), + p.push(l)) + : 'rp' === t[a].ty && + (h + ? ((l = e[a]).closed = !0) + : ((l = ShapeModifiers.getModifier(t[a].ty)), + (e[a] = l).init(this, t, a, e), + this.shapeModifiers.push(l), + (n = !1)), + p.push(l)); + this.addProcessedElement(t[a], a + 1); + } + for ( + this.removeTransformFromStyleList(), this.closeStyles(f), u = p.length, a = 0; + a < u; + a += 1 + ) + p[a].closed = !0; + }), + (CVShapeElement.prototype.renderInnerContent = function () { + (this.transformHelper.opacity = 1), + (this.transformHelper._opMdf = !1), + this.renderModifiers(), + this.transformsManager.processSequences(this._isFirstFrame), + this.renderShape(this.transformHelper, this.shapesData, this.itemsData, !0); + }), + (CVShapeElement.prototype.renderShapeTransform = function (t, e) { + (t._opMdf || e.op._mdf || this._isFirstFrame) && + ((e.opacity = t.opacity), (e.opacity *= e.op.v), (e._opMdf = !0)); + }), + (CVShapeElement.prototype.drawLayer = function () { + var t, + e, + r, + n, + i, + a, + s, + o, + h, + l = this.stylesList.length, + c = this.globalData.renderer, + u = this.globalData.canvasContext; + for (t = 0; t < l; t += 1) + if ( + (('st' !== (o = (h = this.stylesList[t]).type) && 'gs' !== o) || 0 !== h.wi) && + h.data._shouldRender && + 0 !== h.coOp && + 0 !== this.globalData.currentGlobalAlpha + ) { + for ( + c.save(), + a = h.elements, + 'st' === o || 'gs' === o + ? ((u.strokeStyle = 'st' === o ? h.co : h.grd), + (u.lineWidth = h.wi), + (u.lineCap = h.lc), + (u.lineJoin = h.lj), + (u.miterLimit = h.ml || 0)) + : (u.fillStyle = 'fl' === o ? h.co : h.grd), + c.ctxOpacity(h.coOp), + 'st' !== o && 'gs' !== o && u.beginPath(), + c.ctxTransform(h.preTransforms.finalTransform.props), + r = a.length, + e = 0; + e < r; + e += 1 + ) { + for ( + ('st' !== o && 'gs' !== o) || + (u.beginPath(), h.da && (u.setLineDash(h.da), (u.lineDashOffset = h.do))), + i = (s = a[e].trNodes).length, + n = 0; + n < i; + n += 1 + ) + 'm' === s[n].t + ? u.moveTo(s[n].p[0], s[n].p[1]) + : 'c' === s[n].t + ? u.bezierCurveTo( + s[n].pts[0], + s[n].pts[1], + s[n].pts[2], + s[n].pts[3], + s[n].pts[4], + s[n].pts[5], + ) + : u.closePath(); + ('st' !== o && 'gs' !== o) || + (u.stroke(), h.da && u.setLineDash(this.dashResetter)); + } + 'st' !== o && 'gs' !== o && u.fill(h.r), c.restore(); + } + }), + (CVShapeElement.prototype.renderShape = function (t, e, r, n) { + var i, a; + for (a = t, i = e.length - 1; 0 <= i; i -= 1) + 'tr' === e[i].ty + ? ((a = r[i].transform), this.renderShapeTransform(t, a)) + : 'sh' === e[i].ty || 'el' === e[i].ty || 'rc' === e[i].ty || 'sr' === e[i].ty + ? this.renderPath(e[i], r[i]) + : 'fl' === e[i].ty + ? this.renderFill(e[i], r[i], a) + : 'st' === e[i].ty + ? this.renderStroke(e[i], r[i], a) + : 'gf' === e[i].ty || 'gs' === e[i].ty + ? this.renderGradientFill(e[i], r[i], a) + : 'gr' === e[i].ty + ? this.renderShape(a, e[i].it, r[i].it) + : e[i].ty; + n && this.drawLayer(); + }), + (CVShapeElement.prototype.renderStyledShape = function (t, e) { + if (this._isFirstFrame || e._mdf || t.transforms._mdf) { + var r, + n, + i, + a = t.trNodes, + s = e.paths, + o = s._length; + a.length = 0; + var h = t.transforms.finalTransform; + for (i = 0; i < o; i += 1) { + var l = s.shapes[i]; + if (l && l.v) { + for (n = l._length, r = 1; r < n; r += 1) + 1 === r && a.push({ t: 'm', p: h.applyToPointArray(l.v[0][0], l.v[0][1], 0) }), + a.push({ t: 'c', pts: h.applyToTriplePoints(l.o[r - 1], l.i[r], l.v[r]) }); + 1 === n && a.push({ t: 'm', p: h.applyToPointArray(l.v[0][0], l.v[0][1], 0) }), + l.c && + n && + (a.push({ t: 'c', pts: h.applyToTriplePoints(l.o[r - 1], l.i[0], l.v[0]) }), + a.push({ t: 'z' })); + } + } + t.trNodes = a; + } + }), + (CVShapeElement.prototype.renderPath = function (t, e) { + if (!0 !== t.hd && t._shouldRender) { + var r, + n = e.styledShapes.length; + for (r = 0; r < n; r += 1) this.renderStyledShape(e.styledShapes[r], e.sh); + } + }), + (CVShapeElement.prototype.renderFill = function (t, e, r) { + var n = e.style; + (e.c._mdf || this._isFirstFrame) && + (n.co = + 'rgb(' + + bmFloor(e.c.v[0]) + + ',' + + bmFloor(e.c.v[1]) + + ',' + + bmFloor(e.c.v[2]) + + ')'), + (e.o._mdf || r._opMdf || this._isFirstFrame) && (n.coOp = e.o.v * r.opacity); + }), + (CVShapeElement.prototype.renderGradientFill = function (t, e, r) { + var n, + i = e.style; + if ( + !i.grd || + e.g._mdf || + e.s._mdf || + e.e._mdf || + (1 !== t.t && (e.h._mdf || e.a._mdf)) + ) { + var a, + s = this.globalData.canvasContext, + o = e.s.v, + h = e.e.v; + if (1 === t.t) n = s.createLinearGradient(o[0], o[1], h[0], h[1]); + else { + var l = Math.sqrt(Math.pow(o[0] - h[0], 2) + Math.pow(o[1] - h[1], 2)), + c = Math.atan2(h[1] - o[1], h[0] - o[0]), + u = e.h.v; + 1 <= u ? (u = 0.99) : u <= -1 && (u = -0.99); + var f = l * u, + p = Math.cos(c + e.a.v) * f + o[0], + d = Math.sin(c + e.a.v) * f + o[1]; + n = s.createRadialGradient(p, d, 0, o[0], o[1], l); + } + var m = t.g.p, + v = e.g.c, + y = 1; + for (a = 0; a < m; a += 1) + e.g._hasOpacity && e.g._collapsable && (y = e.g.o[2 * a + 1]), + n.addColorStop( + v[4 * a] / 100, + 'rgba(' + + v[4 * a + 1] + + ',' + + v[4 * a + 2] + + ',' + + v[4 * a + 3] + + ',' + + y + + ')', + ); + i.grd = n; + } + i.coOp = e.o.v * r.opacity; + }), + (CVShapeElement.prototype.renderStroke = function (t, e, r) { + var n = e.style, + i = e.d; + i && (i._mdf || this._isFirstFrame) && ((n.da = i.dashArray), (n.do = i.dashoffset[0])), + (e.c._mdf || this._isFirstFrame) && + (n.co = + 'rgb(' + + bmFloor(e.c.v[0]) + + ',' + + bmFloor(e.c.v[1]) + + ',' + + bmFloor(e.c.v[2]) + + ')'), + (e.o._mdf || r._opMdf || this._isFirstFrame) && (n.coOp = e.o.v * r.opacity), + (e.w._mdf || this._isFirstFrame) && (n.wi = e.w.v); + }), + (CVShapeElement.prototype.destroy = function () { + (this.shapesData = null), + (this.globalData = null), + (this.canvasContext = null), + (this.stylesList.length = 0), + (this.itemsData.length = 0); + }), + extendPrototype( + [ + BaseElement, + TransformElement, + CVBaseElement, + HierarchyElement, + FrameElement, + RenderableElement, + ], + CVSolidElement, + ), + (CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement), + (CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame), + (CVSolidElement.prototype.renderInnerContent = function () { + var t = this.canvasContext; + (t.fillStyle = this.data.sc), t.fillRect(0, 0, this.data.sw, this.data.sh); + }), + extendPrototype( + [ + BaseElement, + TransformElement, + CVBaseElement, + HierarchyElement, + FrameElement, + RenderableElement, + ITextElement, + ], + CVTextElement, + ), + (CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d')), + (CVTextElement.prototype.buildNewText = function () { + var t = this.textProperty.currentData; + this.renderedLetters = createSizedArray(t.l ? t.l.length : 0); + var e = !1; + t.fc + ? ((e = !0), (this.values.fill = this.buildColor(t.fc))) + : (this.values.fill = 'rgba(0,0,0,0)'), + (this.fill = e); + var r = !1; + t.sc && + ((r = !0), (this.values.stroke = this.buildColor(t.sc)), (this.values.sWidth = t.sw)); + var n, + i, + a, + s, + o, + h, + l, + c, + u, + f, + p, + d, + m = this.globalData.fontManager.getFontByName(t.f), + v = t.l, + y = this.mHelper; + (this.stroke = r), + (this.values.fValue = + t.finalSize + 'px ' + this.globalData.fontManager.getFontByName(t.f).fFamily), + (i = t.finalText.length); + var g = this.data.singleShape, + E = 0.001 * t.tr * t.finalSize, + b = 0, + _ = 0, + x = !0, + S = 0; + for (n = 0; n < i; n += 1) { + for ( + s = + ((a = this.globalData.fontManager.getCharData( + t.finalText[n], + m.fStyle, + this.globalData.fontManager.getFontByName(t.f).fFamily, + )) && + a.data) || + {}, + y.reset(), + g && v[n].n && ((b = -E), (_ += t.yOffset), (_ += x ? 1 : 0), (x = !1)), + u = (l = s.shapes ? s.shapes[0].it : []).length, + y.scale(t.finalSize / 100, t.finalSize / 100), + g && this.applyTextPropertiesToMatrix(t, y, v[n].line, b, _), + p = createSizedArray(u), + c = 0; + c < u; + c += 1 + ) { + for (h = l[c].ks.k.i.length, f = l[c].ks.k, d = [], o = 1; o < h; o += 1) + 1 === o && + d.push( + y.applyToX(f.v[0][0], f.v[0][1], 0), + y.applyToY(f.v[0][0], f.v[0][1], 0), + ), + d.push( + y.applyToX(f.o[o - 1][0], f.o[o - 1][1], 0), + y.applyToY(f.o[o - 1][0], f.o[o - 1][1], 0), + y.applyToX(f.i[o][0], f.i[o][1], 0), + y.applyToY(f.i[o][0], f.i[o][1], 0), + y.applyToX(f.v[o][0], f.v[o][1], 0), + y.applyToY(f.v[o][0], f.v[o][1], 0), + ); + d.push( + y.applyToX(f.o[o - 1][0], f.o[o - 1][1], 0), + y.applyToY(f.o[o - 1][0], f.o[o - 1][1], 0), + y.applyToX(f.i[0][0], f.i[0][1], 0), + y.applyToY(f.i[0][0], f.i[0][1], 0), + y.applyToX(f.v[0][0], f.v[0][1], 0), + y.applyToY(f.v[0][0], f.v[0][1], 0), + ), + (p[c] = d); + } + g && ((b += v[n].l), (b += E)), + this.textSpans[S] + ? (this.textSpans[S].elem = p) + : (this.textSpans[S] = { elem: p }), + (S += 1); + } + }), + (CVTextElement.prototype.renderInnerContent = function () { + var t, + e, + r, + n, + i, + a, + s = this.canvasContext; + (s.font = this.values.fValue), + (s.lineCap = 'butt'), + (s.lineJoin = 'miter'), + (s.miterLimit = 4), + this.data.singleShape || + this.textAnimator.getMeasures( + this.textProperty.currentData, + this.lettersChangedFlag, + ); + var o, + h = this.textAnimator.renderedLetters, + l = this.textProperty.currentData.l; + e = l.length; + var c, + u, + f = null, + p = null, + d = null; + for (t = 0; t < e; t += 1) + if (!l[t].n) { + if ( + ((o = h[t]) && + (this.globalData.renderer.save(), + this.globalData.renderer.ctxTransform(o.p), + this.globalData.renderer.ctxOpacity(o.o)), + this.fill) + ) { + for ( + o && o.fc + ? f !== o.fc && ((f = o.fc), (s.fillStyle = o.fc)) + : f !== this.values.fill && + ((f = this.values.fill), (s.fillStyle = this.values.fill)), + n = (c = this.textSpans[t].elem).length, + this.globalData.canvasContext.beginPath(), + r = 0; + r < n; + r += 1 + ) + for ( + a = (u = c[r]).length, + this.globalData.canvasContext.moveTo(u[0], u[1]), + i = 2; + i < a; + i += 6 + ) + this.globalData.canvasContext.bezierCurveTo( + u[i], + u[i + 1], + u[i + 2], + u[i + 3], + u[i + 4], + u[i + 5], + ); + this.globalData.canvasContext.closePath(), this.globalData.canvasContext.fill(); + } + if (this.stroke) { + for ( + o && o.sw + ? d !== o.sw && ((d = o.sw), (s.lineWidth = o.sw)) + : d !== this.values.sWidth && + ((d = this.values.sWidth), (s.lineWidth = this.values.sWidth)), + o && o.sc + ? p !== o.sc && ((p = o.sc), (s.strokeStyle = o.sc)) + : p !== this.values.stroke && + ((p = this.values.stroke), (s.strokeStyle = this.values.stroke)), + n = (c = this.textSpans[t].elem).length, + this.globalData.canvasContext.beginPath(), + r = 0; + r < n; + r += 1 + ) + for ( + a = (u = c[r]).length, + this.globalData.canvasContext.moveTo(u[0], u[1]), + i = 2; + i < a; + i += 6 + ) + this.globalData.canvasContext.bezierCurveTo( + u[i], + u[i + 1], + u[i + 2], + u[i + 3], + u[i + 4], + u[i + 5], + ); + this.globalData.canvasContext.closePath(), this.globalData.canvasContext.stroke(); + } + o && this.globalData.renderer.restore(); + } + }), + (CVEffects.prototype.renderFrame = function () {}), + (HBaseElement.prototype = { + checkBlendMode: function () {}, + initRendererElement: function () { + (this.baseElement = createTag(this.data.tg || 'div')), + this.data.hasMask + ? ((this.svgElement = createNS('svg')), + (this.layerElement = createNS('g')), + (this.maskedElement = this.layerElement), + this.svgElement.appendChild(this.layerElement), + this.baseElement.appendChild(this.svgElement)) + : (this.layerElement = this.baseElement), + styleDiv(this.baseElement); + }, + createContainerElements: function () { + (this.renderableEffectsManager = new CVEffects(this)), + (this.transformedElement = this.baseElement), + (this.maskedElement = this.layerElement), + this.data.ln && this.layerElement.setAttribute('id', this.data.ln), + this.data.cl && this.layerElement.setAttribute('class', this.data.cl), + 0 !== this.data.bm && this.setBlendMode(); + }, + renderElement: function () { + var t = this.transformedElement ? this.transformedElement.style : {}; + if (this.finalTransform._matMdf) { + var e = this.finalTransform.mat.toCSS(); + (t.transform = e), (t.webkitTransform = e); + } + this.finalTransform._opMdf && (t.opacity = this.finalTransform.mProp.o.v); + }, + renderFrame: function () { + this.data.hd || + this.hidden || + (this.renderTransform(), + this.renderRenderable(), + this.renderElement(), + this.renderInnerContent(), + this._isFirstFrame && (this._isFirstFrame = !1)); + }, + destroy: function () { + (this.layerElement = null), + (this.transformedElement = null), + this.matteElement && (this.matteElement = null), + this.maskManager && (this.maskManager.destroy(), (this.maskManager = null)); + }, + createRenderableComponents: function () { + this.maskManager = new MaskElement(this.data, this, this.globalData); + }, + addEffects: function () {}, + setMatte: function () {}, + }), + (HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement), + (HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy), + (HBaseElement.prototype.buildElementParenting = + HybridRenderer.prototype.buildElementParenting), + extendPrototype( + [ + BaseElement, + TransformElement, + HBaseElement, + HierarchyElement, + FrameElement, + RenderableDOMElement, + ], + HSolidElement, + ), + (HSolidElement.prototype.createContent = function () { + var t; + this.data.hasMask + ? ((t = createNS('rect')).setAttribute('width', this.data.sw), + t.setAttribute('height', this.data.sh), + t.setAttribute('fill', this.data.sc), + this.svgElement.setAttribute('width', this.data.sw), + this.svgElement.setAttribute('height', this.data.sh)) + : (((t = createTag('div')).style.width = this.data.sw + 'px'), + (t.style.height = this.data.sh + 'px'), + (t.style.backgroundColor = this.data.sc)), + this.layerElement.appendChild(t); + }), + extendPrototype([HybridRenderer, ICompElement, HBaseElement], HCompElement), + (HCompElement.prototype._createBaseContainerElements = + HCompElement.prototype.createContainerElements), + (HCompElement.prototype.createContainerElements = function () { + this._createBaseContainerElements(), + this.data.hasMask + ? (this.svgElement.setAttribute('width', this.data.w), + this.svgElement.setAttribute('height', this.data.h), + (this.transformedElement = this.baseElement)) + : (this.transformedElement = this.layerElement); + }), + (HCompElement.prototype.addTo3dContainer = function (t, e) { + for (var r, n = 0; n < e; ) + this.elements[n] && + this.elements[n].getBaseElement && + (r = this.elements[n].getBaseElement()), + (n += 1); + r ? this.layerElement.insertBefore(t, r) : this.layerElement.appendChild(t); + }), + extendPrototype( + [ + BaseElement, + TransformElement, + HSolidElement, + SVGShapeElement, + HBaseElement, + HierarchyElement, + FrameElement, + RenderableElement, + ], + HShapeElement, + ), + (HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent), + (HShapeElement.prototype.createContent = function () { + var t; + if (((this.baseElement.style.fontSize = 0), this.data.hasMask)) + this.layerElement.appendChild(this.shapesContainer), (t = this.svgElement); + else { + t = createNS('svg'); + var e = this.comp.data ? this.comp.data : this.globalData.compSize; + t.setAttribute('width', e.w), + t.setAttribute('height', e.h), + t.appendChild(this.shapesContainer), + this.layerElement.appendChild(t); + } + this.searchShapes( + this.shapesData, + this.itemsData, + this.prevViewData, + this.shapesContainer, + 0, + [], + !0, + ), + this.filterUniqueShapes(), + (this.shapeCont = t); + }), + (HShapeElement.prototype.getTransformedPoint = function (t, e) { + var r, + n = t.length; + for (r = 0; r < n; r += 1) e = t[r].mProps.v.applyToPointArray(e[0], e[1], 0); + return e; + }), + (HShapeElement.prototype.calculateShapeBoundingBox = function (t, e) { + var r, + n, + i, + a, + s, + o = t.sh.v, + h = t.transformers, + l = o._length; + if (!(l <= 1)) { + for (r = 0; r < l - 1; r += 1) + (n = this.getTransformedPoint(h, o.v[r])), + (i = this.getTransformedPoint(h, o.o[r])), + (a = this.getTransformedPoint(h, o.i[r + 1])), + (s = this.getTransformedPoint(h, o.v[r + 1])), + this.checkBounds(n, i, a, s, e); + o.c && + ((n = this.getTransformedPoint(h, o.v[r])), + (i = this.getTransformedPoint(h, o.o[r])), + (a = this.getTransformedPoint(h, o.i[0])), + (s = this.getTransformedPoint(h, o.v[0])), + this.checkBounds(n, i, a, s, e)); + } + }), + (HShapeElement.prototype.checkBounds = function (t, e, r, n, i) { + this.getBoundsOfCurve(t, e, r, n); + var a = this.shapeBoundingBox; + (i.x = bmMin(a.left, i.x)), + (i.xMax = bmMax(a.right, i.xMax)), + (i.y = bmMin(a.top, i.y)), + (i.yMax = bmMax(a.bottom, i.yMax)); + }), + (HShapeElement.prototype.shapeBoundingBox = { left: 0, right: 0, top: 0, bottom: 0 }), + (HShapeElement.prototype.tempBoundingBox = { + x: 0, + xMax: 0, + y: 0, + yMax: 0, + width: 0, + height: 0, + }), + (HShapeElement.prototype.getBoundsOfCurve = function (t, e, r, n) { + for ( + var i, + a, + s, + o, + h, + l, + c, + u = [ + [t[0], n[0]], + [t[1], n[1]], + ], + f = 0; + f < 2; + ++f + ) + (a = 6 * t[f] - 12 * e[f] + 6 * r[f]), + (i = -3 * t[f] + 9 * e[f] - 9 * r[f] + 3 * n[f]), + (s = 3 * e[f] - 3 * t[f]), + (a |= 0), + (s |= 0), + (0 == (i |= 0) && 0 === a) || + (0 === i + ? 0 < (o = -s / a) && o < 1 && u[f].push(this.calculateF(o, t, e, r, n, f)) + : 0 <= (h = a * a - 4 * s * i) && + (0 < (l = (-a + bmSqrt(h)) / (2 * i)) && + l < 1 && + u[f].push(this.calculateF(l, t, e, r, n, f)), + 0 < (c = (-a - bmSqrt(h)) / (2 * i)) && + c < 1 && + u[f].push(this.calculateF(c, t, e, r, n, f)))); + (this.shapeBoundingBox.left = bmMin.apply(null, u[0])), + (this.shapeBoundingBox.top = bmMin.apply(null, u[1])), + (this.shapeBoundingBox.right = bmMax.apply(null, u[0])), + (this.shapeBoundingBox.bottom = bmMax.apply(null, u[1])); + }), + (HShapeElement.prototype.calculateF = function (t, e, r, n, i, a) { + return ( + bmPow(1 - t, 3) * e[a] + + 3 * bmPow(1 - t, 2) * t * r[a] + + 3 * (1 - t) * bmPow(t, 2) * n[a] + + bmPow(t, 3) * i[a] + ); + }), + (HShapeElement.prototype.calculateBoundingBox = function (t, e) { + var r, + n = t.length; + for (r = 0; r < n; r += 1) + t[r] && t[r].sh + ? this.calculateShapeBoundingBox(t[r], e) + : t[r] && t[r].it && this.calculateBoundingBox(t[r].it, e); + }), + (HShapeElement.prototype.currentBoxContains = function (t) { + return ( + this.currentBBox.x <= t.x && + this.currentBBox.y <= t.y && + this.currentBBox.width + this.currentBBox.x >= t.x + t.width && + this.currentBBox.height + this.currentBBox.y >= t.y + t.height + ); + }), + (HShapeElement.prototype.renderInnerContent = function () { + if ((this._renderShapeFrame(), !this.hidden && (this._isFirstFrame || this._mdf))) { + var t = this.tempBoundingBox, + e = 999999; + if ( + ((t.x = e), + (t.xMax = -e), + (t.y = e), + (t.yMax = -e), + this.calculateBoundingBox(this.itemsData, t), + (t.width = t.xMax < t.x ? 0 : t.xMax - t.x), + (t.height = t.yMax < t.y ? 0 : t.yMax - t.y), + this.currentBoxContains(t)) + ) + return; + var r = !1; + if ( + (this.currentBBox.w !== t.width && + ((this.currentBBox.w = t.width), + this.shapeCont.setAttribute('width', t.width), + (r = !0)), + this.currentBBox.h !== t.height && + ((this.currentBBox.h = t.height), + this.shapeCont.setAttribute('height', t.height), + (r = !0)), + r || this.currentBBox.x !== t.x || this.currentBBox.y !== t.y) + ) { + (this.currentBBox.w = t.width), + (this.currentBBox.h = t.height), + (this.currentBBox.x = t.x), + (this.currentBBox.y = t.y), + this.shapeCont.setAttribute( + 'viewBox', + this.currentBBox.x + + ' ' + + this.currentBBox.y + + ' ' + + this.currentBBox.w + + ' ' + + this.currentBBox.h, + ); + var n = this.shapeCont.style, + i = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)'; + (n.transform = i), (n.webkitTransform = i); + } + } + }), + extendPrototype( + [ + BaseElement, + TransformElement, + HBaseElement, + HierarchyElement, + FrameElement, + RenderableDOMElement, + ITextElement, + ], + HTextElement, + ), + (HTextElement.prototype.createContent = function () { + if (((this.isMasked = this.checkMasks()), this.isMasked)) { + (this.renderType = 'svg'), + (this.compW = this.comp.data.w), + (this.compH = this.comp.data.h), + this.svgElement.setAttribute('width', this.compW), + this.svgElement.setAttribute('height', this.compH); + var t = createNS('g'); + this.maskedElement.appendChild(t), (this.innerElem = t); + } else (this.renderType = 'html'), (this.innerElem = this.layerElement); + this.checkParenting(); + }), + (HTextElement.prototype.buildNewText = function () { + var t = this.textProperty.currentData; + this.renderedLetters = createSizedArray(t.l ? t.l.length : 0); + var e = this.innerElem.style, + r = t.fc ? this.buildColor(t.fc) : 'rgba(0,0,0,0)'; + (e.fill = r), + (e.color = r), + t.sc && ((e.stroke = this.buildColor(t.sc)), (e.strokeWidth = t.sw + 'px')); + var n, + i, + a = this.globalData.fontManager.getFontByName(t.f); + if (!this.globalData.fontManager.chars) + if ( + ((e.fontSize = t.finalSize + 'px'), (e.lineHeight = t.finalSize + 'px'), a.fClass) + ) + this.innerElem.className = a.fClass; + else { + e.fontFamily = a.fFamily; + var s = t.fWeight, + o = t.fStyle; + (e.fontStyle = o), (e.fontWeight = s); + } + var h, + l, + c, + u = t.l; + i = u.length; + var f, + p = this.mHelper, + d = '', + m = 0; + for (n = 0; n < i; n += 1) { + if ( + (this.globalData.fontManager.chars + ? (this.textPaths[m] + ? (h = this.textPaths[m]) + : ((h = createNS('path')).setAttribute('stroke-linecap', lineCapEnum[1]), + h.setAttribute('stroke-linejoin', lineJoinEnum[2]), + h.setAttribute('stroke-miterlimit', '4')), + this.isMasked || + (this.textSpans[m] + ? (c = (l = this.textSpans[m]).children[0]) + : (((l = createTag('div')).style.lineHeight = 0), + (c = createNS('svg')).appendChild(h), + styleDiv(l)))) + : this.isMasked + ? (h = this.textPaths[m] ? this.textPaths[m] : createNS('text')) + : this.textSpans[m] + ? ((l = this.textSpans[m]), (h = this.textPaths[m])) + : (styleDiv((l = createTag('span'))), + styleDiv((h = createTag('span'))), + l.appendChild(h)), + this.globalData.fontManager.chars) + ) { + var v, + y = this.globalData.fontManager.getCharData( + t.finalText[n], + a.fStyle, + this.globalData.fontManager.getFontByName(t.f).fFamily, + ); + if ( + ((v = y ? y.data : null), + p.reset(), + v && + v.shapes && + ((f = v.shapes[0].it), + p.scale(t.finalSize / 100, t.finalSize / 100), + (d = this.createPathShape(p, f)), + h.setAttribute('d', d)), + this.isMasked) + ) + this.innerElem.appendChild(h); + else { + if ((this.innerElem.appendChild(l), v && v.shapes)) { + document.body.appendChild(c); + var g = c.getBBox(); + c.setAttribute('width', g.width + 2), + c.setAttribute('height', g.height + 2), + c.setAttribute( + 'viewBox', + g.x - 1 + ' ' + (g.y - 1) + ' ' + (g.width + 2) + ' ' + (g.height + 2), + ); + var E = c.style, + b = 'translate(' + (g.x - 1) + 'px,' + (g.y - 1) + 'px)'; + (E.transform = b), (E.webkitTransform = b), (u[n].yOffset = g.y - 1); + } else c.setAttribute('width', 1), c.setAttribute('height', 1); + l.appendChild(c); + } + } else if ( + ((h.textContent = u[n].val), + h.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve'), + this.isMasked) + ) + this.innerElem.appendChild(h); + else { + this.innerElem.appendChild(l); + var _ = h.style, + x = 'translate3d(0,' + -t.finalSize / 1.2 + 'px,0)'; + (_.transform = x), (_.webkitTransform = x); + } + this.isMasked ? (this.textSpans[m] = h) : (this.textSpans[m] = l), + (this.textSpans[m].style.display = 'block'), + (this.textPaths[m] = h), + (m += 1); + } + for (; m < this.textSpans.length; ) + (this.textSpans[m].style.display = 'none'), (m += 1); + }), + (HTextElement.prototype.renderInnerContent = function () { + var t; + if (this.data.singleShape) { + if (!this._isFirstFrame && !this.lettersChangedFlag) return; + if (this.isMasked && this.finalTransform._matMdf) { + this.svgElement.setAttribute( + 'viewBox', + -this.finalTransform.mProp.p.v[0] + + ' ' + + -this.finalTransform.mProp.p.v[1] + + ' ' + + this.compW + + ' ' + + this.compH, + ), + (t = this.svgElement.style); + var e = + 'translate(' + + -this.finalTransform.mProp.p.v[0] + + 'px,' + + -this.finalTransform.mProp.p.v[1] + + 'px)'; + (t.transform = e), (t.webkitTransform = e); + } + } + if ( + (this.textAnimator.getMeasures( + this.textProperty.currentData, + this.lettersChangedFlag, + ), + this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) + ) { + var r, + n, + i, + a, + s, + o = 0, + h = this.textAnimator.renderedLetters, + l = this.textProperty.currentData.l; + for (n = l.length, r = 0; r < n; r += 1) + l[r].n + ? (o += 1) + : ((a = this.textSpans[r]), + (s = this.textPaths[r]), + (i = h[o]), + (o += 1), + i._mdf.m && + (this.isMasked + ? a.setAttribute('transform', i.m) + : ((a.style.webkitTransform = i.m), (a.style.transform = i.m))), + (a.style.opacity = i.o), + i.sw && i._mdf.sw && s.setAttribute('stroke-width', i.sw), + i.sc && i._mdf.sc && s.setAttribute('stroke', i.sc), + i.fc && i._mdf.fc && (s.setAttribute('fill', i.fc), (s.style.color = i.fc))); + if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) { + var c = this.innerElem.getBBox(); + if ( + (this.currentBBox.w !== c.width && + ((this.currentBBox.w = c.width), + this.svgElement.setAttribute('width', c.width)), + this.currentBBox.h !== c.height && + ((this.currentBBox.h = c.height), + this.svgElement.setAttribute('height', c.height)), + this.currentBBox.w !== c.width + 2 || + this.currentBBox.h !== c.height + 2 || + this.currentBBox.x !== c.x - 1 || + this.currentBBox.y !== c.y - 1) + ) { + (this.currentBBox.w = c.width + 2), + (this.currentBBox.h = c.height + 2), + (this.currentBBox.x = c.x - 1), + (this.currentBBox.y = c.y - 1), + this.svgElement.setAttribute( + 'viewBox', + this.currentBBox.x + + ' ' + + this.currentBBox.y + + ' ' + + this.currentBBox.w + + ' ' + + this.currentBBox.h, + ), + (t = this.svgElement.style); + var u = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)'; + (t.transform = u), (t.webkitTransform = u); + } + } + } + }), + extendPrototype( + [ + BaseElement, + TransformElement, + HBaseElement, + HSolidElement, + HierarchyElement, + FrameElement, + RenderableElement, + ], + HImageElement, + ), + (HImageElement.prototype.createContent = function () { + var t = this.globalData.getAssetsPath(this.assetData), + e = new Image(); + this.data.hasMask + ? ((this.imageElem = createNS('image')), + this.imageElem.setAttribute('width', this.assetData.w + 'px'), + this.imageElem.setAttribute('height', this.assetData.h + 'px'), + this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', t), + this.layerElement.appendChild(this.imageElem), + this.baseElement.setAttribute('width', this.assetData.w), + this.baseElement.setAttribute('height', this.assetData.h)) + : this.layerElement.appendChild(e), + (e.crossOrigin = 'anonymous'), + (e.src = t), + this.data.ln && this.baseElement.setAttribute('id', this.data.ln); + }), + extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement), + (HCameraElement.prototype.setup = function () { + var t, + e, + r, + n, + i = this.comp.threeDElements.length; + for (t = 0; t < i; t += 1) + if ('3d' === (e = this.comp.threeDElements[t]).type) { + (r = e.perspectiveElem.style), (n = e.container.style); + var a = this.pe.v + 'px', + s = '0px 0px 0px', + o = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)'; + (r.perspective = a), + (r.webkitPerspective = a), + (n.transformOrigin = s), + (n.mozTransformOrigin = s), + (n.webkitTransformOrigin = s), + (r.transform = o), + (r.webkitTransform = o); + } + }), + (HCameraElement.prototype.createElements = function () {}), + (HCameraElement.prototype.hide = function () {}), + (HCameraElement.prototype.renderFrame = function () { + var t, + e, + r = this._isFirstFrame; + if (this.hierarchy) + for (e = this.hierarchy.length, t = 0; t < e; t += 1) + r = this.hierarchy[t].finalTransform.mProp._mdf || r; + if ( + r || + this.pe._mdf || + (this.p && this.p._mdf) || + (this.px && (this.px._mdf || this.py._mdf || this.pz._mdf)) || + this.rx._mdf || + this.ry._mdf || + this.rz._mdf || + this.or._mdf || + (this.a && this.a._mdf) + ) { + if ((this.mat.reset(), this.hierarchy)) + for (t = e = this.hierarchy.length - 1; 0 <= t; t -= 1) { + var n = this.hierarchy[t].finalTransform.mProp; + this.mat.translate(-n.p.v[0], -n.p.v[1], n.p.v[2]), + this.mat.rotateX(-n.or.v[0]).rotateY(-n.or.v[1]).rotateZ(n.or.v[2]), + this.mat.rotateX(-n.rx.v).rotateY(-n.ry.v).rotateZ(n.rz.v), + this.mat.scale(1 / n.s.v[0], 1 / n.s.v[1], 1 / n.s.v[2]), + this.mat.translate(n.a.v[0], n.a.v[1], n.a.v[2]); + } + if ( + (this.p + ? this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]) + : this.mat.translate(-this.px.v, -this.py.v, this.pz.v), + this.a) + ) { + var i; + i = this.p + ? [ + this.p.v[0] - this.a.v[0], + this.p.v[1] - this.a.v[1], + this.p.v[2] - this.a.v[2], + ] + : [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]]; + var a = Math.sqrt(Math.pow(i[0], 2) + Math.pow(i[1], 2) + Math.pow(i[2], 2)), + s = [i[0] / a, i[1] / a, i[2] / a], + o = Math.sqrt(s[2] * s[2] + s[0] * s[0]), + h = Math.atan2(s[1], o), + l = Math.atan2(s[0], -s[2]); + this.mat.rotateY(l).rotateX(-h); + } + this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v), + this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]), + this.mat.translate( + this.globalData.compSize.w / 2, + this.globalData.compSize.h / 2, + 0, + ), + this.mat.translate(0, 0, this.pe.v); + var c = !this._prevMat.equals(this.mat); + if ((c || this.pe._mdf) && this.comp.threeDElements) { + var u, f, p; + for (e = this.comp.threeDElements.length, t = 0; t < e; t += 1) + if ('3d' === (u = this.comp.threeDElements[t]).type) { + if (c) { + var d = this.mat.toCSS(); + ((p = u.container.style).transform = d), (p.webkitTransform = d); + } + this.pe._mdf && + (((f = u.perspectiveElem.style).perspective = this.pe.v + 'px'), + (f.webkitPerspective = this.pe.v + 'px')); + } + this.mat.clone(this._prevMat); + } + } + this._isFirstFrame = !1; + }), + (HCameraElement.prototype.prepareFrame = function (t) { + this.prepareProperties(t, !0); + }), + (HCameraElement.prototype.destroy = function () {}), + (HCameraElement.prototype.getBaseElement = function () { + return null; + }), + (HEffects.prototype.renderFrame = function () {}); + var animationManager = (function () { + var t = {}, + e = [], + r = 0, + n = 0, + i = 0, + a = !0, + s = !1; + function o(t) { + for (var r = 0, i = t.target; r < n; ) + e[r].animation === i && (e.splice(r, 1), (r -= 1), (n -= 1), i.isPaused || c()), + (r += 1); + } + function h(t, r) { + if (!t) return null; + for (var i = 0; i < n; ) { + if (e[i].elem === t && null !== e[i].elem) return e[i].animation; + i += 1; + } + var a = new AnimationItem(); + return u(a, t), a.setData(t, r), a; + } + function l() { + (i += 1), d(); + } + function c() { + i -= 1; + } + function u(t, r) { + t.addEventListener('destroy', o), + t.addEventListener('_active', l), + t.addEventListener('_idle', c), + e.push({ elem: r, animation: t }), + (n += 1); + } + function f(t) { + var o, + h = t - r; + for (o = 0; o < n; o += 1) e[o].animation.advanceTime(h); + (r = t), i && !s ? window.requestAnimationFrame(f) : (a = !0); + } + function p(t) { + (r = t), window.requestAnimationFrame(f); + } + function d() { + !s && i && a && (window.requestAnimationFrame(p), (a = !1)); + } + return ( + (t.registerAnimation = h), + (t.loadAnimation = function (t) { + var e = new AnimationItem(); + return u(e, null), e.setParams(t), e; + }), + (t.setSpeed = function (t, r) { + var i; + for (i = 0; i < n; i += 1) e[i].animation.setSpeed(t, r); + }), + (t.setDirection = function (t, r) { + var i; + for (i = 0; i < n; i += 1) e[i].animation.setDirection(t, r); + }), + (t.play = function (t) { + var r; + for (r = 0; r < n; r += 1) e[r].animation.play(t); + }), + (t.pause = function (t) { + var r; + for (r = 0; r < n; r += 1) e[r].animation.pause(t); + }), + (t.stop = function (t) { + var r; + for (r = 0; r < n; r += 1) e[r].animation.stop(t); + }), + (t.togglePause = function (t) { + var r; + for (r = 0; r < n; r += 1) e[r].animation.togglePause(t); + }), + (t.searchAnimations = function (t, e, r) { + var n, + i = [].concat( + [].slice.call(document.getElementsByClassName('lottie')), + [].slice.call(document.getElementsByClassName('bodymovin')), + ), + a = i.length; + for (n = 0; n < a; n += 1) r && i[n].setAttribute('data-bm-type', r), h(i[n], t); + if (e && 0 === a) { + r || (r = 'svg'); + var s = document.getElementsByTagName('body')[0]; + s.innerText = ''; + var o = createTag('div'); + (o.style.width = '100%'), + (o.style.height = '100%'), + o.setAttribute('data-bm-type', r), + s.appendChild(o), + h(o, t); + } + }), + (t.resize = function () { + var t; + for (t = 0; t < n; t += 1) e[t].animation.resize(); + }), + (t.goToAndStop = function (t, r, i) { + var a; + for (a = 0; a < n; a += 1) e[a].animation.goToAndStop(t, r, i); + }), + (t.destroy = function (t) { + var r; + for (r = n - 1; 0 <= r; r -= 1) e[r].animation.destroy(t); + }), + (t.freeze = function () { + s = !0; + }), + (t.unfreeze = function () { + (s = !1), d(); + }), + (t.setVolume = function (t, r) { + var i; + for (i = 0; i < n; i += 1) e[i].animation.setVolume(t, r); + }), + (t.mute = function (t) { + var r; + for (r = 0; r < n; r += 1) e[r].animation.mute(t); + }), + (t.unmute = function (t) { + var r; + for (r = 0; r < n; r += 1) e[r].animation.unmute(t); + }), + (t.getRegisteredAnimations = function () { + var t, + r = e.length, + n = []; + for (t = 0; t < r; t += 1) n.push(e[t].animation); + return n; + }), + t + ); + })(), + AnimationItem = function () { + (this._cbs = []), + (this.name = ''), + (this.path = ''), + (this.isLoaded = !1), + (this.currentFrame = 0), + (this.currentRawFrame = 0), + (this.firstFrame = 0), + (this.totalFrames = 0), + (this.frameRate = 0), + (this.frameMult = 0), + (this.playSpeed = 1), + (this.playDirection = 1), + (this.playCount = 0), + (this.animationData = {}), + (this.assets = []), + (this.isPaused = !0), + (this.autoplay = !1), + (this.loop = !0), + (this.renderer = null), + (this.animationID = createElementID()), + (this.assetsPath = ''), + (this.timeCompleted = 0), + (this.segmentPos = 0), + (this.isSubframeEnabled = subframeEnabled), + (this.segments = []), + (this._idle = !0), + (this._completedLoop = !1), + (this.projectInterface = ProjectInterface()), + (this.imagePreloader = new ImagePreloader()), + (this.audioController = audioControllerFactory()), + (this.markers = []); + }; + extendPrototype([BaseEvent], AnimationItem), + (AnimationItem.prototype.setParams = function (t) { + (t.wrapper || t.container) && (this.wrapper = t.wrapper || t.container); + var e = 'svg'; + switch ((t.animType ? (e = t.animType) : t.renderer && (e = t.renderer), e)) { + case 'canvas': + this.renderer = new CanvasRenderer(this, t.rendererSettings); + break; + case 'svg': + this.renderer = new SVGRenderer(this, t.rendererSettings); + break; + default: + this.renderer = new HybridRenderer(this, t.rendererSettings); + } + this.imagePreloader.setCacheType(e, this.renderer.globalData.defs), + this.renderer.setProjectInterface(this.projectInterface), + (this.animType = e), + '' === t.loop || null === t.loop || void 0 === t.loop || !0 === t.loop + ? (this.loop = !0) + : !1 === t.loop + ? (this.loop = !1) + : (this.loop = parseInt(t.loop, 10)), + (this.autoplay = !('autoplay' in t) || t.autoplay), + (this.name = t.name ? t.name : ''), + (this.autoloadSegments = + !Object.prototype.hasOwnProperty.call(t, 'autoloadSegments') || t.autoloadSegments), + (this.assetsPath = t.assetsPath), + (this.initialSegment = t.initialSegment), + t.audioFactory && this.audioController.setAudioFactory(t.audioFactory), + t.animationData + ? this.configAnimation(t.animationData) + : t.path && + (-1 !== t.path.lastIndexOf('\\') + ? (this.path = t.path.substr(0, t.path.lastIndexOf('\\') + 1)) + : (this.path = t.path.substr(0, t.path.lastIndexOf('/') + 1)), + (this.fileName = t.path.substr(t.path.lastIndexOf('/') + 1)), + (this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'))), + assetLoader.load( + t.path, + this.configAnimation.bind(this), + function () { + this.trigger('data_failed'); + }.bind(this), + )); + }), + (AnimationItem.prototype.setData = function (t, e) { + e && 'object' != typeof e && (e = JSON.parse(e)); + var r = { wrapper: t, animationData: e }, + n = t.attributes; + (r.path = n.getNamedItem('data-animation-path') + ? n.getNamedItem('data-animation-path').value + : n.getNamedItem('data-bm-path') + ? n.getNamedItem('data-bm-path').value + : n.getNamedItem('bm-path') + ? n.getNamedItem('bm-path').value + : ''), + (r.animType = n.getNamedItem('data-anim-type') + ? n.getNamedItem('data-anim-type').value + : n.getNamedItem('data-bm-type') + ? n.getNamedItem('data-bm-type').value + : n.getNamedItem('bm-type') + ? n.getNamedItem('bm-type').value + : n.getNamedItem('data-bm-renderer') + ? n.getNamedItem('data-bm-renderer').value + : n.getNamedItem('bm-renderer') + ? n.getNamedItem('bm-renderer').value + : 'canvas'); + var i = n.getNamedItem('data-anim-loop') + ? n.getNamedItem('data-anim-loop').value + : n.getNamedItem('data-bm-loop') + ? n.getNamedItem('data-bm-loop').value + : n.getNamedItem('bm-loop') + ? n.getNamedItem('bm-loop').value + : ''; + 'false' === i + ? (r.loop = !1) + : 'true' === i + ? (r.loop = !0) + : '' !== i && (r.loop = parseInt(i, 10)); + var a = n.getNamedItem('data-anim-autoplay') + ? n.getNamedItem('data-anim-autoplay').value + : n.getNamedItem('data-bm-autoplay') + ? n.getNamedItem('data-bm-autoplay').value + : !n.getNamedItem('bm-autoplay') || n.getNamedItem('bm-autoplay').value; + (r.autoplay = 'false' !== a), + (r.name = n.getNamedItem('data-name') + ? n.getNamedItem('data-name').value + : n.getNamedItem('data-bm-name') + ? n.getNamedItem('data-bm-name').value + : n.getNamedItem('bm-name') + ? n.getNamedItem('bm-name').value + : ''), + 'false' === + (n.getNamedItem('data-anim-prerender') + ? n.getNamedItem('data-anim-prerender').value + : n.getNamedItem('data-bm-prerender') + ? n.getNamedItem('data-bm-prerender').value + : n.getNamedItem('bm-prerender') + ? n.getNamedItem('bm-prerender').value + : '') && (r.prerender = !1), + this.setParams(r); + }), + (AnimationItem.prototype.includeLayers = function (t) { + t.op > this.animationData.op && + ((this.animationData.op = t.op), + (this.totalFrames = Math.floor(t.op - this.animationData.ip))); + var e, + r, + n = this.animationData.layers, + i = n.length, + a = t.layers, + s = a.length; + for (r = 0; r < s; r += 1) + for (e = 0; e < i; ) { + if (n[e].id === a[r].id) { + n[e] = a[r]; + break; + } + e += 1; + } + if ( + ((t.chars || t.fonts) && + (this.renderer.globalData.fontManager.addChars(t.chars), + this.renderer.globalData.fontManager.addFonts( + t.fonts, + this.renderer.globalData.defs, + )), + t.assets) + ) + for (i = t.assets.length, e = 0; e < i; e += 1) + this.animationData.assets.push(t.assets[e]); + (this.animationData.__complete = !1), + dataManager.completeData(this.animationData, this.renderer.globalData.fontManager), + this.renderer.includeLayers(t.layers), + expressionsPlugin && expressionsPlugin.initExpressions(this), + this.loadNextSegment(); + }), + (AnimationItem.prototype.loadNextSegment = function () { + var t = this.animationData.segments; + if (!t || 0 === t.length || !this.autoloadSegments) + return this.trigger('data_ready'), void (this.timeCompleted = this.totalFrames); + var e = t.shift(); + this.timeCompleted = e.time * this.frameRate; + var r = this.path + this.fileName + '_' + this.segmentPos + '.json'; + (this.segmentPos += 1), + assetLoader.load( + r, + this.includeLayers.bind(this), + function () { + this.trigger('data_failed'); + }.bind(this), + ); + }), + (AnimationItem.prototype.loadSegments = function () { + this.animationData.segments || (this.timeCompleted = this.totalFrames), + this.loadNextSegment(); + }), + (AnimationItem.prototype.imagesLoaded = function () { + this.trigger('loaded_images'), this.checkLoaded(); + }), + (AnimationItem.prototype.preloadImages = function () { + this.imagePreloader.setAssetsPath(this.assetsPath), + this.imagePreloader.setPath(this.path), + this.imagePreloader.loadAssets( + this.animationData.assets, + this.imagesLoaded.bind(this), + ); + }), + (AnimationItem.prototype.configAnimation = function (t) { + if (this.renderer) + try { + (this.animationData = t), + this.initialSegment + ? ((this.totalFrames = Math.floor( + this.initialSegment[1] - this.initialSegment[0], + )), + (this.firstFrame = Math.round(this.initialSegment[0]))) + : ((this.totalFrames = Math.floor( + this.animationData.op - this.animationData.ip, + )), + (this.firstFrame = Math.round(this.animationData.ip))), + this.renderer.configAnimation(t), + t.assets || (t.assets = []), + (this.assets = this.animationData.assets), + (this.frameRate = this.animationData.fr), + (this.frameMult = this.animationData.fr / 1e3), + this.renderer.searchExtraCompositions(t.assets), + (this.markers = markerParser(t.markers || [])), + this.trigger('config_ready'), + this.preloadImages(), + this.loadSegments(), + this.updaFrameModifier(), + this.waitForFontsLoaded(), + this.isPaused && this.audioController.pause(); + } catch (t) { + this.triggerConfigError(t); + } + }), + (AnimationItem.prototype.waitForFontsLoaded = function () { + this.renderer && + (this.renderer.globalData.fontManager.isLoaded + ? this.checkLoaded() + : setTimeout(this.waitForFontsLoaded.bind(this), 20)); + }), + (AnimationItem.prototype.checkLoaded = function () { + !this.isLoaded && + this.renderer.globalData.fontManager.isLoaded && + (this.imagePreloader.loadedImages() || 'canvas' !== this.renderer.rendererType) && + this.imagePreloader.loadedFootages() && + ((this.isLoaded = !0), + dataManager.completeData(this.animationData, this.renderer.globalData.fontManager), + expressionsPlugin && expressionsPlugin.initExpressions(this), + this.renderer.initItems(), + setTimeout( + function () { + this.trigger('DOMLoaded'); + }.bind(this), + 0, + ), + this.gotoFrame(), + this.autoplay && this.play()); + }), + (AnimationItem.prototype.resize = function () { + this.renderer.updateContainerSize(); + }), + (AnimationItem.prototype.setSubframe = function (t) { + this.isSubframeEnabled = !!t; + }), + (AnimationItem.prototype.gotoFrame = function () { + (this.currentFrame = this.isSubframeEnabled + ? this.currentRawFrame + : ~~this.currentRawFrame), + this.timeCompleted !== this.totalFrames && + this.currentFrame > this.timeCompleted && + (this.currentFrame = this.timeCompleted), + this.trigger('enterFrame'), + this.renderFrame(); + }), + (AnimationItem.prototype.renderFrame = function () { + if (!1 !== this.isLoaded && this.renderer) + try { + this.renderer.renderFrame(this.currentFrame + this.firstFrame); + } catch (t) { + this.triggerRenderFrameError(t); + } + }), + (AnimationItem.prototype.play = function (t) { + (t && this.name !== t) || + (!0 === this.isPaused && + ((this.isPaused = !1), + this.audioController.resume(), + this._idle && ((this._idle = !1), this.trigger('_active')))); + }), + (AnimationItem.prototype.pause = function (t) { + (t && this.name !== t) || + (!1 === this.isPaused && + ((this.isPaused = !0), + (this._idle = !0), + this.trigger('_idle'), + this.audioController.pause())); + }), + (AnimationItem.prototype.togglePause = function (t) { + (t && this.name !== t) || (!0 === this.isPaused ? this.play() : this.pause()); + }), + (AnimationItem.prototype.stop = function (t) { + (t && this.name !== t) || + (this.pause(), + (this.playCount = 0), + (this._completedLoop = !1), + this.setCurrentRawFrameValue(0)); + }), + (AnimationItem.prototype.getMarkerData = function (t) { + for (var e, r = 0; r < this.markers.length; r += 1) + if ((e = this.markers[r]).payload && e.payload.name === t) return e; + return null; + }), + (AnimationItem.prototype.goToAndStop = function (t, e, r) { + if (!r || this.name === r) { + var n = Number(t); + if (isNaN(n)) { + var i = this.getMarkerData(t); + i && this.goToAndStop(i.time, !0); + } else + e + ? this.setCurrentRawFrameValue(t) + : this.setCurrentRawFrameValue(t * this.frameModifier); + this.pause(); + } + }), + (AnimationItem.prototype.goToAndPlay = function (t, e, r) { + if (!r || this.name === r) { + var n = Number(t); + if (isNaN(n)) { + var i = this.getMarkerData(t); + i && + (i.duration + ? this.playSegments([i.time, i.time + i.duration], !0) + : this.goToAndStop(i.time, !0)); + } else this.goToAndStop(n, e, r); + this.play(); + } + }), + (AnimationItem.prototype.advanceTime = function (t) { + if (!0 !== this.isPaused && !1 !== this.isLoaded) { + var e = this.currentRawFrame + t * this.frameModifier, + r = !1; + e >= this.totalFrames - 1 && 0 < this.frameModifier + ? this.loop && this.playCount !== this.loop + ? e >= this.totalFrames + ? ((this.playCount += 1), + this.checkSegments(e % this.totalFrames) || + (this.setCurrentRawFrameValue(e % this.totalFrames), + (this._completedLoop = !0), + this.trigger('loopComplete'))) + : this.setCurrentRawFrameValue(e) + : this.checkSegments(e > this.totalFrames ? e % this.totalFrames : 0) || + ((r = !0), (e = this.totalFrames - 1)) + : e < 0 + ? this.checkSegments(e % this.totalFrames) || + (!this.loop || (this.playCount-- <= 0 && !0 !== this.loop) + ? ((r = !0), (e = 0)) + : (this.setCurrentRawFrameValue(this.totalFrames + (e % this.totalFrames)), + this._completedLoop + ? this.trigger('loopComplete') + : (this._completedLoop = !0))) + : this.setCurrentRawFrameValue(e), + r && (this.setCurrentRawFrameValue(e), this.pause(), this.trigger('complete')); + } + }), + (AnimationItem.prototype.adjustSegment = function (t, e) { + (this.playCount = 0), + t[1] < t[0] + ? (0 < this.frameModifier && + (this.playSpeed < 0 ? this.setSpeed(-this.playSpeed) : this.setDirection(-1)), + (this.totalFrames = t[0] - t[1]), + (this.timeCompleted = this.totalFrames), + (this.firstFrame = t[1]), + this.setCurrentRawFrameValue(this.totalFrames - 0.001 - e)) + : t[1] > t[0] && + (this.frameModifier < 0 && + (this.playSpeed < 0 ? this.setSpeed(-this.playSpeed) : this.setDirection(1)), + (this.totalFrames = t[1] - t[0]), + (this.timeCompleted = this.totalFrames), + (this.firstFrame = t[0]), + this.setCurrentRawFrameValue(0.001 + e)), + this.trigger('segmentStart'); + }), + (AnimationItem.prototype.setSegment = function (t, e) { + var r = -1; + this.isPaused && + (this.currentRawFrame + this.firstFrame < t + ? (r = t) + : this.currentRawFrame + this.firstFrame > e && (r = e - t)), + (this.firstFrame = t), + (this.totalFrames = e - t), + (this.timeCompleted = this.totalFrames), + -1 !== r && this.goToAndStop(r, !0); + }), + (AnimationItem.prototype.playSegments = function (t, e) { + if ((e && (this.segments.length = 0), 'object' == typeof t[0])) { + var r, + n = t.length; + for (r = 0; r < n; r += 1) this.segments.push(t[r]); + } else this.segments.push(t); + this.segments.length && e && this.adjustSegment(this.segments.shift(), 0), + this.isPaused && this.play(); + }), + (AnimationItem.prototype.resetSegments = function (t) { + (this.segments.length = 0), + this.segments.push([this.animationData.ip, this.animationData.op]), + t && this.checkSegments(0); + }), + (AnimationItem.prototype.checkSegments = function (t) { + return !!this.segments.length && (this.adjustSegment(this.segments.shift(), t), !0); + }), + (AnimationItem.prototype.destroy = function (t) { + (t && this.name !== t) || + !this.renderer || + (this.renderer.destroy(), + this.imagePreloader.destroy(), + this.trigger('destroy'), + (this._cbs = null), + (this.onEnterFrame = null), + (this.onLoopComplete = null), + (this.onComplete = null), + (this.onSegmentStart = null), + (this.onDestroy = null), + (this.renderer = null), + (this.renderer = null), + (this.imagePreloader = null), + (this.projectInterface = null)); + }), + (AnimationItem.prototype.setCurrentRawFrameValue = function (t) { + (this.currentRawFrame = t), this.gotoFrame(); + }), + (AnimationItem.prototype.setSpeed = function (t) { + (this.playSpeed = t), this.updaFrameModifier(); + }), + (AnimationItem.prototype.setDirection = function (t) { + (this.playDirection = t < 0 ? -1 : 1), this.updaFrameModifier(); + }), + (AnimationItem.prototype.setVolume = function (t, e) { + (e && this.name !== e) || this.audioController.setVolume(t); + }), + (AnimationItem.prototype.getVolume = function () { + return this.audioController.getVolume(); + }), + (AnimationItem.prototype.mute = function (t) { + (t && this.name !== t) || this.audioController.mute(); + }), + (AnimationItem.prototype.unmute = function (t) { + (t && this.name !== t) || this.audioController.unmute(); + }), + (AnimationItem.prototype.updaFrameModifier = function () { + (this.frameModifier = this.frameMult * this.playSpeed * this.playDirection), + this.audioController.setRate(this.playSpeed * this.playDirection); + }), + (AnimationItem.prototype.getPath = function () { + return this.path; + }), + (AnimationItem.prototype.getAssetsPath = function (t) { + var e = ''; + if (t.e) e = t.p; + else if (this.assetsPath) { + var r = t.p; + -1 !== r.indexOf('images/') && (r = r.split('/')[1]), (e = this.assetsPath + r); + } else (e = this.path), (e += t.u ? t.u : ''), (e += t.p); + return e; + }), + (AnimationItem.prototype.getAssetData = function (t) { + for (var e = 0, r = this.assets.length; e < r; ) { + if (t === this.assets[e].id) return this.assets[e]; + e += 1; + } + return null; + }), + (AnimationItem.prototype.hide = function () { + this.renderer.hide(); + }), + (AnimationItem.prototype.show = function () { + this.renderer.show(); + }), + (AnimationItem.prototype.getDuration = function (t) { + return t ? this.totalFrames : this.totalFrames / this.frameRate; + }), + (AnimationItem.prototype.trigger = function (t) { + if (this._cbs && this._cbs[t]) + switch (t) { + case 'enterFrame': + this.triggerEvent( + t, + new BMEnterFrameEvent( + t, + this.currentFrame, + this.totalFrames, + this.frameModifier, + ), + ); + break; + case 'loopComplete': + this.triggerEvent( + t, + new BMCompleteLoopEvent(t, this.loop, this.playCount, this.frameMult), + ); + break; + case 'complete': + this.triggerEvent(t, new BMCompleteEvent(t, this.frameMult)); + break; + case 'segmentStart': + this.triggerEvent( + t, + new BMSegmentStartEvent(t, this.firstFrame, this.totalFrames), + ); + break; + case 'destroy': + this.triggerEvent(t, new BMDestroyEvent(t, this)); + break; + default: + this.triggerEvent(t); + } + 'enterFrame' === t && + this.onEnterFrame && + this.onEnterFrame.call( + this, + new BMEnterFrameEvent(t, this.currentFrame, this.totalFrames, this.frameMult), + ), + 'loopComplete' === t && + this.onLoopComplete && + this.onLoopComplete.call( + this, + new BMCompleteLoopEvent(t, this.loop, this.playCount, this.frameMult), + ), + 'complete' === t && + this.onComplete && + this.onComplete.call(this, new BMCompleteEvent(t, this.frameMult)), + 'segmentStart' === t && + this.onSegmentStart && + this.onSegmentStart.call( + this, + new BMSegmentStartEvent(t, this.firstFrame, this.totalFrames), + ), + 'destroy' === t && + this.onDestroy && + this.onDestroy.call(this, new BMDestroyEvent(t, this)); + }), + (AnimationItem.prototype.triggerRenderFrameError = function (t) { + var e = new BMRenderFrameErrorEvent(t, this.currentFrame); + this.triggerEvent('error', e), this.onError && this.onError.call(this, e); + }), + (AnimationItem.prototype.triggerConfigError = function (t) { + var e = new BMConfigErrorEvent(t, this.currentFrame); + this.triggerEvent('error', e), this.onError && this.onError.call(this, e); + }); + var Expressions = + ((EY = {}), + (EY.initExpressions = function (t) { + var e = 0, + r = []; + (t.renderer.compInterface = CompExpressionInterface(t.renderer)), + t.renderer.globalData.projectInterface.registerComposition(t.renderer), + (t.renderer.globalData.pushExpression = function () { + e += 1; + }), + (t.renderer.globalData.popExpression = function () { + 0 == (e -= 1) && + (function () { + var t, + e = r.length; + for (t = 0; t < e; t += 1) r[t].release(); + r.length = 0; + })(); + }), + (t.renderer.globalData.registerExpressionProperty = function (t) { + -1 === r.indexOf(t) && r.push(t); + }); + }), + EY), + EY; + expressionsPlugin = Expressions; + var ExpressionManager = (function () { + var ob = {}, + Math = BMMath, + window = null, + document = null, + XMLHttpRequest = null, + fetch = null; + function $bm_isInstanceOfArray(t) { + return t.constructor === Array || t.constructor === Float32Array; + } + function isNumerable(t, e) { + return 'number' === t || 'boolean' === t || 'string' === t || e instanceof Number; + } + function $bm_neg(t) { + var e = typeof t; + if ('number' === e || 'boolean' === e || t instanceof Number) return -t; + if ($bm_isInstanceOfArray(t)) { + var r, + n = t.length, + i = []; + for (r = 0; r < n; r += 1) i[r] = -t[r]; + return i; + } + return t.propType ? t.v : -t; + } + var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get, + easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get, + easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get; + function sum(t, e) { + var r = typeof t, + n = typeof e; + if ('string' === r || 'string' === n) return t + e; + if (isNumerable(r, t) && isNumerable(n, e)) return t + e; + if ($bm_isInstanceOfArray(t) && isNumerable(n, e)) + return ((t = t.slice(0))[0] += e), t; + if (isNumerable(r, t) && $bm_isInstanceOfArray(e)) + return ((e = e.slice(0))[0] = t + e[0]), e; + if ($bm_isInstanceOfArray(t) && $bm_isInstanceOfArray(e)) { + for (var i = 0, a = t.length, s = e.length, o = []; i < a || i < s; ) + ('number' == typeof t[i] || t[i] instanceof Number) && + ('number' == typeof e[i] || e[i] instanceof Number) + ? (o[i] = t[i] + e[i]) + : (o[i] = void 0 === e[i] ? t[i] : t[i] || e[i]), + (i += 1); + return o; + } + return 0; + } + var add = sum; + function sub(t, e) { + var r = typeof t, + n = typeof e; + if (isNumerable(r, t) && isNumerable(n, e)) + return ( + 'string' === r && (t = parseInt(t, 10)), + 'string' === n && (e = parseInt(e, 10)), + t - e + ); + if ($bm_isInstanceOfArray(t) && isNumerable(n, e)) + return ((t = t.slice(0))[0] -= e), t; + if (isNumerable(r, t) && $bm_isInstanceOfArray(e)) + return ((e = e.slice(0))[0] = t - e[0]), e; + if ($bm_isInstanceOfArray(t) && $bm_isInstanceOfArray(e)) { + for (var i = 0, a = t.length, s = e.length, o = []; i < a || i < s; ) + ('number' == typeof t[i] || t[i] instanceof Number) && + ('number' == typeof e[i] || e[i] instanceof Number) + ? (o[i] = t[i] - e[i]) + : (o[i] = void 0 === e[i] ? t[i] : t[i] || e[i]), + (i += 1); + return o; + } + return 0; + } + function mul(t, e) { + var r, + n, + i, + a = typeof t, + s = typeof e; + if (isNumerable(a, t) && isNumerable(s, e)) return t * e; + if ($bm_isInstanceOfArray(t) && isNumerable(s, e)) { + for (i = t.length, r = createTypedArray('float32', i), n = 0; n < i; n += 1) + r[n] = t[n] * e; + return r; + } + if (isNumerable(a, t) && $bm_isInstanceOfArray(e)) { + for (i = e.length, r = createTypedArray('float32', i), n = 0; n < i; n += 1) + r[n] = t * e[n]; + return r; + } + return 0; + } + function div(t, e) { + var r, + n, + i, + a = typeof t, + s = typeof e; + if (isNumerable(a, t) && isNumerable(s, e)) return t / e; + if ($bm_isInstanceOfArray(t) && isNumerable(s, e)) { + for (i = t.length, r = createTypedArray('float32', i), n = 0; n < i; n += 1) + r[n] = t[n] / e; + return r; + } + if (isNumerable(a, t) && $bm_isInstanceOfArray(e)) { + for (i = e.length, r = createTypedArray('float32', i), n = 0; n < i; n += 1) + r[n] = t / e[n]; + return r; + } + return 0; + } + function mod(t, e) { + return ( + 'string' == typeof t && (t = parseInt(t, 10)), + 'string' == typeof e && (e = parseInt(e, 10)), + t % e + ); + } + var $bm_sum = sum, + $bm_sub = sub, + $bm_mul = mul, + $bm_div = div, + $bm_mod = mod; + function clamp(t, e, r) { + if (r < e) { + var n = r; + (r = e), (e = n); + } + return Math.min(Math.max(t, e), r); + } + function radiansToDegrees(t) { + return t / degToRads; + } + var radians_to_degrees = radiansToDegrees; + function degreesToRadians(t) { + return t * degToRads; + } + var degrees_to_radians = radiansToDegrees, + helperLengthArray = [0, 0, 0, 0, 0, 0]; + function length(t, e) { + if ('number' == typeof t || t instanceof Number) return (e = e || 0), Math.abs(t - e); + var r; + e || (e = helperLengthArray); + var n = Math.min(t.length, e.length), + i = 0; + for (r = 0; r < n; r += 1) i += Math.pow(e[r] - t[r], 2); + return Math.sqrt(i); + } + function normalize(t) { + return div(t, length(t)); + } + function rgbToHsl(t) { + var e, + r, + n = t[0], + i = t[1], + a = t[2], + s = Math.max(n, i, a), + o = Math.min(n, i, a), + h = (s + o) / 2; + if (s === o) r = e = 0; + else { + var l = s - o; + switch (((r = 0.5 < h ? l / (2 - s - o) : l / (s + o)), s)) { + case n: + e = (i - a) / l + (i < a ? 6 : 0); + break; + case i: + e = (a - n) / l + 2; + break; + case a: + e = (n - i) / l + 4; + } + e /= 6; + } + return [e, r, h, t[3]]; + } + function hue2rgb(t, e, r) { + return ( + r < 0 && (r += 1), + 1 < r && (r -= 1), + r < 1 / 6 + ? t + 6 * (e - t) * r + : r < 0.5 + ? e + : r < 2 / 3 + ? t + (e - t) * (2 / 3 - r) * 6 + : t + ); + } + function hslToRgb(t) { + var e, + r, + n, + i = t[0], + a = t[1], + s = t[2]; + if (0 === a) r = n = e = s; + else { + var o = s < 0.5 ? s * (1 + a) : s + a - s * a, + h = 2 * s - o; + (e = hue2rgb(h, o, i + 1 / 3)), + (r = hue2rgb(h, o, i)), + (n = hue2rgb(h, o, i - 1 / 3)); + } + return [e, r, n, t[3]]; + } + function linear(t, e, r, n, i) { + if (((void 0 !== n && void 0 !== i) || ((n = e), (i = r), (e = 0), (r = 1)), r < e)) { + var a = r; + (r = e), (e = a); + } + if (t <= e) return n; + if (r <= t) return i; + var s, + o = r === e ? 0 : (t - e) / (r - e); + if (!n.length) return n + (i - n) * o; + var h = n.length, + l = createTypedArray('float32', h); + for (s = 0; s < h; s += 1) l[s] = n[s] + (i[s] - n[s]) * o; + return l; + } + function random(t, e) { + if ( + (void 0 === e && (void 0 === t ? ((t = 0), (e = 1)) : ((e = t), (t = void 0))), + e.length) + ) { + var r, + n = e.length; + t || (t = createTypedArray('float32', n)); + var i = createTypedArray('float32', n), + a = BMMath.random(); + for (r = 0; r < n; r += 1) i[r] = t[r] + a * (e[r] - t[r]); + return i; + } + return void 0 === t && (t = 0), t + BMMath.random() * (e - t); + } + function createPath(t, e, r, n) { + var i, + a = t.length, + s = shapePool.newElement(); + s.setPathData(!!n, a); + var o, + h, + l = [0, 0]; + for (i = 0; i < a; i += 1) + (o = e && e[i] ? e[i] : l), + (h = r && r[i] ? r[i] : l), + s.setTripleAt( + t[i][0], + t[i][1], + h[0] + t[i][0], + h[1] + t[i][1], + o[0] + t[i][0], + o[1] + t[i][1], + i, + !0, + ); + return s; + } + function initiateExpression(elem, data, property) { + var val = data.x, + needsVelocity = /velocity(?![\w\d])/.test(val), + _needsRandom = -1 !== val.indexOf('random'), + elemType = elem.data.ty, + transform, + $bm_transform, + content, + effect, + thisProperty = property; + (thisProperty.valueAtTime = thisProperty.getValueAtTime), + Object.defineProperty(thisProperty, 'value', { + get: function () { + return thisProperty.v; + }, + }), + (elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate), + (elem.comp.displayStartTime = 0); + var inPoint = elem.data.ip / elem.comp.globalData.frameRate, + outPoint = elem.data.op / elem.comp.globalData.frameRate, + width = elem.data.sw ? elem.data.sw : 0, + height = elem.data.sh ? elem.data.sh : 0, + name = elem.data.nm, + loopIn, + loop_in, + loopOut, + loop_out, + smooth, + toWorld, + fromWorld, + fromComp, + toComp, + fromCompToSurface, + position, + rotation, + anchorPoint, + scale, + thisLayer, + thisComp, + mask, + valueAtTime, + velocityAtTime, + scoped_bm_rt, + expression_function = eval( + '[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]', + )[0], + numKeys = property.kf ? data.k.length : 0, + active = !this.data || !0 !== this.data.hd, + wiggle = function (t, e) { + var r, + n, + i = this.pv.length ? this.pv.length : 1, + a = createTypedArray('float32', i), + s = Math.floor(5 * time); + for (n = r = 0; r < s; ) { + for (n = 0; n < i; n += 1) a[n] += -e + 2 * e * BMMath.random(); + r += 1; + } + var o = 5 * time, + h = o - Math.floor(o), + l = createTypedArray('float32', i); + if (1 < i) { + for (n = 0; n < i; n += 1) + l[n] = this.pv[n] + a[n] + (-e + 2 * e * BMMath.random()) * h; + return l; + } + return this.pv + a[0] + (-e + 2 * e * BMMath.random()) * h; + }.bind(this); + function loopInDuration(t, e) { + return loopIn(t, e, !0); + } + function loopOutDuration(t, e) { + return loopOut(t, e, !0); + } + thisProperty.loopIn && + ((loopIn = thisProperty.loopIn.bind(thisProperty)), (loop_in = loopIn)), + thisProperty.loopOut && + ((loopOut = thisProperty.loopOut.bind(thisProperty)), (loop_out = loopOut)), + thisProperty.smooth && (smooth = thisProperty.smooth.bind(thisProperty)), + this.getValueAtTime && (valueAtTime = this.getValueAtTime.bind(this)), + this.getVelocityAtTime && (velocityAtTime = this.getVelocityAtTime.bind(this)); + var comp = elem.comp.globalData.projectInterface.bind( + elem.comp.globalData.projectInterface, + ), + time, + velocity, + value, + text, + textIndex, + textTotal, + selectorValue; + function lookAt(t, e) { + var r = [e[0] - t[0], e[1] - t[1], e[2] - t[2]], + n = Math.atan2(r[0], Math.sqrt(r[1] * r[1] + r[2] * r[2])) / degToRads; + return [-Math.atan2(r[1], r[2]) / degToRads, n, 0]; + } + function easeOut(t, e, r, n, i) { + return applyEase(easeOutBez, t, e, r, n, i); + } + function easeIn(t, e, r, n, i) { + return applyEase(easeInBez, t, e, r, n, i); + } + function ease(t, e, r, n, i) { + return applyEase(easeInOutBez, t, e, r, n, i); + } + function applyEase(t, e, r, n, i, a) { + void 0 === i ? ((i = r), (a = n)) : (e = (e - r) / (n - r)), + 1 < e ? (e = 1) : e < 0 && (e = 0); + var s = t(e); + if ($bm_isInstanceOfArray(i)) { + var o, + h = i.length, + l = createTypedArray('float32', h); + for (o = 0; o < h; o += 1) l[o] = (a[o] - i[o]) * s + i[o]; + return l; + } + return (a - i) * s + i; + } + function nearestKey(t) { + var e, + r, + n, + i = data.k.length; + if (data.k.length && 'number' != typeof data.k[0]) + if (((r = -1), (t *= elem.comp.globalData.frameRate) < data.k[0].t)) + (r = 1), (n = data.k[0].t); + else { + for (e = 0; e < i - 1; e += 1) { + if (t === data.k[e].t) { + (r = e + 1), (n = data.k[e].t); + break; + } + if (t > data.k[e].t && t < data.k[e + 1].t) { + n = + t - data.k[e].t > data.k[e + 1].t - t + ? ((r = e + 2), data.k[e + 1].t) + : ((r = e + 1), data.k[e].t); + break; + } + } + -1 === r && ((r = e + 1), (n = data.k[e].t)); + } + else n = r = 0; + var a = {}; + return (a.index = r), (a.time = n / elem.comp.globalData.frameRate), a; + } + function key(t) { + var e, r, n; + if (!data.k.length || 'number' == typeof data.k[0]) + throw new Error('The property has no keyframe at index ' + t); + (t -= 1), (e = { time: data.k[t].t / elem.comp.globalData.frameRate, value: [] }); + var i = Object.prototype.hasOwnProperty.call(data.k[t], 's') + ? data.k[t].s + : data.k[t - 1].e; + for (n = i.length, r = 0; r < n; r += 1) (e[r] = i[r]), (e.value[r] = i[r]); + return e; + } + function framesToTime(t, e) { + return e || (e = elem.comp.globalData.frameRate), t / e; + } + function timeToFrames(t, e) { + return t || 0 === t || (t = time), e || (e = elem.comp.globalData.frameRate), t * e; + } + function seedRandom(t) { + BMMath.seedrandom(randSeed + t); + } + function sourceRectAtTime() { + return elem.sourceRectAtTime(); + } + function substring(t, e) { + return 'string' == typeof value + ? void 0 === e + ? value.substring(t) + : value.substring(t, e) + : ''; + } + function substr(t, e) { + return 'string' == typeof value + ? void 0 === e + ? value.substr(t) + : value.substr(t, e) + : ''; + } + function posterizeTime(t) { + (time = 0 === t ? 0 : Math.floor(time * t) / t), (value = valueAtTime(time)); + } + var index = elem.data.ind, + hasParent = !(!elem.hierarchy || !elem.hierarchy.length), + parent, + randSeed = Math.floor(1e6 * Math.random()), + globalData = elem.globalData; + function executeExpression(t) { + return ( + (value = t), + _needsRandom && seedRandom(randSeed), + this.frameExpressionId === elem.globalData.frameId && + 'textSelector' !== this.propType + ? value + : ('textSelector' === this.propType && + ((textIndex = this.textIndex), + (textTotal = this.textTotal), + (selectorValue = this.selectorValue)), + thisLayer || + ((text = elem.layerInterface.text), + (thisLayer = elem.layerInterface), + (thisComp = elem.comp.compInterface), + (toWorld = thisLayer.toWorld.bind(thisLayer)), + (fromWorld = thisLayer.fromWorld.bind(thisLayer)), + (fromComp = thisLayer.fromComp.bind(thisLayer)), + (toComp = thisLayer.toComp.bind(thisLayer)), + (mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null), + (fromCompToSurface = fromComp)), + transform || + ((transform = elem.layerInterface('ADBE Transform Group')), + ($bm_transform = transform) && (anchorPoint = transform.anchorPoint)), + 4 !== elemType || content || (content = thisLayer('ADBE Root Vectors Group')), + effect || (effect = thisLayer(4)), + (hasParent = !(!elem.hierarchy || !elem.hierarchy.length)) && + !parent && + (parent = elem.hierarchy[0].layerInterface), + (time = this.comp.renderedFrame / this.comp.globalData.frameRate), + needsVelocity && (velocity = velocityAtTime(time)), + expression_function(), + (this.frameExpressionId = elem.globalData.frameId), + 'shape' === scoped_bm_rt.propType && (scoped_bm_rt = scoped_bm_rt.v), + scoped_bm_rt) + ); + } + return executeExpression; + } + return (ob.initiateExpression = initiateExpression), ob; + })(), + expressionHelpers = { + searchExpressions: function (t, e, r) { + e.x && + ((r.k = !0), + (r.x = !0), + (r.initiateExpression = ExpressionManager.initiateExpression), + r.effectsSequence.push(r.initiateExpression(t, e, r).bind(r))); + }, + getSpeedAtTime: function (t) { + var e = this.getValueAtTime(t), + r = this.getValueAtTime(t + -0.01), + n = 0; + if (e.length) { + var i; + for (i = 0; i < e.length; i += 1) n += Math.pow(r[i] - e[i], 2); + n = 100 * Math.sqrt(n); + } else n = 0; + return n; + }, + getVelocityAtTime: function (t) { + if (void 0 !== this.vel) return this.vel; + var e, + r, + n = this.getValueAtTime(t), + i = this.getValueAtTime(t + -0.001); + if (n.length) + for (e = createTypedArray('float32', n.length), r = 0; r < n.length; r += 1) + e[r] = (i[r] - n[r]) / -0.001; + else e = (i - n) / -0.001; + return e; + }, + getValueAtTime: function (t) { + return ( + (t *= this.elem.globalData.frameRate), + (t -= this.offsetTime) !== this._cachingAtTime.lastFrame && + ((this._cachingAtTime.lastIndex = + this._cachingAtTime.lastFrame < t ? this._cachingAtTime.lastIndex : 0), + (this._cachingAtTime.value = this.interpolateValue(t, this._cachingAtTime)), + (this._cachingAtTime.lastFrame = t)), + this._cachingAtTime.value + ); + }, + getStaticValueAtTime: function () { + return this.pv; + }, + setGroupProperty: function (t) { + this.propertyGroup = t; + }, + }; + !(function () { + function t(t, e, r) { + if (!this.k || !this.keyframes) return this.pv; + t = t ? t.toLowerCase() : ''; + var n, + i, + a, + s, + o, + h = this.comp.renderedFrame, + l = this.keyframes, + c = l[l.length - 1].t; + if (h <= c) return this.pv; + if ( + (r + ? (i = + c - + (n = e + ? Math.abs(c - this.elem.comp.globalData.frameRate * e) + : Math.max(0, c - this.elem.data.ip))) + : ((!e || e > l.length - 1) && (e = l.length - 1), + (n = c - (i = l[l.length - 1 - e].t))), + 'pingpong' === t) + ) { + if (Math.floor((h - i) / n) % 2 != 0) + return this.getValueAtTime( + (n - ((h - i) % n) + i) / this.comp.globalData.frameRate, + 0, + ); + } else { + if ('offset' === t) { + var u = this.getValueAtTime(i / this.comp.globalData.frameRate, 0), + f = this.getValueAtTime(c / this.comp.globalData.frameRate, 0), + p = this.getValueAtTime((((h - i) % n) + i) / this.comp.globalData.frameRate, 0), + d = Math.floor((h - i) / n); + if (this.pv.length) { + for (s = (o = new Array(u.length)).length, a = 0; a < s; a += 1) + o[a] = (f[a] - u[a]) * d + p[a]; + return o; + } + return (f - u) * d + p; + } + if ('continue' === t) { + var m = this.getValueAtTime(c / this.comp.globalData.frameRate, 0), + v = this.getValueAtTime((c - 0.001) / this.comp.globalData.frameRate, 0); + if (this.pv.length) { + for (s = (o = new Array(m.length)).length, a = 0; a < s; a += 1) + o[a] = + m[a] + ((m[a] - v[a]) * ((h - c) / this.comp.globalData.frameRate)) / 5e-4; + return o; + } + return m + ((h - c) / 0.001) * (m - v); + } + } + return this.getValueAtTime((((h - i) % n) + i) / this.comp.globalData.frameRate, 0); + } + function e(t, e, r) { + if (!this.k) return this.pv; + t = t ? t.toLowerCase() : ''; + var n, + i, + a, + s, + o, + h = this.comp.renderedFrame, + l = this.keyframes, + c = l[0].t; + if (c <= h) return this.pv; + if ( + (r + ? (i = + c + + (n = e + ? Math.abs(this.elem.comp.globalData.frameRate * e) + : Math.max(0, this.elem.data.op - c))) + : ((!e || e > l.length - 1) && (e = l.length - 1), (n = (i = l[e].t) - c)), + 'pingpong' === t) + ) { + if (Math.floor((c - h) / n) % 2 == 0) + return this.getValueAtTime((((c - h) % n) + c) / this.comp.globalData.frameRate, 0); + } else { + if ('offset' === t) { + var u = this.getValueAtTime(c / this.comp.globalData.frameRate, 0), + f = this.getValueAtTime(i / this.comp.globalData.frameRate, 0), + p = this.getValueAtTime( + (n - ((c - h) % n) + c) / this.comp.globalData.frameRate, + 0, + ), + d = Math.floor((c - h) / n) + 1; + if (this.pv.length) { + for (s = (o = new Array(u.length)).length, a = 0; a < s; a += 1) + o[a] = p[a] - (f[a] - u[a]) * d; + return o; + } + return p - (f - u) * d; + } + if ('continue' === t) { + var m = this.getValueAtTime(c / this.comp.globalData.frameRate, 0), + v = this.getValueAtTime((c + 0.001) / this.comp.globalData.frameRate, 0); + if (this.pv.length) { + for (s = (o = new Array(m.length)).length, a = 0; a < s; a += 1) + o[a] = m[a] + ((m[a] - v[a]) * (c - h)) / 0.001; + return o; + } + return m + ((m - v) * (c - h)) / 0.001; + } + } + return this.getValueAtTime( + (n - (((c - h) % n) + c)) / this.comp.globalData.frameRate, + 0, + ); + } + function r(t, e) { + if (!this.k) return this.pv; + if (((t = 0.5 * (t || 0.4)), (e = Math.floor(e || 5)) <= 1)) return this.pv; + var r, + n, + i = this.comp.renderedFrame / this.comp.globalData.frameRate, + a = i - t, + s = 1 < e ? (i + t - a) / (e - 1) : 1, + o = 0, + h = 0; + for (r = this.pv.length ? createTypedArray('float32', this.pv.length) : 0; o < e; ) { + if (((n = this.getValueAtTime(a + o * s)), this.pv.length)) + for (h = 0; h < this.pv.length; h += 1) r[h] += n[h]; + else r += n; + o += 1; + } + if (this.pv.length) for (h = 0; h < this.pv.length; h += 1) r[h] /= e; + else r /= e; + return r; + } + var n = TransformPropertyFactory.getTransformProperty; + TransformPropertyFactory.getTransformProperty = function (t, e, r) { + var i = n(t, e, r); + return ( + i.dynamicProperties.length + ? (i.getValueAtTime = function (t) { + this._transformCachingAtTime || + (this._transformCachingAtTime = { v: new Matrix() }); + var e = this._transformCachingAtTime.v; + if ((e.cloneFromProps(this.pre.props), this.appliedTransformations < 1)) { + var r = this.a.getValueAtTime(t); + e.translate(-r[0] * this.a.mult, -r[1] * this.a.mult, r[2] * this.a.mult); + } + if (this.appliedTransformations < 2) { + var n = this.s.getValueAtTime(t); + e.scale(n[0] * this.s.mult, n[1] * this.s.mult, n[2] * this.s.mult); + } + if (this.sk && this.appliedTransformations < 3) { + var i = this.sk.getValueAtTime(t), + a = this.sa.getValueAtTime(t); + e.skewFromAxis(-i * this.sk.mult, a * this.sa.mult); + } + if (this.r && this.appliedTransformations < 4) { + var s = this.r.getValueAtTime(t); + e.rotate(-s * this.r.mult); + } else if (!this.r && this.appliedTransformations < 4) { + var o = this.rz.getValueAtTime(t), + h = this.ry.getValueAtTime(t), + l = this.rx.getValueAtTime(t), + c = this.or.getValueAtTime(t); + e.rotateZ(-o * this.rz.mult) + .rotateY(h * this.ry.mult) + .rotateX(l * this.rx.mult) + .rotateZ(-c[2] * this.or.mult) + .rotateY(c[1] * this.or.mult) + .rotateX(c[0] * this.or.mult); + } + if (this.data.p && this.data.p.s) { + var u = this.px.getValueAtTime(t), + f = this.py.getValueAtTime(t); + if (this.data.p.z) { + var p = this.pz.getValueAtTime(t); + e.translate(u * this.px.mult, f * this.py.mult, -p * this.pz.mult); + } else e.translate(u * this.px.mult, f * this.py.mult, 0); + } else { + var d = this.p.getValueAtTime(t); + e.translate(d[0] * this.p.mult, d[1] * this.p.mult, -d[2] * this.p.mult); + } + return e; + }.bind(i)) + : (i.getValueAtTime = function () { + return this.v.clone(new Matrix()); + }.bind(i)), + (i.setGroupProperty = expressionHelpers.setGroupProperty), + i + ); + }; + var i = PropertyFactory.getProp; + PropertyFactory.getProp = function (n, a, s, o, h) { + var l = i(n, a, s, o, h); + l.kf + ? (l.getValueAtTime = expressionHelpers.getValueAtTime.bind(l)) + : (l.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(l)), + (l.setGroupProperty = expressionHelpers.setGroupProperty), + (l.loopOut = t), + (l.loopIn = e), + (l.smooth = r), + (l.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(l)), + (l.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(l)), + (l.numKeys = 1 === a.a ? a.k.length : 0), + (l.propertyIndex = a.ix); + var c = 0; + return ( + 0 !== s && + (c = createTypedArray('float32', 1 === a.a ? a.k[0].s.length : a.k.length)), + (l._cachingAtTime = { lastFrame: initialDefaultFrame, lastIndex: 0, value: c }), + expressionHelpers.searchExpressions(n, a, l), + l.k && h.addDynamicProperty(l), + l + ); + }; + var a = ShapePropertyFactory.getConstructorFunction(), + s = ShapePropertyFactory.getKeyframedConstructorFunction(); + function o() {} + (o.prototype = { + vertices: function (t, e) { + this.k && this.getValue(); + var r, + n = this.v; + void 0 !== e && (n = this.getValueAtTime(e, 0)); + var i = n._length, + a = n[t], + s = n.v, + o = createSizedArray(i); + for (r = 0; r < i; r += 1) + o[r] = + 'i' === t || 'o' === t + ? [a[r][0] - s[r][0], a[r][1] - s[r][1]] + : [a[r][0], a[r][1]]; + return o; + }, + points: function (t) { + return this.vertices('v', t); + }, + inTangents: function (t) { + return this.vertices('i', t); + }, + outTangents: function (t) { + return this.vertices('o', t); + }, + isClosed: function () { + return this.v.c; + }, + pointOnPath: function (t, e) { + var r = this.v; + void 0 !== e && (r = this.getValueAtTime(e, 0)), + this._segmentsLength || (this._segmentsLength = bez.getSegmentsLength(r)); + for ( + var n, + i = this._segmentsLength, + a = i.lengths, + s = i.totalLength * t, + o = 0, + h = a.length, + l = 0; + o < h; + + ) { + if (l + a[o].addedLength > s) { + var c = o, + u = r.c && o === h - 1 ? 0 : o + 1, + f = (s - l) / a[o].addedLength; + n = bez.getPointInSegment(r.v[c], r.v[u], r.o[c], r.i[u], f, a[o]); + break; + } + (l += a[o].addedLength), (o += 1); + } + return ( + n || + (n = r.c + ? [r.v[0][0], r.v[0][1]] + : [r.v[r._length - 1][0], r.v[r._length - 1][1]]), + n + ); + }, + vectorOnPath: function (t, e, r) { + 1 == t ? (t = this.v.c) : 0 == t && (t = 0.999); + var n = this.pointOnPath(t, e), + i = this.pointOnPath(t + 0.001, e), + a = i[0] - n[0], + s = i[1] - n[1], + o = Math.sqrt(Math.pow(a, 2) + Math.pow(s, 2)); + return 0 === o ? [0, 0] : 'tangent' === r ? [a / o, s / o] : [-s / o, a / o]; + }, + tangentOnPath: function (t, e) { + return this.vectorOnPath(t, e, 'tangent'); + }, + normalOnPath: function (t, e) { + return this.vectorOnPath(t, e, 'normal'); + }, + setGroupProperty: expressionHelpers.setGroupProperty, + getValueAtTime: expressionHelpers.getStaticValueAtTime, + }), + extendPrototype([o], a), + extendPrototype([o], s), + (s.prototype.getValueAtTime = function (t) { + return ( + this._cachingAtTime || + (this._cachingAtTime = { + shapeValue: shapePool.clone(this.pv), + lastIndex: 0, + lastTime: initialDefaultFrame, + }), + (t *= this.elem.globalData.frameRate), + (t -= this.offsetTime) !== this._cachingAtTime.lastTime && + ((this._cachingAtTime.lastIndex = + this._cachingAtTime.lastTime < t ? this._caching.lastIndex : 0), + (this._cachingAtTime.lastTime = t), + this.interpolateShape(t, this._cachingAtTime.shapeValue, this._cachingAtTime)), + this._cachingAtTime.shapeValue + ); + }), + (s.prototype.initiateExpression = ExpressionManager.initiateExpression); + var h = ShapePropertyFactory.getShapeProp; + ShapePropertyFactory.getShapeProp = function (t, e, r, n, i) { + var a = h(t, e, r, n, i); + return ( + (a.propertyIndex = e.ix), + (a.lock = !1), + 3 === r + ? expressionHelpers.searchExpressions(t, e.pt, a) + : 4 === r && expressionHelpers.searchExpressions(t, e.ks, a), + a.k && t.addDynamicProperty(a), + a + ); + }; + })(), + (TextProperty.prototype.getExpressionValue = function (t, e) { + var r = this.calculateExpression(e); + if (t.t === r) return t; + var n = {}; + return this.copyData(n, t), (n.t = r.toString()), (n.__complete = !1), n; + }), + (TextProperty.prototype.searchProperty = function () { + var t = this.searchKeyframes(), + e = this.searchExpressions(); + return (this.kf = t || e), this.kf; + }), + (TextProperty.prototype.searchExpressions = function () { + return this.data.d.x + ? ((this.calculateExpression = ExpressionManager.initiateExpression.bind(this)( + this.elem, + this.data.d, + this, + )), + this.addEffect(this.getExpressionValue.bind(this)), + !0) + : null; + }); + var ShapePathInterface = function (t, e, r) { + var n = e.sh; + function i(t) { + return 'Shape' === t || + 'shape' === t || + 'Path' === t || + 'path' === t || + 'ADBE Vector Shape' === t || + 2 === t + ? i.path + : null; + } + var a = propertyGroupFactory(i, r); + return ( + n.setGroupProperty(PropertyInterface('Path', a)), + Object.defineProperties(i, { + path: { + get: function () { + return n.k && n.getValue(), n; + }, + }, + shape: { + get: function () { + return n.k && n.getValue(), n; + }, + }, + _name: { value: t.nm }, + ix: { value: t.ix }, + propertyIndex: { value: t.ix }, + mn: { value: t.mn }, + propertyGroup: { value: r }, + }), + i + ); + }, + propertyGroupFactory = function (t, e) { + return function (r) { + return (r = void 0 === r ? 1 : r) <= 0 ? t : e(r - 1); + }; + }, + PropertyInterface = function (t, e) { + var r = { _name: t }; + return function (t) { + return (t = void 0 === t ? 1 : t) <= 0 ? r : e(t - 1); + }; + }, + ShapeExpressionInterface = (function () { + function t(t, s, f) { + var p, + d = [], + m = t ? t.length : 0; + for (p = 0; p < m; p += 1) + 'gr' === t[p].ty + ? d.push(e(t[p], s[p], f)) + : 'fl' === t[p].ty + ? d.push(r(t[p], s[p], f)) + : 'st' === t[p].ty + ? d.push(i(t[p], s[p], f)) + : 'tm' === t[p].ty + ? d.push(a(t[p], s[p], f)) + : 'tr' === t[p].ty || + ('el' === t[p].ty + ? d.push(o(t[p], s[p], f)) + : 'sr' === t[p].ty + ? d.push(h(t[p], s[p], f)) + : 'sh' === t[p].ty + ? d.push(ShapePathInterface(t[p], s[p], f)) + : 'rc' === t[p].ty + ? d.push(l(t[p], s[p], f)) + : 'rd' === t[p].ty + ? d.push(c(t[p], s[p], f)) + : 'rp' === t[p].ty + ? d.push(u(t[p], s[p], f)) + : 'gf' === t[p].ty + ? d.push(n(t[p], s[p], f)) + : d.push( + (t[p], + s[p], + function () { + return null; + }), + )); + return d; + } + function e(e, r, n) { + var i = function (t) { + switch (t) { + case 'ADBE Vectors Group': + case 'Contents': + case 2: + return i.content; + default: + return i.transform; + } + }; + i.propertyGroup = propertyGroupFactory(i, n); + var a = (function (e, r, n) { + var i, + a = function (t) { + for (var e = 0, r = i.length; e < r; ) { + if ( + i[e]._name === t || + i[e].mn === t || + i[e].propertyIndex === t || + i[e].ix === t || + i[e].ind === t + ) + return i[e]; + e += 1; + } + return 'number' == typeof t ? i[t - 1] : null; + }; + (a.propertyGroup = propertyGroupFactory(a, n)), + (i = t(e.it, r.it, a.propertyGroup)), + (a.numProperties = i.length); + var o = s(e.it[e.it.length - 1], r.it[r.it.length - 1], a.propertyGroup); + return (a.transform = o), (a.propertyIndex = e.cix), (a._name = e.nm), a; + })(e, r, i.propertyGroup), + o = s(e.it[e.it.length - 1], r.it[r.it.length - 1], i.propertyGroup); + return ( + (i.content = a), + (i.transform = o), + Object.defineProperty(i, '_name', { + get: function () { + return e.nm; + }, + }), + (i.numProperties = e.np), + (i.propertyIndex = e.ix), + (i.nm = e.nm), + (i.mn = e.mn), + i + ); + } + function r(t, e, r) { + function n(t) { + return 'Color' === t || 'color' === t + ? n.color + : 'Opacity' === t || 'opacity' === t + ? n.opacity + : null; + } + return ( + Object.defineProperties(n, { + color: { get: ExpressionPropertyInterface(e.c) }, + opacity: { get: ExpressionPropertyInterface(e.o) }, + _name: { value: t.nm }, + mn: { value: t.mn }, + }), + e.c.setGroupProperty(PropertyInterface('Color', r)), + e.o.setGroupProperty(PropertyInterface('Opacity', r)), + n + ); + } + function n(t, e, r) { + function n(t) { + return 'Start Point' === t || 'start point' === t + ? n.startPoint + : 'End Point' === t || 'end point' === t + ? n.endPoint + : 'Opacity' === t || 'opacity' === t + ? n.opacity + : null; + } + return ( + Object.defineProperties(n, { + startPoint: { get: ExpressionPropertyInterface(e.s) }, + endPoint: { get: ExpressionPropertyInterface(e.e) }, + opacity: { get: ExpressionPropertyInterface(e.o) }, + type: { + get: function () { + return 'a'; + }, + }, + _name: { value: t.nm }, + mn: { value: t.mn }, + }), + e.s.setGroupProperty(PropertyInterface('Start Point', r)), + e.e.setGroupProperty(PropertyInterface('End Point', r)), + e.o.setGroupProperty(PropertyInterface('Opacity', r)), + n + ); + } + function i(t, e, r) { + var n, + i, + a = propertyGroupFactory(l, r), + s = propertyGroupFactory(h, a), + o = t.d ? t.d.length : 0, + h = {}; + for (n = 0; n < o; n += 1) + (i = n), + Object.defineProperty(h, t.d[i].nm, { + get: ExpressionPropertyInterface(e.d.dataProps[i].p), + }), + e.d.dataProps[n].p.setGroupProperty(s); + function l(t) { + return 'Color' === t || 'color' === t + ? l.color + : 'Opacity' === t || 'opacity' === t + ? l.opacity + : 'Stroke Width' === t || 'stroke width' === t + ? l.strokeWidth + : null; + } + return ( + Object.defineProperties(l, { + color: { get: ExpressionPropertyInterface(e.c) }, + opacity: { get: ExpressionPropertyInterface(e.o) }, + strokeWidth: { get: ExpressionPropertyInterface(e.w) }, + dash: { + get: function () { + return h; + }, + }, + _name: { value: t.nm }, + mn: { value: t.mn }, + }), + e.c.setGroupProperty(PropertyInterface('Color', a)), + e.o.setGroupProperty(PropertyInterface('Opacity', a)), + e.w.setGroupProperty(PropertyInterface('Stroke Width', a)), + l + ); + } + function a(t, e, r) { + function n(e) { + return e === t.e.ix || 'End' === e || 'end' === e + ? n.end + : e === t.s.ix + ? n.start + : e === t.o.ix + ? n.offset + : null; + } + var i = propertyGroupFactory(n, r); + return ( + (n.propertyIndex = t.ix), + e.s.setGroupProperty(PropertyInterface('Start', i)), + e.e.setGroupProperty(PropertyInterface('End', i)), + e.o.setGroupProperty(PropertyInterface('Offset', i)), + (n.propertyIndex = t.ix), + (n.propertyGroup = r), + Object.defineProperties(n, { + start: { get: ExpressionPropertyInterface(e.s) }, + end: { get: ExpressionPropertyInterface(e.e) }, + offset: { get: ExpressionPropertyInterface(e.o) }, + _name: { value: t.nm }, + }), + (n.mn = t.mn), + n + ); + } + function s(t, e, r) { + function n(e) { + return t.a.ix === e || 'Anchor Point' === e + ? n.anchorPoint + : t.o.ix === e || 'Opacity' === e + ? n.opacity + : t.p.ix === e || 'Position' === e + ? n.position + : t.r.ix === e || 'Rotation' === e || 'ADBE Vector Rotation' === e + ? n.rotation + : t.s.ix === e || 'Scale' === e + ? n.scale + : (t.sk && t.sk.ix === e) || 'Skew' === e + ? n.skew + : (t.sa && t.sa.ix === e) || 'Skew Axis' === e + ? n.skewAxis + : null; + } + var i = propertyGroupFactory(n, r); + return ( + e.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', i)), + e.transform.mProps.p.setGroupProperty(PropertyInterface('Position', i)), + e.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', i)), + e.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', i)), + e.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', i)), + e.transform.mProps.sk && + (e.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', i)), + e.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', i))), + e.transform.op.setGroupProperty(PropertyInterface('Opacity', i)), + Object.defineProperties(n, { + opacity: { get: ExpressionPropertyInterface(e.transform.mProps.o) }, + position: { get: ExpressionPropertyInterface(e.transform.mProps.p) }, + anchorPoint: { get: ExpressionPropertyInterface(e.transform.mProps.a) }, + scale: { get: ExpressionPropertyInterface(e.transform.mProps.s) }, + rotation: { get: ExpressionPropertyInterface(e.transform.mProps.r) }, + skew: { get: ExpressionPropertyInterface(e.transform.mProps.sk) }, + skewAxis: { get: ExpressionPropertyInterface(e.transform.mProps.sa) }, + _name: { value: t.nm }, + }), + (n.ty = 'tr'), + (n.mn = t.mn), + (n.propertyGroup = r), + n + ); + } + function o(t, e, r) { + function n(e) { + return t.p.ix === e ? n.position : t.s.ix === e ? n.size : null; + } + var i = propertyGroupFactory(n, r); + n.propertyIndex = t.ix; + var a = 'tm' === e.sh.ty ? e.sh.prop : e.sh; + return ( + a.s.setGroupProperty(PropertyInterface('Size', i)), + a.p.setGroupProperty(PropertyInterface('Position', i)), + Object.defineProperties(n, { + size: { get: ExpressionPropertyInterface(a.s) }, + position: { get: ExpressionPropertyInterface(a.p) }, + _name: { value: t.nm }, + }), + (n.mn = t.mn), + n + ); + } + function h(t, e, r) { + function n(e) { + return t.p.ix === e + ? n.position + : t.r.ix === e + ? n.rotation + : t.pt.ix === e + ? n.points + : t.or.ix === e || 'ADBE Vector Star Outer Radius' === e + ? n.outerRadius + : t.os.ix === e + ? n.outerRoundness + : !t.ir || (t.ir.ix !== e && 'ADBE Vector Star Inner Radius' !== e) + ? t.is && t.is.ix === e + ? n.innerRoundness + : null + : n.innerRadius; + } + var i = propertyGroupFactory(n, r), + a = 'tm' === e.sh.ty ? e.sh.prop : e.sh; + return ( + (n.propertyIndex = t.ix), + a.or.setGroupProperty(PropertyInterface('Outer Radius', i)), + a.os.setGroupProperty(PropertyInterface('Outer Roundness', i)), + a.pt.setGroupProperty(PropertyInterface('Points', i)), + a.p.setGroupProperty(PropertyInterface('Position', i)), + a.r.setGroupProperty(PropertyInterface('Rotation', i)), + t.ir && + (a.ir.setGroupProperty(PropertyInterface('Inner Radius', i)), + a.is.setGroupProperty(PropertyInterface('Inner Roundness', i))), + Object.defineProperties(n, { + position: { get: ExpressionPropertyInterface(a.p) }, + rotation: { get: ExpressionPropertyInterface(a.r) }, + points: { get: ExpressionPropertyInterface(a.pt) }, + outerRadius: { get: ExpressionPropertyInterface(a.or) }, + outerRoundness: { get: ExpressionPropertyInterface(a.os) }, + innerRadius: { get: ExpressionPropertyInterface(a.ir) }, + innerRoundness: { get: ExpressionPropertyInterface(a.is) }, + _name: { value: t.nm }, + }), + (n.mn = t.mn), + n + ); + } + function l(t, e, r) { + function n(e) { + return t.p.ix === e + ? n.position + : t.r.ix === e + ? n.roundness + : t.s.ix === e || 'Size' === e || 'ADBE Vector Rect Size' === e + ? n.size + : null; + } + var i = propertyGroupFactory(n, r), + a = 'tm' === e.sh.ty ? e.sh.prop : e.sh; + return ( + (n.propertyIndex = t.ix), + a.p.setGroupProperty(PropertyInterface('Position', i)), + a.s.setGroupProperty(PropertyInterface('Size', i)), + a.r.setGroupProperty(PropertyInterface('Rotation', i)), + Object.defineProperties(n, { + position: { get: ExpressionPropertyInterface(a.p) }, + roundness: { get: ExpressionPropertyInterface(a.r) }, + size: { get: ExpressionPropertyInterface(a.s) }, + _name: { value: t.nm }, + }), + (n.mn = t.mn), + n + ); + } + function c(t, e, r) { + function n(e) { + return t.r.ix === e || 'Round Corners 1' === e ? n.radius : null; + } + var i = propertyGroupFactory(n, r), + a = e; + return ( + (n.propertyIndex = t.ix), + a.rd.setGroupProperty(PropertyInterface('Radius', i)), + Object.defineProperties(n, { + radius: { get: ExpressionPropertyInterface(a.rd) }, + _name: { value: t.nm }, + }), + (n.mn = t.mn), + n + ); + } + function u(t, e, r) { + function n(e) { + return t.c.ix === e || 'Copies' === e + ? n.copies + : t.o.ix === e || 'Offset' === e + ? n.offset + : null; + } + var i = propertyGroupFactory(n, r), + a = e; + return ( + (n.propertyIndex = t.ix), + a.c.setGroupProperty(PropertyInterface('Copies', i)), + a.o.setGroupProperty(PropertyInterface('Offset', i)), + Object.defineProperties(n, { + copies: { get: ExpressionPropertyInterface(a.c) }, + offset: { get: ExpressionPropertyInterface(a.o) }, + _name: { value: t.nm }, + }), + (n.mn = t.mn), + n + ); + } + return function (e, r, n) { + var i; + function a(t) { + if ('number' == typeof t) return 0 === (t = void 0 === t ? 1 : t) ? n : i[t - 1]; + for (var e = 0, r = i.length; e < r; ) { + if (i[e]._name === t) return i[e]; + e += 1; + } + return null; + } + return ( + (a.propertyGroup = propertyGroupFactory(a, function () { + return n; + })), + (i = t(e, r, a.propertyGroup)), + (a.numProperties = i.length), + (a._name = 'Contents'), + a + ); + }; + })(), + TextExpressionInterface = function (t) { + var e; + function r(t) { + switch (t) { + case 'ADBE Text Document': + return r.sourceText; + default: + return null; + } + } + return ( + Object.defineProperty(r, 'sourceText', { + get: function () { + t.textProperty.getValue(); + var r = t.textProperty.currentData.t; + return ( + void 0 !== r && + ((t.textProperty.currentData.t = void 0), + ((e = new String(r)).value = r || new String(r))), + e + ); + }, + }), + r + ); + }, + LayerExpressionInterface = (function () { + function t(t) { + var e = new Matrix(); + return ( + void 0 !== t + ? this._elem.finalTransform.mProp.getValueAtTime(t).clone(e) + : this._elem.finalTransform.mProp.applyToMatrix(e), + e + ); + } + function e(t, e) { + var r = this.getMatrix(e); + return (r.props[12] = 0), (r.props[13] = 0), (r.props[14] = 0), this.applyPoint(r, t); + } + function r(t, e) { + var r = this.getMatrix(e); + return this.applyPoint(r, t); + } + function n(t, e) { + var r = this.getMatrix(e); + return ( + (r.props[12] = 0), (r.props[13] = 0), (r.props[14] = 0), this.invertPoint(r, t) + ); + } + function i(t, e) { + var r = this.getMatrix(e); + return this.invertPoint(r, t); + } + function a(t, e) { + if (this._elem.hierarchy && this._elem.hierarchy.length) { + var r, + n = this._elem.hierarchy.length; + for (r = 0; r < n; r += 1) + this._elem.hierarchy[r].finalTransform.mProp.applyToMatrix(t); + } + return t.applyToPointArray(e[0], e[1], e[2] || 0); + } + function s(t, e) { + if (this._elem.hierarchy && this._elem.hierarchy.length) { + var r, + n = this._elem.hierarchy.length; + for (r = 0; r < n; r += 1) + this._elem.hierarchy[r].finalTransform.mProp.applyToMatrix(t); + } + return t.inversePoint(e); + } + function o(t) { + var e = new Matrix(); + if ( + (e.reset(), + this._elem.finalTransform.mProp.applyToMatrix(e), + this._elem.hierarchy && this._elem.hierarchy.length) + ) { + var r, + n = this._elem.hierarchy.length; + for (r = 0; r < n; r += 1) + this._elem.hierarchy[r].finalTransform.mProp.applyToMatrix(e); + return e.inversePoint(t); + } + return e.inversePoint(t); + } + function h() { + return [1, 1, 1, 1]; + } + return function (l) { + var c; + function u(t) { + switch (t) { + case 'ADBE Root Vectors Group': + case 'Contents': + case 2: + return u.shapeInterface; + case 1: + case 6: + case 'Transform': + case 'transform': + case 'ADBE Transform Group': + return c; + case 4: + case 'ADBE Effect Parade': + case 'effects': + case 'Effects': + return u.effect; + case 'ADBE Text Properties': + return u.textInterface; + default: + return null; + } + } + (u.getMatrix = t), + (u.invertPoint = s), + (u.applyPoint = a), + (u.toWorld = r), + (u.toWorldVec = e), + (u.fromWorld = i), + (u.fromWorldVec = n), + (u.toComp = r), + (u.fromComp = o), + (u.sampleImage = h), + (u.sourceRectAtTime = l.sourceRectAtTime.bind(l)); + var f = getDescriptor( + (c = TransformExpressionInterface((u._elem = l).finalTransform.mProp)), + 'anchorPoint', + ); + return ( + Object.defineProperties(u, { + hasParent: { + get: function () { + return l.hierarchy.length; + }, + }, + parent: { + get: function () { + return l.hierarchy[0].layerInterface; + }, + }, + rotation: getDescriptor(c, 'rotation'), + scale: getDescriptor(c, 'scale'), + position: getDescriptor(c, 'position'), + opacity: getDescriptor(c, 'opacity'), + anchorPoint: f, + anchor_point: f, + transform: { + get: function () { + return c; + }, + }, + active: { + get: function () { + return l.isInRange; + }, + }, + }), + (u.startTime = l.data.st), + (u.index = l.data.ind), + (u.source = l.data.refId), + (u.height = 0 === l.data.ty ? l.data.h : 100), + (u.width = 0 === l.data.ty ? l.data.w : 100), + (u.inPoint = l.data.ip / l.comp.globalData.frameRate), + (u.outPoint = l.data.op / l.comp.globalData.frameRate), + (u._name = l.data.nm), + (u.registerMaskInterface = function (t) { + u.mask = new MaskManagerInterface(t, l); + }), + (u.registerEffectsInterface = function (t) { + u.effect = t; + }), + u + ); + }; + })(), + FootageInterface = + ((q6 = function (t) { + function e(t) { + return 'Outline' === t ? e.outlineInterface() : null; + } + return ( + (e._name = 'Outline'), + (e.outlineInterface = (function (t) { + var e = '', + r = t.getFootageData(); + function n(t) { + if (r[t]) return 'object' == typeof (r = r[(e = t)]) ? n : r; + var i = t.indexOf(e); + if (-1 === i) return ''; + var a = parseInt(t.substr(i + e.length), 10); + return 'object' == typeof (r = r[a]) ? n : r; + } + return function () { + return (e = ''), (r = t.getFootageData()), n; + }; + })(t)), + e + ); + }), + function (t) { + function e(t) { + return 'Data' === t ? e.dataInterface : null; + } + return (e._name = 'Data'), (e.dataInterface = q6(t)), e; + }), + q6, + CompExpressionInterface = function (t) { + function e(e) { + for (var r = 0, n = t.layers.length; r < n; ) { + if (t.layers[r].nm === e || t.layers[r].ind === e) + return t.elements[r].layerInterface; + r += 1; + } + return null; + } + return ( + Object.defineProperty(e, '_name', { value: t.data.nm }), + ((e.layer = e).pixelAspect = 1), + (e.height = t.data.h || t.globalData.compSize.h), + (e.width = t.data.w || t.globalData.compSize.w), + (e.pixelAspect = 1), + (e.frameDuration = 1 / t.globalData.frameRate), + (e.displayStartTime = 0), + (e.numLayers = t.layers.length), + e + ); + }, + TransformExpressionInterface = function (t) { + function e(t) { + switch (t) { + case 'scale': + case 'Scale': + case 'ADBE Scale': + case 6: + return e.scale; + case 'rotation': + case 'Rotation': + case 'ADBE Rotation': + case 'ADBE Rotate Z': + case 10: + return e.rotation; + case 'ADBE Rotate X': + return e.xRotation; + case 'ADBE Rotate Y': + return e.yRotation; + case 'position': + case 'Position': + case 'ADBE Position': + case 2: + return e.position; + case 'ADBE Position_0': + return e.xPosition; + case 'ADBE Position_1': + return e.yPosition; + case 'ADBE Position_2': + return e.zPosition; + case 'anchorPoint': + case 'AnchorPoint': + case 'Anchor Point': + case 'ADBE AnchorPoint': + case 1: + return e.anchorPoint; + case 'opacity': + case 'Opacity': + case 11: + return e.opacity; + default: + return null; + } + } + var r, n, i, a; + return ( + Object.defineProperty(e, 'rotation', { + get: ExpressionPropertyInterface(t.r || t.rz), + }), + Object.defineProperty(e, 'zRotation', { + get: ExpressionPropertyInterface(t.rz || t.r), + }), + Object.defineProperty(e, 'xRotation', { get: ExpressionPropertyInterface(t.rx) }), + Object.defineProperty(e, 'yRotation', { get: ExpressionPropertyInterface(t.ry) }), + Object.defineProperty(e, 'scale', { get: ExpressionPropertyInterface(t.s) }), + t.p + ? (a = ExpressionPropertyInterface(t.p)) + : ((r = ExpressionPropertyInterface(t.px)), + (n = ExpressionPropertyInterface(t.py)), + t.pz && (i = ExpressionPropertyInterface(t.pz))), + Object.defineProperty(e, 'position', { + get: function () { + return t.p ? a() : [r(), n(), i ? i() : 0]; + }, + }), + Object.defineProperty(e, 'xPosition', { get: ExpressionPropertyInterface(t.px) }), + Object.defineProperty(e, 'yPosition', { get: ExpressionPropertyInterface(t.py) }), + Object.defineProperty(e, 'zPosition', { get: ExpressionPropertyInterface(t.pz) }), + Object.defineProperty(e, 'anchorPoint', { get: ExpressionPropertyInterface(t.a) }), + Object.defineProperty(e, 'opacity', { get: ExpressionPropertyInterface(t.o) }), + Object.defineProperty(e, 'skew', { get: ExpressionPropertyInterface(t.sk) }), + Object.defineProperty(e, 'skewAxis', { get: ExpressionPropertyInterface(t.sa) }), + Object.defineProperty(e, 'orientation', { get: ExpressionPropertyInterface(t.or) }), + e + ); + }, + ProjectInterface = (function () { + function t(t) { + this.compositions.push(t); + } + return function () { + function e(t) { + for (var e = 0, r = this.compositions.length; e < r; ) { + if (this.compositions[e].data && this.compositions[e].data.nm === t) + return ( + this.compositions[e].prepareFrame && + this.compositions[e].data.xt && + this.compositions[e].prepareFrame(this.currentFrame), + this.compositions[e].compInterface + ); + e += 1; + } + return null; + } + return (e.compositions = []), (e.currentFrame = 0), (e.registerComposition = t), e; + }; + })(), + EffectsExpressionInterface = (function () { + function t(r, n, i, a) { + function s(t) { + for (var e = r.ef, n = 0, i = e.length; n < i; ) { + if (t === e[n].nm || t === e[n].mn || t === e[n].ix) + return 5 === e[n].ty ? l[n] : l[n](); + n += 1; + } + throw new Error(); + } + var o, + h = propertyGroupFactory(s, i), + l = [], + c = r.ef.length; + for (o = 0; o < c; o += 1) + 5 === r.ef[o].ty + ? l.push(t(r.ef[o], n.effectElements[o], n.effectElements[o].propertyGroup, a)) + : l.push(e(n.effectElements[o], r.ef[o].ty, a, h)); + return ( + 'ADBE Color Control' === r.mn && + Object.defineProperty(s, 'color', { + get: function () { + return l[0](); + }, + }), + Object.defineProperties(s, { + numProperties: { + get: function () { + return r.np; + }, + }, + _name: { value: r.nm }, + propertyGroup: { value: h }, + }), + (s.enabled = 0 !== r.en), + (s.active = s.enabled), + s + ); + } + function e(t, e, r, n) { + var i = ExpressionPropertyInterface(t.p); + return ( + t.p.setGroupProperty && t.p.setGroupProperty(PropertyInterface('', n)), + function () { + return 10 === e ? r.comp.compInterface(t.p.v) : i(); + } + ); + } + return { + createEffectsInterface: function (e, r) { + if (e.effectsManager) { + var n, + i = [], + a = e.data.ef, + s = e.effectsManager.effectElements.length; + for (n = 0; n < s; n += 1) + i.push(t(a[n], e.effectsManager.effectElements[n], r, e)); + var o = e.data.ef || [], + h = function (t) { + for (n = 0, s = o.length; n < s; ) { + if (t === o[n].nm || t === o[n].mn || t === o[n].ix) return i[n]; + n += 1; + } + return null; + }; + return ( + Object.defineProperty(h, 'numProperties', { + get: function () { + return o.length; + }, + }), + h + ); + } + return null; + }, + }; + })(), + MaskManagerInterface = (function () { + function t(t, e) { + (this._mask = t), (this._data = e); + } + return ( + Object.defineProperty(t.prototype, 'maskPath', { + get: function () { + return this._mask.prop.k && this._mask.prop.getValue(), this._mask.prop; + }, + }), + Object.defineProperty(t.prototype, 'maskOpacity', { + get: function () { + return this._mask.op.k && this._mask.op.getValue(), 100 * this._mask.op.v; + }, + }), + function (e) { + var r, + n = createSizedArray(e.viewData.length), + i = e.viewData.length; + for (r = 0; r < i; r += 1) n[r] = new t(e.viewData[r], e.masksProperties[r]); + return function (t) { + for (r = 0; r < i; ) { + if (e.masksProperties[r].nm === t) return n[r]; + r += 1; + } + return null; + }; + } + ); + })(), + ExpressionPropertyInterface = (function () { + var t = { pv: 0, v: 0, mult: 1 }, + e = { pv: [0, 0, 0], v: [0, 0, 0], mult: 1 }; + function r(t, e, r) { + Object.defineProperty(t, 'velocity', { + get: function () { + return e.getVelocityAtTime(e.comp.currentFrame); + }, + }), + (t.numKeys = e.keyframes ? e.keyframes.length : 0), + (t.key = function (n) { + if (!t.numKeys) return 0; + var i; + i = + 's' in e.keyframes[n - 1] + ? e.keyframes[n - 1].s + : 'e' in e.keyframes[n - 2] + ? e.keyframes[n - 2].e + : e.keyframes[n - 2].s; + var a = 'unidimensional' === r ? new Number(i) : Object.assign({}, i); + return ( + (a.time = e.keyframes[n - 1].t / e.elem.comp.globalData.frameRate), + (a.value = 'unidimensional' === r ? i[0] : i), + a + ); + }), + (t.valueAtTime = e.getValueAtTime), + (t.speedAtTime = e.getSpeedAtTime), + (t.velocityAtTime = e.getVelocityAtTime), + (t.propertyGroup = e.propertyGroup); + } + function n() { + return t; + } + return function (i) { + return i + ? 'unidimensional' === i.propType + ? (function (e) { + (e && 'pv' in e) || (e = t); + var n = 1 / e.mult, + i = e.pv * n, + a = new Number(i); + return ( + (a.value = i), + r(a, e, 'unidimensional'), + function () { + return ( + e.k && e.getValue(), + (i = e.v * n), + a.value !== i && + (((a = new Number(i)).value = i), r(a, e, 'unidimensional')), + a + ); + } + ); + })(i) + : (function (t) { + (t && 'pv' in t) || (t = e); + var n = 1 / t.mult, + i = (t.data && t.data.l) || t.pv.length, + a = createTypedArray('float32', i), + s = createTypedArray('float32', i); + return ( + (a.value = s), + r(a, t, 'multidimensional'), + function () { + t.k && t.getValue(); + for (var e = 0; e < i; e += 1) (s[e] = t.v[e] * n), (a[e] = s[e]); + return a; + } + ); + })(i) + : n; + }; + })(), + TextExpressionSelectorPropFactory = (function () { + function t(t, e) { + return ( + (this.textIndex = t + 1), + (this.textTotal = e), + (this.v = this.getValue() * this.mult), + this.v + ); + } + return function (e, r) { + (this.pv = 1), + (this.comp = e.comp), + (this.elem = e), + (this.mult = 0.01), + (this.propType = 'textSelector'), + (this.textTotal = r.totalChars), + (this.selectorValue = 100), + (this.lastValue = [1, 1, 1]), + (this.k = !0), + (this.x = !0), + (this.getValue = ExpressionManager.initiateExpression.bind(this)(e, r, this)), + (this.getMult = t), + (this.getVelocityAtTime = expressionHelpers.getVelocityAtTime), + this.kf + ? (this.getValueAtTime = expressionHelpers.getValueAtTime.bind(this)) + : (this.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(this)), + (this.setGroupProperty = expressionHelpers.setGroupProperty); + }; + })(), + propertyGetTextProp = TextSelectorProp.getTextSelectorProp; + function SliderEffect(t, e, r) { + this.p = PropertyFactory.getProp(e, t.v, 0, 0, r); + } + function AngleEffect(t, e, r) { + this.p = PropertyFactory.getProp(e, t.v, 0, 0, r); + } + function ColorEffect(t, e, r) { + this.p = PropertyFactory.getProp(e, t.v, 1, 0, r); + } + function PointEffect(t, e, r) { + this.p = PropertyFactory.getProp(e, t.v, 1, 0, r); + } + function LayerIndexEffect(t, e, r) { + this.p = PropertyFactory.getProp(e, t.v, 0, 0, r); + } + function MaskIndexEffect(t, e, r) { + this.p = PropertyFactory.getProp(e, t.v, 0, 0, r); + } + function CheckboxEffect(t, e, r) { + this.p = PropertyFactory.getProp(e, t.v, 0, 0, r); + } + function NoValueEffect() { + this.p = {}; + } + function EffectsManager(t, e) { + var r, + n = t.ef || []; + this.effectElements = []; + var i, + a = n.length; + for (r = 0; r < a; r += 1) (i = new GroupEffect(n[r], e)), this.effectElements.push(i); + } + function GroupEffect(t, e) { + this.init(t, e); + } + (TextSelectorProp.getTextSelectorProp = function (t, e, r) { + return 1 === e.t + ? new TextExpressionSelectorPropFactory(t, e, r) + : propertyGetTextProp(t, e, r); + }), + extendPrototype([DynamicPropertyContainer], GroupEffect), + (GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties), + (GroupEffect.prototype.init = function (t, e) { + var r; + (this.data = t), (this.effectElements = []), this.initDynamicPropertyContainer(e); + var n, + i = this.data.ef.length, + a = this.data.ef; + for (r = 0; r < i; r += 1) { + switch (((n = null), a[r].ty)) { + case 0: + n = new SliderEffect(a[r], e, this); + break; + case 1: + n = new AngleEffect(a[r], e, this); + break; + case 2: + n = new ColorEffect(a[r], e, this); + break; + case 3: + n = new PointEffect(a[r], e, this); + break; + case 4: + case 7: + n = new CheckboxEffect(a[r], e, this); + break; + case 10: + n = new LayerIndexEffect(a[r], e, this); + break; + case 11: + n = new MaskIndexEffect(a[r], e, this); + break; + case 5: + n = new EffectsManager(a[r], e, this); + break; + default: + n = new NoValueEffect(a[r], e, this); + } + n && this.effectElements.push(n); + } + }); + var lottie = {}; + function setLocationHref(t) { + locationHref = t; + } + function searchAnimations() { + !0 === standalone + ? animationManager.searchAnimations(animationData, standalone, renderer) + : animationManager.searchAnimations(); + } + function setSubframeRendering(t) { + subframeEnabled = t; + } + function setIDPrefix(t) { + idPrefix = t; + } + function loadAnimation(t) { + return ( + !0 === standalone && (t.animationData = JSON.parse(animationData)), + animationManager.loadAnimation(t) + ); + } + function setQuality(t) { + if ('string' == typeof t) + switch (t) { + case 'high': + defaultCurveSegments = 200; + break; + default: + case 'medium': + defaultCurveSegments = 50; + break; + case 'low': + defaultCurveSegments = 10; + } + else !isNaN(t) && 1 < t && (defaultCurveSegments = t); + roundValues(!(50 <= defaultCurveSegments)); + } + function inBrowser() { + return 'undefined' != typeof navigator; + } + function installPlugin(t, e) { + 'expressions' === t && (expressionsPlugin = e); + } + function getFactory(t) { + switch (t) { + case 'propertyFactory': + return PropertyFactory; + case 'shapePropertyFactory': + return ShapePropertyFactory; + case 'matrix': + return Matrix; + default: + return null; + } + } + function checkReady() { + 'complete' === document.readyState && + (clearInterval(readyStateCheckInterval), searchAnimations()); + } + function getQueryVariable(t) { + for (var e = queryString.split('&'), r = 0; r < e.length; r += 1) { + var n = e[r].split('='); + if (decodeURIComponent(n[0]) == t) return decodeURIComponent(n[1]); + } + return null; + } + (lottie.play = animationManager.play), + (lottie.pause = animationManager.pause), + (lottie.setLocationHref = setLocationHref), + (lottie.togglePause = animationManager.togglePause), + (lottie.setSpeed = animationManager.setSpeed), + (lottie.setDirection = animationManager.setDirection), + (lottie.stop = animationManager.stop), + (lottie.searchAnimations = searchAnimations), + (lottie.registerAnimation = animationManager.registerAnimation), + (lottie.loadAnimation = loadAnimation), + (lottie.setSubframeRendering = setSubframeRendering), + (lottie.resize = animationManager.resize), + (lottie.goToAndStop = animationManager.goToAndStop), + (lottie.destroy = animationManager.destroy), + (lottie.setQuality = setQuality), + (lottie.inBrowser = inBrowser), + (lottie.installPlugin = installPlugin), + (lottie.freeze = animationManager.freeze), + (lottie.unfreeze = animationManager.unfreeze), + (lottie.setVolume = animationManager.setVolume), + (lottie.mute = animationManager.mute), + (lottie.unmute = animationManager.unmute), + (lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations), + (lottie.setIDPrefix = setIDPrefix), + (lottie.__getFactory = getFactory), + (lottie.version = '5.7.13'); + var standalone = '__[STANDALONE]__', + animationData = '__[ANIMATIONDATA]__', + renderer = '', + queryString; + if (standalone) { + var scripts = document.getElementsByTagName('script'), + index = scripts.length - 1, + myScript = scripts[index] || { src: '' }; + (queryString = myScript.src.replace(/^[^\?]+\??/, '')), + (renderer = getQueryVariable('renderer')); + } + var readyStateCheckInterval = setInterval(checkReady, 100); + return lottie; + }), + void 0 === + (__WEBPACK_AMD_DEFINE_RESULT__ = function () { + return factory(root); + }.call(exports, __webpack_require__, exports, module)) || + (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + }, + function (t, e, r) { + 'use strict'; + var n = r(3)(r(37)); + !(function () { + if ('undefined' != typeof window) { + var t = window.navigator.userAgent.match(/Edge\/(\d{2})\./), + e = !!t && parseInt(t[1], 10) >= 16; + if (!('objectFit' in document.documentElement.style != !1) || e) { + var r = function (t) { + var e = t.parentNode; + !(function (t) { + var e = window.getComputedStyle(t, null), + r = e.getPropertyValue('position'), + n = e.getPropertyValue('overflow'), + i = e.getPropertyValue('display'); + (r && 'static' !== r) || (t.style.position = 'relative'), + 'hidden' !== n && (t.style.overflow = 'hidden'), + (i && 'inline' !== i) || (t.style.display = 'block'), + 0 === t.clientHeight && (t.style.height = '100%'), + -1 === t.className.indexOf('object-fit-polyfill') && + (t.className += ' object-fit-polyfill'); + })(e), + (function (t) { + var e = window.getComputedStyle(t, null), + r = { + 'max-width': 'none', + 'max-height': 'none', + 'min-width': '0px', + 'min-height': '0px', + top: 'auto', + right: 'auto', + bottom: 'auto', + left: 'auto', + 'margin-top': '0px', + 'margin-right': '0px', + 'margin-bottom': '0px', + 'margin-left': '0px', + }; + for (var n in r) e.getPropertyValue(n) !== r[n] && (t.style[n] = r[n]); + })(t), + (t.style.position = 'absolute'), + (t.style.height = '100%'), + (t.style.width = 'auto'), + t.clientWidth > e.clientWidth + ? ((t.style.top = '0'), + (t.style.marginTop = '0'), + (t.style.left = '50%'), + (t.style.marginLeft = t.clientWidth / -2 + 'px')) + : ((t.style.width = '100%'), + (t.style.height = 'auto'), + (t.style.left = '0'), + (t.style.marginLeft = '0'), + (t.style.top = '50%'), + (t.style.marginTop = t.clientHeight / -2 + 'px')); + }, + i = function (t) { + if (void 0 === t || t instanceof Event) + t = document.querySelectorAll('[data-object-fit]'); + else if (t && t.nodeName) t = [t]; + else { + if ('object' !== (0, n.default)(t) || !t.length || !t[0].nodeName) return !1; + t = t; + } + for (var i = 0; i < t.length; i++) + if (t[i].nodeName) { + var a = t[i].nodeName.toLowerCase(); + if ('img' === a) { + if (e) continue; + t[i].complete + ? r(t[i]) + : t[i].addEventListener('load', function () { + r(this); + }); + } else + 'video' === a + ? t[i].readyState > 0 + ? r(t[i]) + : t[i].addEventListener('loadedmetadata', function () { + r(this); + }) + : r(t[i]); + } + return !0; + }; + 'loading' === document.readyState + ? document.addEventListener('DOMContentLoaded', i) + : i(), + window.addEventListener('resize', i), + (window.objectFitPolyfill = i); + } else + window.objectFitPolyfill = function () { + return !1; + }; + } + })(); + }, + function (t, e, r) { + 'use strict'; + !(function () { + function t(t) { + Webflow.env('design') || + ($('video').each(function () { + t && $(this).prop('autoplay') ? this.play() : this.pause(); + }), + $('.w-background-video--control').each(function () { + t ? r($(this)) : e($(this)); + })); + } + function e(t) { + t.find('> span').each(function (t) { + $(this).prop('hidden', function () { + return 0 === t; + }); + }); + } + function r(t) { + t.find('> span').each(function (t) { + $(this).prop('hidden', function () { + return 1 === t; + }); + }); + } + 'undefined' != typeof window && + $(document).ready(function () { + var n = window.matchMedia('(prefers-reduced-motion: reduce)'); + n.addEventListener('change', function (e) { + t(!e.matches); + }), + n.matches && t(!1), + $('video:not([autoplay])').each(function () { + $(this) + .parent() + .find('.w-background-video--control') + .each(function () { + e($(this)); + }); + }), + $(document).on('click', '.w-background-video--control', function (t) { + if (!Webflow.env('design')) { + var n = $(t.currentTarget), + i = $('video#'.concat(n.attr('aria-controls'))).get(0); + if (i) + if (i.paused) { + var a = i.play(); + r(n), + a && + 'function' == typeof a.catch && + a.catch(function () { + e(n); + }); + } else i.pause(), e(n); + } + }); + }); + })(); + }, + function (t, e, r) { + 'use strict'; + var n = r(22); + n.define( + 'brand', + (t.exports = function (t) { + var e, + r = {}, + i = document, + a = t('html'), + s = t('body'), + o = '.w-webflow-badge', + h = window.location, + l = /PhantomJS/i.test(navigator.userAgent), + c = 'fullscreenchange webkitfullscreenchange mozfullscreenchange msfullscreenchange'; + function u() { + var r = + i.fullScreen || + i.mozFullScreen || + i.webkitIsFullScreen || + i.msFullscreenElement || + Boolean(i.webkitFullscreenElement); + t(e).attr('style', r ? 'display: none !important;' : ''); + } + function f() { + var t = s.children(o), + r = t.length && t.get(0) === e, + i = n.env('editor'); + r ? i && t.remove() : (t.length && t.remove(), i || s.append(e)); + } + return ( + (r.ready = function () { + var r, + n, + s, + o = a.attr('data-wf-status'), + p = a.attr('data-wf-domain') || ''; + /\.webflow\.io$/i.test(p) && h.hostname !== p && (o = !0), + o && + !l && + ((e = + e || + ((r = t('').attr( + 'href', + 'https://webflow.com?utm_campaign=brandjs', + )), + (n = t('') + .attr( + 'src', + 'https://d3e54v103j8qbb.cloudfront.net/img/webflow-badge-icon.f67cd735e3.svg', + ) + .attr('alt', '') + .css({ marginRight: '8px', width: '16px' })), + (s = t('') + .attr( + 'src', + 'https://d1otoma47x30pg.cloudfront.net/img/webflow-badge-text.6faa6a38cd.svg', + ) + .attr('alt', 'Made in Webflow')), + r.append(n, s), + r[0])), + f(), + setTimeout(f, 500), + t(i).off(c, u).on(c, u)); + }), + r + ); + }), + ); + }, + function (t, e, r) { + 'use strict'; + r(22).define( + 'focus-visible', + (t.exports = function () { + function t(t) { + var e = !0, + r = !1, + n = null, + i = { + text: !0, + search: !0, + url: !0, + tel: !0, + email: !0, + password: !0, + number: !0, + date: !0, + month: !0, + week: !0, + time: !0, + datetime: !0, + 'datetime-local': !0, + }; + function a(t) { + return !!( + t && + t !== document && + 'HTML' !== t.nodeName && + 'BODY' !== t.nodeName && + 'classList' in t && + 'contains' in t.classList + ); + } + function s(t) { + t.getAttribute('data-wf-focus-visible') || + t.setAttribute('data-wf-focus-visible', 'true'); + } + function o() { + e = !1; + } + function h() { + document.addEventListener('mousemove', l), + document.addEventListener('mousedown', l), + document.addEventListener('mouseup', l), + document.addEventListener('pointermove', l), + document.addEventListener('pointerdown', l), + document.addEventListener('pointerup', l), + document.addEventListener('touchmove', l), + document.addEventListener('touchstart', l), + document.addEventListener('touchend', l); + } + function l(t) { + (t.target.nodeName && 'html' === t.target.nodeName.toLowerCase()) || + ((e = !1), + document.removeEventListener('mousemove', l), + document.removeEventListener('mousedown', l), + document.removeEventListener('mouseup', l), + document.removeEventListener('pointermove', l), + document.removeEventListener('pointerdown', l), + document.removeEventListener('pointerup', l), + document.removeEventListener('touchmove', l), + document.removeEventListener('touchstart', l), + document.removeEventListener('touchend', l)); + } + document.addEventListener( + 'keydown', + function (r) { + r.metaKey || + r.altKey || + r.ctrlKey || + (a(t.activeElement) && s(t.activeElement), (e = !0)); + }, + !0, + ), + document.addEventListener('mousedown', o, !0), + document.addEventListener('pointerdown', o, !0), + document.addEventListener('touchstart', o, !0), + document.addEventListener( + 'visibilitychange', + function () { + 'hidden' === document.visibilityState && (r && (e = !0), h()); + }, + !0, + ), + h(), + t.addEventListener( + 'focus', + function (t) { + var r, n, o; + a(t.target) && + (e || + ((r = t.target), + (n = r.type), + ('INPUT' === (o = r.tagName) && i[n] && !r.readOnly) || + ('TEXTAREA' === o && !r.readOnly) || + r.isContentEditable)) && + s(t.target); + }, + !0, + ), + t.addEventListener( + 'blur', + function (t) { + var e; + a(t.target) && + t.target.hasAttribute('data-wf-focus-visible') && + ((r = !0), + window.clearTimeout(n), + (n = window.setTimeout(function () { + r = !1; + }, 100)), + (e = t.target).getAttribute('data-wf-focus-visible') && + e.removeAttribute('data-wf-focus-visible')); + }, + !0, + ); + } + return { + ready: function () { + if ('undefined' != typeof document) + try { + document.querySelector(':focus-visible'); + } catch (e) { + t(document); + } + }, + }; + }), + ); + }, + function (t, e, r) { + 'use strict'; + r(22).define( + 'focus-within', + (t.exports = function () { + function t(t) { + for (var e = [t], r = null; (r = t.parentNode || t.host || t.defaultView); ) + e.push(r), (t = r); + return e; + } + function e(t) { + 'function' != typeof t.getAttribute || + t.getAttribute('data-wf-focus-within') || + t.setAttribute('data-wf-focus-within', 'true'); + } + function r(t) { + 'function' == typeof t.getAttribute && + t.getAttribute('data-wf-focus-within') && + t.removeAttribute('data-wf-focus-within'); + } + return { + ready: function () { + if ( + 'undefined' != typeof document && + document.body.hasAttribute('data-wf-focus-within') + ) + try { + document.querySelector(':focus-within'); + } catch (i) { + (n = function (n) { + var i; + i || + (window.requestAnimationFrame(function () { + (i = !1), + 'blur' === n.type && Array.prototype.slice.call(t(n.target)).forEach(r), + 'focus' === n.type && Array.prototype.slice.call(t(n.target)).forEach(e); + }), + (i = !0)); + }), + document.addEventListener('focus', n, !0), + document.addEventListener('blur', n, !0), + e(document.body); + } + var n; + }, + }; + }), + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(22); + n.define( + 'focus', + (t.exports = function () { + var t = [], + e = !1; + function r(r) { + e && + (r.preventDefault(), r.stopPropagation(), r.stopImmediatePropagation(), t.unshift(r)); + } + function i(r) { + (function (t) { + var e = t.target, + r = e.tagName; + return ( + (/^a$/i.test(r) && null != e.href) || + (/^(button|textarea)$/i.test(r) && !0 !== e.disabled) || + (/^input$/i.test(r) && + /^(button|reset|submit|radio|checkbox)$/i.test(e.type) && + !e.disabled) || + (!/^(button|input|textarea|select|a)$/i.test(r) && + !Number.isNaN(Number.parseFloat(e.tabIndex))) || + /^audio$/i.test(r) || + (/^video$/i.test(r) && !0 === e.controls) + ); + })(r) && + ((e = !0), + setTimeout(function () { + for (e = !1, r.target.focus(); t.length > 0; ) { + var n = t.pop(); + n.target.dispatchEvent(new MouseEvent(n.type, n)); + } + }, 0)); + } + return { + ready: function () { + 'undefined' != typeof document && + document.body.hasAttribute('data-wf-focus-within') && + n.env.safari && + (document.addEventListener('mousedown', i, !0), + document.addEventListener('mouseup', r, !0), + document.addEventListener('click', r, !0)); + }, + }; + }), + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(367); + function i(t, e) { + var r = document.createEvent('CustomEvent'); + r.initCustomEvent(e, !0, !0, null), t.dispatchEvent(r); + } + var a = window.jQuery, + s = {}, + o = { + reset: function (t, e) { + n.triggers.reset(t, e); + }, + intro: function (t, e) { + n.triggers.intro(t, e), i(e, 'COMPONENT_ACTIVE'); + }, + outro: function (t, e) { + n.triggers.outro(t, e), i(e, 'COMPONENT_INACTIVE'); + }, + }; + (s.triggers = {}), + (s.types = { INTRO: 'w-ix-intro.w-ix', OUTRO: 'w-ix-outro.w-ix' }), + a.extend(s.triggers, o), + (t.exports = s); + }, + function (t, e, r) { + 'use strict'; + var n = window.jQuery, + i = {}, + a = [], + s = { + reset: function (t, e) { + e.__wf_intro = null; + }, + intro: function (t, e) { + e.__wf_intro || ((e.__wf_intro = !0), n(e).triggerHandler(i.types.INTRO)); + }, + outro: function (t, e) { + e.__wf_intro && ((e.__wf_intro = null), n(e).triggerHandler(i.types.OUTRO)); + }, + }; + (i.triggers = {}), + (i.types = { INTRO: 'w-ix-intro.w-ix', OUTRO: 'w-ix-outro.w-ix' }), + (i.init = function () { + for (var t = a.length, e = 0; e < t; e++) { + var r = a[e]; + r[0](0, r[1]); + } + (a = []), n.extend(i.triggers, s); + }), + (i.async = function () { + for (var t in s) { + var e = s[t]; + s.hasOwnProperty(t) && + (i.triggers[t] = function (t, r) { + a.push([e, r]); + }); + } + }), + i.async(), + (t.exports = i); + }, + function (t, e, r) { + 'use strict'; + var n = r(22), + i = r(369); + i.setEnv(n.env), + n.define( + 'ix2', + (t.exports = function () { + return i; + }), + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(56), + i = r(3); + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.setEnv = function (t) { + t() && (0, o.observeRequests)(l); + }), + (e.init = function (t) { + c(), (0, o.startEngine)({ store: l, rawData: t, allowEvents: !0 }); + }), + (e.destroy = c), + (e.actions = e.store = void 0), + r(370); + var a = r(167), + s = i(r(385)), + o = r(184), + h = n(r(120)); + e.actions = h; + var l = (0, a.createStore)(s.default); + function c() { + (0, o.stopEngine)(l); + } + e.store = l; + }, + function (t, e, r) { + var n = r(371); + t.exports = n; + }, + function (t, e, r) { + var n = r(372); + t.exports = n; + }, + function (t, e, r) { + r(158); + var n = r(373); + t.exports = n('Array', 'includes'); + }, + function (t, e, r) { + var n = r(0), + i = r(2); + t.exports = function (t, e) { + return i(n[t].prototype[e]); + }; + }, + function (t, e, r) { + 'use strict'; + r.r(e); + var n = r(169), + i = r(377), + a = r(378), + s = '[object Null]', + o = '[object Undefined]', + h = n.default ? n.default.toStringTag : void 0; + e.default = function (t) { + return null == t + ? void 0 === t + ? o + : s + : h && h in Object(t) + ? Object(i.default)(t) + : Object(a.default)(t); + }; + }, + function (t, e, r) { + 'use strict'; + r.r(e); + var n = r(376), + i = 'object' == typeof self && self && self.Object === Object && self, + a = n.default || i || Function('return this')(); + e.default = a; + }, + function (t, e, r) { + 'use strict'; + r.r(e), + function (t) { + var r = 'object' == typeof t && t && t.Object === Object && t; + e.default = r; + }.call(this, r(60)); + }, + function (t, e, r) { + 'use strict'; + r.r(e); + var n = r(169), + i = Object.prototype, + a = i.hasOwnProperty, + s = i.toString, + o = n.default ? n.default.toStringTag : void 0; + e.default = function (t) { + var e = a.call(t, o), + r = t[o]; + try { + t[o] = void 0; + var n = !0; + } catch (t) {} + var i = s.call(t); + return n && (e ? (t[o] = r) : delete t[o]), i; + }; + }, + function (t, e, r) { + 'use strict'; + r.r(e); + var n = Object.prototype.toString; + e.default = function (t) { + return n.call(t); + }; + }, + function (t, e, r) { + 'use strict'; + r.r(e); + var n = r(380), + i = Object(n.default)(Object.getPrototypeOf, Object); + e.default = i; + }, + function (t, e, r) { + 'use strict'; + r.r(e), + (e.default = function (t, e) { + return function (r) { + return t(e(r)); + }; + }); + }, + function (t, e, r) { + 'use strict'; + r.r(e), + (e.default = function (t) { + return null != t && 'object' == typeof t; + }); + }, + function (t, e, r) { + 'use strict'; + r.r(e), + function (t, n) { + var i, + a = r(384); + i = + 'undefined' != typeof self + ? self + : 'undefined' != typeof window + ? window + : void 0 !== t + ? t + : n; + var s = Object(a.default)(i); + e.default = s; + }.call(this, r(60), r(383)(t)); + }, + function (t, e) { + t.exports = function (t) { + if (!t.webpackPolyfill) { + var e = Object.create(t); + e.children || (e.children = []), + Object.defineProperty(e, 'loaded', { + enumerable: !0, + get: function () { + return e.l; + }, + }), + Object.defineProperty(e, 'id', { + enumerable: !0, + get: function () { + return e.i; + }, + }), + Object.defineProperty(e, 'exports', { enumerable: !0 }), + (e.webpackPolyfill = 1); + } + return e; + }; + }, + function (t, e, r) { + 'use strict'; + function n(t) { + var e, + r = t.Symbol; + return ( + 'function' == typeof r + ? r.observable + ? (e = r.observable) + : ((e = r('observable')), (r.observable = e)) + : (e = '@@observable'), + e + ); + } + r.r(e), + r.d(e, 'default', function () { + return n; + }); + }, + function (t, e, r) { + 'use strict'; + Object.defineProperty(e, '__esModule', { value: !0 }), (e.default = void 0); + var n = r(167), + i = r(386), + a = r(392), + s = r(393), + o = r(45), + h = r(410), + l = r(411), + c = o.IX2ElementsReducer.ixElements, + u = (0, n.combineReducers)({ + ixData: i.ixData, + ixRequest: a.ixRequest, + ixSession: s.ixSession, + ixElements: c, + ixInstances: h.ixInstances, + ixParameters: l.ixParameters, + }); + e.default = u; + }, + function (t, e, r) { + 'use strict'; + Object.defineProperty(e, '__esModule', { value: !0 }), (e.ixData = void 0); + var n = r(13).IX2EngineActionTypes.IX2_RAW_DATA_IMPORTED; + e.ixData = function () { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : Object.freeze({}), + e = arguments.length > 1 ? arguments[1] : void 0; + switch (e.type) { + case n: + return e.payload.ixData || Object.freeze({}); + default: + return t; + } + }; + }, + function (t, e, r) { + 'use strict'; + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.QuickEffectDirectionConsts = + e.QuickEffectIds = + e.EventLimitAffectedElements = + e.EventContinuousMouseAxes = + e.EventBasedOn = + e.EventAppliesTo = + e.EventTypeConsts = + void 0); + e.EventTypeConsts = { + NAVBAR_OPEN: 'NAVBAR_OPEN', + NAVBAR_CLOSE: 'NAVBAR_CLOSE', + TAB_ACTIVE: 'TAB_ACTIVE', + TAB_INACTIVE: 'TAB_INACTIVE', + SLIDER_ACTIVE: 'SLIDER_ACTIVE', + SLIDER_INACTIVE: 'SLIDER_INACTIVE', + DROPDOWN_OPEN: 'DROPDOWN_OPEN', + DROPDOWN_CLOSE: 'DROPDOWN_CLOSE', + MOUSE_CLICK: 'MOUSE_CLICK', + MOUSE_SECOND_CLICK: 'MOUSE_SECOND_CLICK', + MOUSE_DOWN: 'MOUSE_DOWN', + MOUSE_UP: 'MOUSE_UP', + MOUSE_OVER: 'MOUSE_OVER', + MOUSE_OUT: 'MOUSE_OUT', + MOUSE_MOVE: 'MOUSE_MOVE', + MOUSE_MOVE_IN_VIEWPORT: 'MOUSE_MOVE_IN_VIEWPORT', + SCROLL_INTO_VIEW: 'SCROLL_INTO_VIEW', + SCROLL_OUT_OF_VIEW: 'SCROLL_OUT_OF_VIEW', + SCROLLING_IN_VIEW: 'SCROLLING_IN_VIEW', + ECOMMERCE_CART_OPEN: 'ECOMMERCE_CART_OPEN', + ECOMMERCE_CART_CLOSE: 'ECOMMERCE_CART_CLOSE', + PAGE_START: 'PAGE_START', + PAGE_FINISH: 'PAGE_FINISH', + PAGE_SCROLL_UP: 'PAGE_SCROLL_UP', + PAGE_SCROLL_DOWN: 'PAGE_SCROLL_DOWN', + PAGE_SCROLL: 'PAGE_SCROLL', + }; + e.EventAppliesTo = { ELEMENT: 'ELEMENT', CLASS: 'CLASS', PAGE: 'PAGE' }; + e.EventBasedOn = { ELEMENT: 'ELEMENT', VIEWPORT: 'VIEWPORT' }; + e.EventContinuousMouseAxes = { X_AXIS: 'X_AXIS', Y_AXIS: 'Y_AXIS' }; + e.EventLimitAffectedElements = { + CHILDREN: 'CHILDREN', + SIBLINGS: 'SIBLINGS', + IMMEDIATE_CHILDREN: 'IMMEDIATE_CHILDREN', + }; + e.QuickEffectIds = { + FADE_EFFECT: 'FADE_EFFECT', + SLIDE_EFFECT: 'SLIDE_EFFECT', + GROW_EFFECT: 'GROW_EFFECT', + SHRINK_EFFECT: 'SHRINK_EFFECT', + SPIN_EFFECT: 'SPIN_EFFECT', + FLY_EFFECT: 'FLY_EFFECT', + POP_EFFECT: 'POP_EFFECT', + FLIP_EFFECT: 'FLIP_EFFECT', + JIGGLE_EFFECT: 'JIGGLE_EFFECT', + PULSE_EFFECT: 'PULSE_EFFECT', + DROP_EFFECT: 'DROP_EFFECT', + BLINK_EFFECT: 'BLINK_EFFECT', + BOUNCE_EFFECT: 'BOUNCE_EFFECT', + FLIP_LEFT_TO_RIGHT_EFFECT: 'FLIP_LEFT_TO_RIGHT_EFFECT', + FLIP_RIGHT_TO_LEFT_EFFECT: 'FLIP_RIGHT_TO_LEFT_EFFECT', + RUBBER_BAND_EFFECT: 'RUBBER_BAND_EFFECT', + JELLO_EFFECT: 'JELLO_EFFECT', + GROW_BIG_EFFECT: 'GROW_BIG_EFFECT', + SHRINK_BIG_EFFECT: 'SHRINK_BIG_EFFECT', + PLUGIN_LOTTIE_EFFECT: 'PLUGIN_LOTTIE_EFFECT', + }; + e.QuickEffectDirectionConsts = { + LEFT: 'LEFT', + RIGHT: 'RIGHT', + BOTTOM: 'BOTTOM', + TOP: 'TOP', + BOTTOM_LEFT: 'BOTTOM_LEFT', + BOTTOM_RIGHT: 'BOTTOM_RIGHT', + TOP_RIGHT: 'TOP_RIGHT', + TOP_LEFT: 'TOP_LEFT', + CLOCKWISE: 'CLOCKWISE', + COUNTER_CLOCKWISE: 'COUNTER_CLOCKWISE', + }; + }, + function (t, e, r) { + 'use strict'; + Object.defineProperty(e, '__esModule', { value: !0 }), (e.InteractionTypeConsts = void 0); + e.InteractionTypeConsts = { + MOUSE_CLICK_INTERACTION: 'MOUSE_CLICK_INTERACTION', + MOUSE_HOVER_INTERACTION: 'MOUSE_HOVER_INTERACTION', + MOUSE_MOVE_INTERACTION: 'MOUSE_MOVE_INTERACTION', + SCROLL_INTO_VIEW_INTERACTION: 'SCROLL_INTO_VIEW_INTERACTION', + SCROLLING_IN_VIEW_INTERACTION: 'SCROLLING_IN_VIEW_INTERACTION', + MOUSE_MOVE_IN_VIEWPORT_INTERACTION: 'MOUSE_MOVE_IN_VIEWPORT_INTERACTION', + PAGE_IS_SCROLLING_INTERACTION: 'PAGE_IS_SCROLLING_INTERACTION', + PAGE_LOAD_INTERACTION: 'PAGE_LOAD_INTERACTION', + PAGE_SCROLLED_INTERACTION: 'PAGE_SCROLLED_INTERACTION', + NAVBAR_INTERACTION: 'NAVBAR_INTERACTION', + DROPDOWN_INTERACTION: 'DROPDOWN_INTERACTION', + ECOMMERCE_CART_INTERACTION: 'ECOMMERCE_CART_INTERACTION', + TAB_INTERACTION: 'TAB_INTERACTION', + SLIDER_INTERACTION: 'SLIDER_INTERACTION', + }; + }, + function (t, e, r) { + 'use strict'; + var n, + i = r(3)(r(38)); + Object.defineProperty(e, '__esModule', { value: !0 }), (e.ReducedMotionTypes = void 0); + var a = r(174).ActionTypeConsts, + s = a.TRANSFORM_MOVE, + o = a.TRANSFORM_SCALE, + h = a.TRANSFORM_ROTATE, + l = a.TRANSFORM_SKEW, + c = a.STYLE_SIZE, + u = a.STYLE_FILTER, + f = + ((n = {}), + (0, i.default)(n, s, !0), + (0, i.default)(n, o, !0), + (0, i.default)(n, h, !0), + (0, i.default)(n, l, !0), + (0, i.default)(n, c, !0), + (0, i.default)(n, u, !0), + n); + e.ReducedMotionTypes = f; + }, + function (t, e, r) { + 'use strict'; + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.IX2_TEST_FRAME_RENDERED = + e.IX2_MEDIA_QUERIES_DEFINED = + e.IX2_VIEWPORT_WIDTH_CHANGED = + e.IX2_ACTION_LIST_PLAYBACK_CHANGED = + e.IX2_ELEMENT_STATE_CHANGED = + e.IX2_INSTANCE_REMOVED = + e.IX2_INSTANCE_STARTED = + e.IX2_INSTANCE_ADDED = + e.IX2_PARAMETER_CHANGED = + e.IX2_ANIMATION_FRAME_CHANGED = + e.IX2_EVENT_STATE_CHANGED = + e.IX2_EVENT_LISTENER_ADDED = + e.IX2_CLEAR_REQUESTED = + e.IX2_STOP_REQUESTED = + e.IX2_PLAYBACK_REQUESTED = + e.IX2_PREVIEW_REQUESTED = + e.IX2_SESSION_STOPPED = + e.IX2_SESSION_STARTED = + e.IX2_SESSION_INITIALIZED = + e.IX2_RAW_DATA_IMPORTED = + void 0); + e.IX2_RAW_DATA_IMPORTED = 'IX2_RAW_DATA_IMPORTED'; + e.IX2_SESSION_INITIALIZED = 'IX2_SESSION_INITIALIZED'; + e.IX2_SESSION_STARTED = 'IX2_SESSION_STARTED'; + e.IX2_SESSION_STOPPED = 'IX2_SESSION_STOPPED'; + e.IX2_PREVIEW_REQUESTED = 'IX2_PREVIEW_REQUESTED'; + e.IX2_PLAYBACK_REQUESTED = 'IX2_PLAYBACK_REQUESTED'; + e.IX2_STOP_REQUESTED = 'IX2_STOP_REQUESTED'; + e.IX2_CLEAR_REQUESTED = 'IX2_CLEAR_REQUESTED'; + e.IX2_EVENT_LISTENER_ADDED = 'IX2_EVENT_LISTENER_ADDED'; + e.IX2_EVENT_STATE_CHANGED = 'IX2_EVENT_STATE_CHANGED'; + e.IX2_ANIMATION_FRAME_CHANGED = 'IX2_ANIMATION_FRAME_CHANGED'; + e.IX2_PARAMETER_CHANGED = 'IX2_PARAMETER_CHANGED'; + e.IX2_INSTANCE_ADDED = 'IX2_INSTANCE_ADDED'; + e.IX2_INSTANCE_STARTED = 'IX2_INSTANCE_STARTED'; + e.IX2_INSTANCE_REMOVED = 'IX2_INSTANCE_REMOVED'; + e.IX2_ELEMENT_STATE_CHANGED = 'IX2_ELEMENT_STATE_CHANGED'; + e.IX2_ACTION_LIST_PLAYBACK_CHANGED = 'IX2_ACTION_LIST_PLAYBACK_CHANGED'; + e.IX2_VIEWPORT_WIDTH_CHANGED = 'IX2_VIEWPORT_WIDTH_CHANGED'; + e.IX2_MEDIA_QUERIES_DEFINED = 'IX2_MEDIA_QUERIES_DEFINED'; + e.IX2_TEST_FRAME_RENDERED = 'IX2_TEST_FRAME_RENDERED'; + }, + function (t, e, r) { + 'use strict'; + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.RENDER_PLUGIN = + e.RENDER_STYLE = + e.RENDER_GENERAL = + e.RENDER_TRANSFORM = + e.ABSTRACT_NODE = + e.PLAIN_OBJECT = + e.HTML_ELEMENT = + e.PRESERVE_3D = + e.PARENT = + e.SIBLINGS = + e.IMMEDIATE_CHILDREN = + e.CHILDREN = + e.BAR_DELIMITER = + e.COLON_DELIMITER = + e.COMMA_DELIMITER = + e.AUTO = + e.WILL_CHANGE = + e.FLEX = + e.DISPLAY = + e.COLOR = + e.BORDER_COLOR = + e.BACKGROUND = + e.BACKGROUND_COLOR = + e.HEIGHT = + e.WIDTH = + e.FILTER = + e.OPACITY = + e.SKEW_Y = + e.SKEW_X = + e.SKEW = + e.ROTATE_Z = + e.ROTATE_Y = + e.ROTATE_X = + e.SCALE_3D = + e.SCALE_Z = + e.SCALE_Y = + e.SCALE_X = + e.TRANSLATE_3D = + e.TRANSLATE_Z = + e.TRANSLATE_Y = + e.TRANSLATE_X = + e.TRANSFORM = + e.CONFIG_UNIT = + e.CONFIG_Z_UNIT = + e.CONFIG_Y_UNIT = + e.CONFIG_X_UNIT = + e.CONFIG_VALUE = + e.CONFIG_Z_VALUE = + e.CONFIG_Y_VALUE = + e.CONFIG_X_VALUE = + e.BOUNDARY_SELECTOR = + e.W_MOD_IX = + e.W_MOD_JS = + e.WF_PAGE = + e.IX2_ID_DELIMITER = + void 0); + e.IX2_ID_DELIMITER = '|'; + e.WF_PAGE = 'data-wf-page'; + e.W_MOD_JS = 'w-mod-js'; + e.W_MOD_IX = 'w-mod-ix'; + e.BOUNDARY_SELECTOR = '.w-dyn-item'; + e.CONFIG_X_VALUE = 'xValue'; + e.CONFIG_Y_VALUE = 'yValue'; + e.CONFIG_Z_VALUE = 'zValue'; + e.CONFIG_VALUE = 'value'; + e.CONFIG_X_UNIT = 'xUnit'; + e.CONFIG_Y_UNIT = 'yUnit'; + e.CONFIG_Z_UNIT = 'zUnit'; + e.CONFIG_UNIT = 'unit'; + e.TRANSFORM = 'transform'; + e.TRANSLATE_X = 'translateX'; + e.TRANSLATE_Y = 'translateY'; + e.TRANSLATE_Z = 'translateZ'; + e.TRANSLATE_3D = 'translate3d'; + e.SCALE_X = 'scaleX'; + e.SCALE_Y = 'scaleY'; + e.SCALE_Z = 'scaleZ'; + e.SCALE_3D = 'scale3d'; + e.ROTATE_X = 'rotateX'; + e.ROTATE_Y = 'rotateY'; + e.ROTATE_Z = 'rotateZ'; + e.SKEW = 'skew'; + e.SKEW_X = 'skewX'; + e.SKEW_Y = 'skewY'; + e.OPACITY = 'opacity'; + e.FILTER = 'filter'; + e.WIDTH = 'width'; + e.HEIGHT = 'height'; + e.BACKGROUND_COLOR = 'backgroundColor'; + e.BACKGROUND = 'background'; + e.BORDER_COLOR = 'borderColor'; + e.COLOR = 'color'; + e.DISPLAY = 'display'; + e.FLEX = 'flex'; + e.WILL_CHANGE = 'willChange'; + e.AUTO = 'AUTO'; + e.COMMA_DELIMITER = ','; + e.COLON_DELIMITER = ':'; + e.BAR_DELIMITER = '|'; + e.CHILDREN = 'CHILDREN'; + e.IMMEDIATE_CHILDREN = 'IMMEDIATE_CHILDREN'; + e.SIBLINGS = 'SIBLINGS'; + e.PARENT = 'PARENT'; + e.PRESERVE_3D = 'preserve-3d'; + e.HTML_ELEMENT = 'HTML_ELEMENT'; + e.PLAIN_OBJECT = 'PLAIN_OBJECT'; + e.ABSTRACT_NODE = 'ABSTRACT_NODE'; + e.RENDER_TRANSFORM = 'RENDER_TRANSFORM'; + e.RENDER_GENERAL = 'RENDER_GENERAL'; + e.RENDER_STYLE = 'RENDER_STYLE'; + e.RENDER_PLUGIN = 'RENDER_PLUGIN'; + }, + function (t, e, r) { + 'use strict'; + var n, + i = r(3)(r(38)), + a = r(3); + Object.defineProperty(e, '__esModule', { value: !0 }), (e.ixRequest = void 0); + var s = a(r(46)), + o = r(13), + h = r(57), + l = o.IX2EngineActionTypes, + c = l.IX2_PREVIEW_REQUESTED, + u = l.IX2_PLAYBACK_REQUESTED, + f = l.IX2_STOP_REQUESTED, + p = l.IX2_CLEAR_REQUESTED, + d = { preview: {}, playback: {}, stop: {}, clear: {} }, + m = Object.create( + null, + ((n = {}), + (0, i.default)(n, c, { value: 'preview' }), + (0, i.default)(n, u, { value: 'playback' }), + (0, i.default)(n, f, { value: 'stop' }), + (0, i.default)(n, p, { value: 'clear' }), + n), + ); + e.ixRequest = function () { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : d, + e = arguments.length > 1 ? arguments[1] : void 0; + if (e.type in m) { + var r = [m[e.type]]; + return (0, h.setIn)(t, [r], (0, s.default)({}, e.payload)); + } + return t; + }; + }, + function (t, e, r) { + 'use strict'; + Object.defineProperty(e, '__esModule', { value: !0 }), (e.ixSession = void 0); + var n = r(13), + i = r(57), + a = n.IX2EngineActionTypes, + s = a.IX2_SESSION_INITIALIZED, + o = a.IX2_SESSION_STARTED, + h = a.IX2_TEST_FRAME_RENDERED, + l = a.IX2_SESSION_STOPPED, + c = a.IX2_EVENT_LISTENER_ADDED, + u = a.IX2_EVENT_STATE_CHANGED, + f = a.IX2_ANIMATION_FRAME_CHANGED, + p = a.IX2_ACTION_LIST_PLAYBACK_CHANGED, + d = a.IX2_VIEWPORT_WIDTH_CHANGED, + m = a.IX2_MEDIA_QUERIES_DEFINED, + v = { + active: !1, + tick: 0, + eventListeners: [], + eventState: {}, + playbackState: {}, + viewportWidth: 0, + mediaQueryKey: null, + hasBoundaryNodes: !1, + hasDefinedMediaQueries: !1, + reducedMotion: !1, + }; + e.ixSession = function () { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : v, + e = arguments.length > 1 ? arguments[1] : void 0; + switch (e.type) { + case s: + var r = e.payload, + n = r.hasBoundaryNodes, + a = r.reducedMotion; + return (0, i.merge)(t, { hasBoundaryNodes: n, reducedMotion: a }); + case o: + return (0, i.set)(t, 'active', !0); + case h: + var y = e.payload.step, + g = void 0 === y ? 20 : y; + return (0, i.set)(t, 'tick', t.tick + g); + case l: + return v; + case f: + var E = e.payload.now; + return (0, i.set)(t, 'tick', E); + case c: + var b = (0, i.addLast)(t.eventListeners, e.payload); + return (0, i.set)(t, 'eventListeners', b); + case u: + var _ = e.payload, + x = _.stateKey, + S = _.newState; + return (0, i.setIn)(t, ['eventState', x], S); + case p: + var T = e.payload, + A = T.actionListId, + I = T.isPlaying; + return (0, i.setIn)(t, ['playbackState', A], I); + case d: + for ( + var P = e.payload, w = P.width, C = P.mediaQueries, D = C.length, M = null, O = 0; + O < D; + O++ + ) { + var F = C[O], + k = F.key, + R = F.min, + L = F.max; + if (w >= R && w <= L) { + M = k; + break; + } + } + return (0, i.merge)(t, { viewportWidth: w, mediaQueryKey: M }); + case m: + return (0, i.set)(t, 'hasDefinedMediaQueries', !0); + default: + return t; + } + }; + }, + function (t, e) { + t.exports = function (t) { + if (Array.isArray(t)) { + for (var e = 0, r = new Array(t.length); e < t.length; e++) r[e] = t[e]; + return r; + } + }; + }, + function (t, e) { + t.exports = function (t) { + if ( + Symbol.iterator in Object(t) || + '[object Arguments]' === Object.prototype.toString.call(t) + ) + return Array.from(t); + }; + }, + function (t, e) { + t.exports = function () { + throw new TypeError('Invalid attempt to spread non-iterable instance'); + }; + }, + function (t, e, r) { + 'use strict'; + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.createElementState = _), + (e.mergeActionState = x), + (e.ixElements = void 0); + var n = r(57), + i = r(13), + a = i.IX2EngineConstants, + s = (a.HTML_ELEMENT, a.PLAIN_OBJECT), + o = (a.ABSTRACT_NODE, a.CONFIG_X_VALUE), + h = a.CONFIG_Y_VALUE, + l = a.CONFIG_Z_VALUE, + c = a.CONFIG_VALUE, + u = a.CONFIG_X_UNIT, + f = a.CONFIG_Y_UNIT, + p = a.CONFIG_Z_UNIT, + d = a.CONFIG_UNIT, + m = i.IX2EngineActionTypes, + v = m.IX2_SESSION_STOPPED, + y = m.IX2_INSTANCE_ADDED, + g = m.IX2_ELEMENT_STATE_CHANGED, + E = {}, + b = 'refState'; + function _(t, e, r, i, a) { + var o = r === s ? (0, n.getIn)(a, ['config', 'target', 'objectId']) : null; + return (0, n.mergeIn)(t, [i], { id: i, ref: e, refId: o, refType: r }); + } + function x(t, e, r, i, a) { + var s = (function (t) { + var e = t.config; + return S.reduce(function (t, r) { + var n = r[0], + i = r[1], + a = e[n], + s = e[i]; + return null != a && null != s && (t[i] = s), t; + }, {}); + })(a), + o = [e, b, r]; + return (0, n.mergeIn)(t, o, i, s); + } + e.ixElements = function () { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : E, + e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + switch (e.type) { + case v: + return E; + case y: + var r = e.payload, + i = r.elementId, + a = r.element, + s = r.origin, + o = r.actionItem, + h = r.refType, + l = o.actionTypeId, + c = t; + return (0, n.getIn)(c, [i, a]) !== a && (c = _(c, a, h, i, o)), x(c, i, l, s, o); + case g: + var u = e.payload; + return x(t, u.elementId, u.actionTypeId, u.current, u.actionItem); + default: + return t; + } + }; + var S = [ + [o, u], + [h, f], + [l, p], + [c, d], + ]; + }, + function (t, e, r) { + 'use strict'; + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.clearPlugin = + e.renderPlugin = + e.createPluginInstance = + e.getPluginDestination = + e.getPluginOrigin = + e.getPluginDuration = + e.getPluginConfig = + void 0); + e.getPluginConfig = function (t) { + return t.value; + }; + e.getPluginDuration = function (t, e) { + if ('auto' !== e.config.duration) return null; + var r = parseFloat(t.getAttribute('data-duration')); + return r > 0 ? 1e3 * r : 1e3 * parseFloat(t.getAttribute('data-default-duration')); + }; + e.getPluginOrigin = function (t) { + return t || { value: 0 }; + }; + e.getPluginDestination = function (t) { + return { value: t.value }; + }; + e.createPluginInstance = function (t) { + var e = window.Webflow.require('lottie').createInstance(t); + return e.stop(), e.setSubframe(!0), e; + }; + e.renderPlugin = function (t, e, r) { + if (t) { + var n = e[r.actionTypeId].value / 100; + t.goToFrame(t.frames * n); + } + }; + e.clearPlugin = function (t) { + window.Webflow.require('lottie').createInstance(t).stop(); + }; + }, + function (t, e, r) { + 'use strict'; + var n, + i, + a, + s = r(3), + o = s(r(37)), + h = s(r(38)), + l = r(3); + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.getInstanceId = function () { + return 'i' + dt++; + }), + (e.getElementId = function (t, e) { + for (var r in t) { + var n = t[r]; + if (n && n.ref === e) return n.id; + } + return 'e' + mt++; + }), + (e.reifyState = function () { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = t.events, + r = t.actionLists, + n = t.site, + i = (0, u.default)( + e, + function (t, e) { + var r = e.eventTypeId; + return t[r] || (t[r] = {}), (t[r][e.id] = e), t; + }, + {}, + ), + a = n && n.mediaQueries, + s = []; + a + ? (s = a.map(function (t) { + return t.key; + })) + : ((a = []), console.warn('IX2 missing mediaQueries in site data')); + return { + ixData: { + events: e, + actionLists: r, + eventTypeMap: i, + mediaQueries: a, + mediaQueryKeys: s, + }, + }; + }), + (e.observeStore = function (t) { + var e = t.store, + r = t.select, + n = t.onChange, + i = t.comparator, + a = void 0 === i ? vt : i, + s = e.getState, + o = (0, e.subscribe)(function () { + var t = r(s()); + if (null == t) return void o(); + a(t, h) || n((h = t), e); + }), + h = r(s()); + return o; + }), + (e.getAffectedElements = gt), + (e.getComputedStyle = function (t) { + var e = t.element, + r = t.actionItem; + if (!g.IS_BROWSER_ENV) return {}; + switch (r.actionTypeId) { + case it: + case at: + case st: + case ot: + case ht: + return window.getComputedStyle(e); + default: + return {}; + } + }), + (e.getInstanceOrigin = function (t) { + var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, + n = arguments.length > 3 ? arguments[3] : void 0, + i = (arguments.length > 4 ? arguments[4] : void 0).getStyle, + a = n.actionTypeId, + s = n.config; + if ((0, y.isPluginType)(a)) return (0, y.getPluginOrigin)(a)(e[a]); + switch (a) { + case Z: + case J: + case tt: + case et: + return e[a] || St[a]; + case nt: + return bt(e[a], n.config.filters); + case rt: + return { value: (0, c.default)(parseFloat(i(t, D)), 1) }; + case it: + var o, + h, + l = i(t, O), + u = i(t, F); + return ( + (o = + s.widthUnit === H + ? Et.test(l) + ? parseFloat(l) + : parseFloat(r.width) + : (0, c.default)(parseFloat(l), parseFloat(r.width))), + (h = + s.heightUnit === H + ? Et.test(u) + ? parseFloat(u) + : parseFloat(r.height) + : (0, c.default)(parseFloat(u), parseFloat(r.height))), + { widthValue: o, heightValue: h } + ); + case at: + case st: + case ot: + return (function (t) { + var e = t.element, + r = t.actionTypeId, + n = t.computedStyle, + i = t.getStyle, + a = ut[r], + s = i(e, a), + o = Pt.test(s) ? s : n[a], + h = (function (t, e) { + var r = t.exec(e); + return r ? r[1] : ''; + })(wt, o).split(X); + return { + rValue: (0, c.default)(parseInt(h[0], 10), 255), + gValue: (0, c.default)(parseInt(h[1], 10), 255), + bValue: (0, c.default)(parseInt(h[2], 10), 255), + aValue: (0, c.default)(parseFloat(h[3]), 1), + }; + })({ element: t, actionTypeId: a, computedStyle: r, getStyle: i }); + case ht: + return { value: (0, c.default)(i(t, j), r.display) }; + case lt: + return e[a] || { value: 0 }; + default: + return; + } + }), + (e.getDestinationValues = function (t) { + var e = t.element, + r = t.actionItem, + n = t.elementApi, + i = r.actionTypeId; + if ((0, y.isPluginType)(i)) return (0, y.getPluginDestination)(i)(r.config); + switch (i) { + case Z: + case J: + case tt: + case et: + var a = r.config, + s = a.xValue, + o = a.yValue, + h = a.zValue; + return { xValue: s, yValue: o, zValue: h }; + case it: + var l = n.getStyle, + c = n.setStyle, + u = n.getProperty, + f = r.config, + p = f.widthUnit, + d = f.heightUnit, + m = r.config, + v = m.widthValue, + E = m.heightValue; + if (!g.IS_BROWSER_ENV) return { widthValue: v, heightValue: E }; + if (p === H) { + var b = l(e, O); + c(e, O, ''), (v = u(e, 'offsetWidth')), c(e, O, b); + } + if (d === H) { + var _ = l(e, F); + c(e, F, ''), (E = u(e, 'offsetHeight')), c(e, F, _); + } + return { widthValue: v, heightValue: E }; + case at: + case st: + case ot: + var x = r.config, + S = x.rValue, + T = x.gValue, + A = x.bValue, + I = x.aValue; + return { rValue: S, gValue: T, bValue: A, aValue: I }; + case nt: + return r.config.filters.reduce(_t, {}); + default: + var P = r.config.value; + return { value: P }; + } + }), + (e.getRenderType = xt), + (e.getStyleProp = function (t, e) { + return t === K ? e.replace('STYLE_', '').toLowerCase() : null; + }), + (e.renderHTMLElement = function (t, e, r, n, i, a, s, o, h) { + switch (o) { + case q: + return (function (t, e, r, n, i) { + var a = It.map(function (t) { + var r = St[t], + n = e[t] || {}, + i = n.xValue, + a = void 0 === i ? r.xValue : i, + s = n.yValue, + o = void 0 === s ? r.yValue : s, + h = n.zValue, + l = void 0 === h ? r.zValue : h, + c = n.xUnit, + u = void 0 === c ? '' : c, + f = n.yUnit, + p = void 0 === f ? '' : f, + d = n.zUnit, + m = void 0 === d ? '' : d; + switch (t) { + case Z: + return '' + .concat(x, '(') + .concat(a) + .concat(u, ', ') + .concat(o) + .concat(p, ', ') + .concat(l) + .concat(m, ')'); + case J: + return '' + .concat(S, '(') + .concat(a) + .concat(u, ', ') + .concat(o) + .concat(p, ', ') + .concat(l) + .concat(m, ')'); + case tt: + return '' + .concat(T, '(') + .concat(a) + .concat(u, ') ') + .concat(A, '(') + .concat(o) + .concat(p, ') ') + .concat(I, '(') + .concat(l) + .concat(m, ')'); + case et: + return ''.concat(P, '(').concat(a).concat(u, ', ').concat(o).concat(p, ')'); + default: + return ''; + } + }).join(' '), + s = i.setStyle; + Ct(t, g.TRANSFORM_PREFIXED, i), + s(t, g.TRANSFORM_PREFIXED, a), + (o = n), + (h = r), + (l = o.actionTypeId), + (c = h.xValue), + (u = h.yValue), + (f = h.zValue), + ((l === Z && void 0 !== f) || + (l === J && void 0 !== f) || + (l === tt && (void 0 !== c || void 0 !== u))) && + s(t, g.TRANSFORM_STYLE_PREFIXED, w); + var o, h, l, c, u, f; + })(t, e, r, i, s); + case K: + return (function (t, e, r, n, i, a) { + var s = a.setStyle, + o = n.actionTypeId, + h = n.config; + switch (o) { + case it: + var l = n.config, + c = l.widthUnit, + f = void 0 === c ? '' : c, + p = l.heightUnit, + d = void 0 === p ? '' : p, + m = r.widthValue, + v = r.heightValue; + void 0 !== m && (f === H && (f = 'px'), Ct(t, O, a), s(t, O, m + f)), + void 0 !== v && (d === H && (d = 'px'), Ct(t, F, a), s(t, F, v + d)); + break; + case nt: + !(function (t, e, r, n) { + var i = (0, u.default)( + e, + function (t, e, n) { + return ''.concat(t, ' ').concat(n, '(').concat(e).concat(At(n, r), ')'); + }, + '', + ), + a = n.setStyle; + Ct(t, M, n), a(t, M, i); + })(t, r, h, a); + break; + case at: + case st: + case ot: + var y = ut[o], + g = Math.round(r.rValue), + E = Math.round(r.gValue), + b = Math.round(r.bValue), + _ = r.aValue; + Ct(t, y, a), + s( + t, + y, + _ >= 1 + ? 'rgb('.concat(g, ',').concat(E, ',').concat(b, ')') + : 'rgba('.concat(g, ',').concat(E, ',').concat(b, ',').concat(_, ')'), + ); + break; + default: + var x = h.unit, + S = void 0 === x ? '' : x; + Ct(t, i, a), s(t, i, r.value + S); + } + })(t, 0, r, i, a, s); + case Y: + return (function (t, e, r) { + var n = r.setStyle; + switch (e.actionTypeId) { + case ht: + var i = e.config.value; + return void (i === C && g.IS_BROWSER_ENV ? n(t, j, g.FLEX_PREFIXED) : n(t, j, i)); + } + })(t, i, s); + case Q: + var l = i.actionTypeId; + if ((0, y.isPluginType)(l)) return (0, y.renderPlugin)(l)(h, e, i); + } + }), + (e.clearAllStyles = function (t) { + var e = t.store, + r = t.elementApi, + n = e.getState().ixData, + i = n.events, + a = void 0 === i ? {} : i, + s = n.actionLists, + o = void 0 === s ? {} : s; + Object.keys(a).forEach(function (t) { + var e = a[t], + n = e.action.config, + i = n.actionListId, + s = o[i]; + s && Mt({ actionList: s, event: e, elementApi: r }); + }), + Object.keys(o).forEach(function (t) { + Mt({ actionList: o[t], elementApi: r }); + }); + }), + (e.cleanupHTMLElement = function (t, e, r) { + var n = r.setStyle, + i = r.getStyle, + a = e.actionTypeId; + if (a === it) { + var s = e.config; + s.widthUnit === H && n(t, O, ''), s.heightUnit === H && n(t, F, ''); + } + i(t, z) && Ft({ effect: Dt, actionTypeId: a, elementApi: r })(t); + }), + (e.getMaxDurationItemIndex = Rt), + (e.getActionListProgress = function (t, e) { + var r = t.actionItemGroups, + n = t.useFirstGroupAsInitialState, + i = e.actionItem, + a = e.verboseTimeElapsed, + s = void 0 === a ? 0 : a, + o = 0, + h = 0; + return ( + r.forEach(function (t, e) { + if (!n || 0 !== e) { + var r = t.actionItems, + a = r[Rt(r)], + l = a.config, + c = a.actionTypeId; + i.id === a.id && (h = o + s); + var u = xt(c) === Y ? 0 : l.duration; + o += l.delay + u; + } + }), + o > 0 ? (0, v.optimizeFloat)(h / o) : 0 + ); + }), + (e.reduceListToGroup = function (t) { + var e = t.actionList, + r = t.actionItemId, + n = t.rawData, + i = e.actionItemGroups, + a = e.continuousParameterGroups, + s = [], + o = function (t) { + return s.push((0, p.mergeIn)(t, ['config'], { delay: 0, duration: 0 })), t.id === r; + }; + return ( + i && + i.some(function (t) { + return t.actionItems.some(o); + }), + a && + a.some(function (t) { + return t.continuousActionGroups.some(function (t) { + return t.actionItems.some(o); + }); + }), + (0, p.setIn)( + n, + ['actionLists'], + (0, h.default)({}, e.id, { id: e.id, actionItemGroups: [{ actionItems: s }] }), + ) + ); + }), + (e.shouldNamespaceEventParameter = function (t, e) { + var r = e.basedOn; + return ( + (t === d.EventTypeConsts.SCROLLING_IN_VIEW && + (r === d.EventBasedOn.ELEMENT || null == r)) || + (t === d.EventTypeConsts.MOUSE_MOVE && r === d.EventBasedOn.ELEMENT) + ); + }), + (e.getNamespacedParameterId = function (t, e) { + return t + W + e; + }), + (e.shouldAllowMediaQuery = function (t, e) { + if (null == e) return !0; + return -1 !== t.indexOf(e); + }), + (e.mediaQueriesEqual = function (t, e) { + return (0, m.default)(t && t.sort(), e && e.sort()); + }), + (e.stringifyTarget = function (t) { + if ('string' == typeof t) return t; + var e = t.id, + r = void 0 === e ? '' : e, + n = t.selector, + i = void 0 === n ? '' : n, + a = t.useEventTarget; + return r + U + i + U + (void 0 === a ? '' : a); + }), + Object.defineProperty(e, 'shallowEqual', { + enumerable: !0, + get: function () { + return m.default; + }, + }), + (e.getItemConfigByKey = void 0); + var c = l(r(400)), + u = l(r(401)), + f = l(r(407)), + p = r(57), + d = r(13), + m = l(r(409)), + v = r(179), + y = r(181), + g = r(119), + E = d.IX2EngineConstants, + b = E.BACKGROUND, + _ = E.TRANSFORM, + x = E.TRANSLATE_3D, + S = E.SCALE_3D, + T = E.ROTATE_X, + A = E.ROTATE_Y, + I = E.ROTATE_Z, + P = E.SKEW, + w = E.PRESERVE_3D, + C = E.FLEX, + D = E.OPACITY, + M = E.FILTER, + O = E.WIDTH, + F = E.HEIGHT, + k = E.BACKGROUND_COLOR, + R = E.BORDER_COLOR, + L = E.COLOR, + N = E.CHILDREN, + V = E.IMMEDIATE_CHILDREN, + B = E.SIBLINGS, + G = E.PARENT, + j = E.DISPLAY, + z = E.WILL_CHANGE, + H = E.AUTO, + X = E.COMMA_DELIMITER, + W = E.COLON_DELIMITER, + U = E.BAR_DELIMITER, + q = E.RENDER_TRANSFORM, + Y = E.RENDER_GENERAL, + K = E.RENDER_STYLE, + Q = E.RENDER_PLUGIN, + $ = d.ActionTypeConsts, + Z = $.TRANSFORM_MOVE, + J = $.TRANSFORM_SCALE, + tt = $.TRANSFORM_ROTATE, + et = $.TRANSFORM_SKEW, + rt = $.STYLE_OPACITY, + nt = $.STYLE_FILTER, + it = $.STYLE_SIZE, + at = $.STYLE_BACKGROUND_COLOR, + st = $.STYLE_BORDER, + ot = $.STYLE_TEXT_COLOR, + ht = $.GENERAL_DISPLAY, + lt = 'OBJECT_VALUE', + ct = function (t) { + return t.trim(); + }, + ut = Object.freeze( + ((n = {}), (0, h.default)(n, at, k), (0, h.default)(n, st, R), (0, h.default)(n, ot, L), n), + ), + ft = Object.freeze( + ((i = {}), + (0, h.default)(i, g.TRANSFORM_PREFIXED, _), + (0, h.default)(i, k, b), + (0, h.default)(i, D, D), + (0, h.default)(i, M, M), + (0, h.default)(i, O, O), + (0, h.default)(i, F, F), + i), + ), + pt = {}, + dt = 1; + var mt = 1; + var vt = function (t, e) { + return t === e; + }; + function yt(t) { + var e = (0, o.default)(t); + return 'string' === e + ? { id: t } + : null != t && 'object' === e + ? { + id: t.id, + objectId: t.objectId, + selector: t.selector, + selectorGuids: t.selectorGuids, + appliesTo: t.appliesTo, + useEventTarget: t.useEventTarget, + } + : {}; + } + function gt(t) { + var e, + r, + n, + i = t.config, + a = t.event, + s = t.eventTarget, + o = t.elementRoot, + h = t.elementApi; + if (!h) throw new Error('IX2 missing elementApi'); + var l = i.targets; + if (Array.isArray(l) && l.length > 0) + return l.reduce(function (t, e) { + return t.concat( + gt({ config: { target: e }, event: a, eventTarget: s, elementRoot: o, elementApi: h }), + ); + }, []); + var c = h.getValidDocument, + u = h.getQuerySelector, + f = h.queryDocument, + p = h.getChildElements, + m = h.getSiblingElements, + v = h.matchSelector, + y = h.elementContains, + E = h.isSiblingNode, + b = i.target; + if (!b) return []; + var _ = yt(b), + x = _.id, + S = _.objectId, + T = _.selector, + A = _.selectorGuids, + I = _.appliesTo, + P = _.useEventTarget; + if (S) return [pt[S] || (pt[S] = {})]; + if (I === d.EventAppliesTo.PAGE) { + var w = c(x); + return w ? [w] : []; + } + var C, + D, + M, + O = + (null !== + (e = + null == a + ? void 0 + : null === (r = a.action) || void 0 === r + ? void 0 + : null === (n = r.config) || void 0 === n + ? void 0 + : n.affectedElements) && void 0 !== e + ? e + : {})[x || T] || {}, + F = Boolean(O.id || O.selector), + k = a && u(yt(a.target)); + if ( + (F + ? ((C = O.limitAffectedElements), (D = k), (M = u(O))) + : (D = M = u({ id: x, selector: T, selectorGuids: A })), + a && P) + ) { + var R = s && (M || !0 === P) ? [s] : f(k); + if (M) { + if (P === G) + return f(M).filter(function (t) { + return R.some(function (e) { + return y(t, e); + }); + }); + if (P === N) + return f(M).filter(function (t) { + return R.some(function (e) { + return y(e, t); + }); + }); + if (P === B) + return f(M).filter(function (t) { + return R.some(function (e) { + return E(e, t); + }); + }); + } + return R; + } + return null == D || null == M + ? [] + : g.IS_BROWSER_ENV && o + ? f(M).filter(function (t) { + return o.contains(t); + }) + : C === N + ? f(D, M) + : C === V + ? p(f(D)).filter(v(M)) + : C === B + ? m(f(D)).filter(v(M)) + : f(M); + } + var Et = /px/, + bt = function (t, e) { + return e.reduce(function (t, e) { + return null == t[e.type] && (t[e.type] = Tt[e.type]), t; + }, t || {}); + }; + var _t = function (t, e) { + return e && (t[e.type] = e.value || 0), t; + }; + function xt(t) { + return /^TRANSFORM_/.test(t) + ? q + : /^STYLE_/.test(t) + ? K + : /^GENERAL_/.test(t) + ? Y + : /^PLUGIN_/.test(t) + ? Q + : void 0; + } + e.getItemConfigByKey = function (t, e, r) { + if ((0, y.isPluginType)(t)) return (0, y.getPluginConfig)(t)(r, e); + switch (t) { + case nt: + var n = (0, f.default)(r.filters, function (t) { + return t.type === e; + }); + return n ? n.value : 0; + default: + return r[e]; + } + }; + var St = + ((a = {}), + (0, h.default)(a, Z, Object.freeze({ xValue: 0, yValue: 0, zValue: 0 })), + (0, h.default)(a, J, Object.freeze({ xValue: 1, yValue: 1, zValue: 1 })), + (0, h.default)(a, tt, Object.freeze({ xValue: 0, yValue: 0, zValue: 0 })), + (0, h.default)(a, et, Object.freeze({ xValue: 0, yValue: 0 })), + a), + Tt = Object.freeze({ + blur: 0, + 'hue-rotate': 0, + invert: 0, + grayscale: 0, + saturate: 100, + sepia: 0, + contrast: 100, + brightness: 100, + }), + At = function (t, e) { + var r = (0, f.default)(e.filters, function (e) { + return e.type === t; + }); + if (r && r.unit) return r.unit; + switch (t) { + case 'blur': + return 'px'; + case 'hue-rotate': + return 'deg'; + default: + return '%'; + } + }, + It = Object.keys(St); + var Pt = /^rgb/, + wt = RegExp('rgba?'.concat('\\(([^)]+)\\)')); + function Ct(t, e, r) { + if (g.IS_BROWSER_ENV) { + var n = ft[e]; + if (n) { + var i = r.getStyle, + a = r.setStyle, + s = i(t, z); + if (s) { + var o = s.split(X).map(ct); + -1 === o.indexOf(n) && a(t, z, o.concat(n).join(X)); + } else a(t, z, n); + } + } + } + function Dt(t, e, r) { + if (g.IS_BROWSER_ENV) { + var n = ft[e]; + if (n) { + var i = r.getStyle, + a = r.setStyle, + s = i(t, z); + s && + -1 !== s.indexOf(n) && + a( + t, + z, + s + .split(X) + .map(ct) + .filter(function (t) { + return t !== n; + }) + .join(X), + ); + } + } + } + function Mt(t) { + var e = t.actionList, + r = void 0 === e ? {} : e, + n = t.event, + i = t.elementApi, + a = r.actionItemGroups, + s = r.continuousParameterGroups; + a && + a.forEach(function (t) { + Ot({ actionGroup: t, event: n, elementApi: i }); + }), + s && + s.forEach(function (t) { + t.continuousActionGroups.forEach(function (t) { + Ot({ actionGroup: t, event: n, elementApi: i }); + }); + }); + } + function Ot(t) { + var e = t.actionGroup, + r = t.event, + n = t.elementApi; + e.actionItems.forEach(function (t) { + var e, + i = t.actionTypeId, + a = t.config; + (e = (0, y.isPluginType)(i) + ? (0, y.clearPlugin)(i) + : Ft({ effect: kt, actionTypeId: i, elementApi: n })), + gt({ config: a, event: r, elementApi: n }).forEach(e); + }); + } + var Ft = function (t) { + var e = t.effect, + r = t.actionTypeId, + n = t.elementApi; + return function (t) { + switch (r) { + case Z: + case J: + case tt: + case et: + e(t, g.TRANSFORM_PREFIXED, n); + break; + case nt: + e(t, M, n); + break; + case rt: + e(t, D, n); + break; + case it: + e(t, O, n), e(t, F, n); + break; + case at: + case st: + case ot: + e(t, ut[r], n); + break; + case ht: + e(t, j, n); + } + }; + }; + function kt(t, e, r) { + var n = r.setStyle; + Dt(t, e, r), n(t, e, ''), e === g.TRANSFORM_PREFIXED && n(t, g.TRANSFORM_STYLE_PREFIXED, ''); + } + function Rt(t) { + var e = 0, + r = 0; + return ( + t.forEach(function (t, n) { + var i = t.config, + a = i.delay + i.duration; + a >= e && ((e = a), (r = n)); + }), + r + ); + } + }, + function (t, e) { + t.exports = function (t, e) { + return null == t || t != t ? e : t; + }; + }, + function (t, e, r) { + var n = r(402), + i = r(182), + a = r(28), + s = r(406), + o = r(10); + t.exports = function (t, e, r) { + var h = o(t) ? n : s, + l = arguments.length < 3; + return h(t, a(e, 4), r, l, i); + }; + }, + function (t, e) { + t.exports = function (t, e, r, n) { + var i = -1, + a = null == t ? 0 : t.length; + for (n && a && (r = t[++i]); ++i < a; ) r = e(r, t[i], i, t); + return r; + }; + }, + function (t, e, r) { + var n = r(404)(); + t.exports = n; + }, + function (t, e) { + t.exports = function (t) { + return function (e, r, n) { + for (var i = -1, a = Object(e), s = n(e), o = s.length; o--; ) { + var h = s[t ? o : ++i]; + if (!1 === r(a[h], h, a)) break; + } + return e; + }; + }; + }, + function (t, e, r) { + var n = r(40); + t.exports = function (t, e) { + return function (r, i) { + if (null == r) return r; + if (!n(r)) return t(r, i); + for ( + var a = r.length, s = e ? a : -1, o = Object(r); + (e ? s-- : ++s < a) && !1 !== i(o[s], s, o); + + ); + return r; + }; + }; + }, + function (t, e) { + t.exports = function (t, e, r, n, i) { + return ( + i(t, function (t, i, a) { + r = n ? ((n = !1), t) : e(r, t, i, a); + }), + r + ); + }; + }, + function (t, e, r) { + var n = r(176)(r(408)); + t.exports = n; + }, + function (t, e, r) { + var n = r(126), + i = r(28), + a = r(144), + s = Math.max, + o = Math.min; + t.exports = function (t, e, r) { + var h = null == t ? 0 : t.length; + if (!h) return -1; + var l = h - 1; + return ( + void 0 !== r && ((l = a(r)), (l = r < 0 ? s(h + l, 0) : o(l, h - 1))), n(t, i(e, 3), l, !0) + ); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(3)(r(37)); + Object.defineProperty(e, '__esModule', { value: !0 }), (e.default = void 0); + var i = Object.prototype.hasOwnProperty; + function a(t, e) { + return t === e ? 0 !== t || 0 !== e || 1 / t == 1 / e : t != t && e != e; + } + var s = function (t, e) { + if (a(t, e)) return !0; + if ( + 'object' !== (0, n.default)(t) || + null === t || + 'object' !== (0, n.default)(e) || + null === e + ) + return !1; + var r = Object.keys(t), + s = Object.keys(e); + if (r.length !== s.length) return !1; + for (var o = 0; o < r.length; o++) if (!i.call(e, r[o]) || !a(t[r[o]], e[r[o]])) return !1; + return !0; + }; + e.default = s; + }, + function (t, e, r) { + 'use strict'; + Object.defineProperty(e, '__esModule', { value: !0 }), (e.ixInstances = void 0); + var n = r(13), + i = r(45), + a = r(57), + s = n.IX2EngineActionTypes, + o = s.IX2_RAW_DATA_IMPORTED, + h = s.IX2_SESSION_STOPPED, + l = s.IX2_INSTANCE_ADDED, + c = s.IX2_INSTANCE_STARTED, + u = s.IX2_INSTANCE_REMOVED, + f = s.IX2_ANIMATION_FRAME_CHANGED, + p = i.IX2EasingUtils, + d = p.optimizeFloat, + m = p.applyEasing, + v = p.createBezierEasing, + y = n.IX2EngineConstants.RENDER_GENERAL, + g = i.IX2VanillaUtils, + E = g.getItemConfigByKey, + b = g.getRenderType, + _ = g.getStyleProp, + x = function (t, e) { + var r = t.position, + n = t.parameterId, + i = t.actionGroups, + s = t.destinationKeys, + o = t.smoothing, + h = t.restingValue, + l = t.actionTypeId, + c = t.customEasingFn, + u = t.skipMotion, + f = t.skipToValue, + p = e.payload.parameters, + v = Math.max(1 - o, 0.01), + y = p[n]; + null == y && ((v = 1), (y = h)); + var g, + b, + _, + x, + S = Math.max(y, 0) || 0, + T = d(S - r), + A = u ? f : d(r + T * v), + I = 100 * A; + if (A === r && t.current) return t; + for (var P = 0, w = i.length; P < w; P++) { + var C = i[P], + D = C.keyframe, + M = C.actionItems; + if ((0 === P && (g = M[0]), I >= D)) { + g = M[0]; + var O = i[P + 1], + F = O && I !== D; + (b = F ? O.actionItems[0] : null), F && ((_ = D / 100), (x = (O.keyframe - D) / 100)); + } + } + var k = {}; + if (g && !b) + for (var R = 0, L = s.length; R < L; R++) { + var N = s[R]; + k[N] = E(l, N, g.config); + } + else if (g && b && void 0 !== _ && void 0 !== x) + for ( + var V = (A - _) / x, B = g.config.easing, G = m(B, V, c), j = 0, z = s.length; + j < z; + j++ + ) { + var H = s[j], + X = E(l, H, g.config), + W = (E(l, H, b.config) - X) * G + X; + k[H] = W; + } + return (0, a.merge)(t, { position: A, current: k }); + }, + S = function (t, e) { + var r = t, + n = r.active, + i = r.origin, + s = r.start, + o = r.immediate, + h = r.renderType, + l = r.verbose, + c = r.actionItem, + u = r.destination, + f = r.destinationKeys, + p = r.pluginDuration, + v = r.instanceDelay, + g = r.customEasingFn, + E = r.skipMotion, + b = c.config.easing, + _ = c.config, + x = _.duration, + S = _.delay; + null != p && (x = p), (S = null != v ? v : S), h === y ? (x = 0) : (o || E) && (x = S = 0); + var T = e.payload.now; + if (n && i) { + var A = T - (s + S); + if (l) { + var I = T - s, + P = x + S, + w = d(Math.min(Math.max(0, I / P), 1)); + t = (0, a.set)(t, 'verboseTimeElapsed', P * w); + } + if (A < 0) return t; + var C = d(Math.min(Math.max(0, A / x), 1)), + D = m(b, C, g), + M = {}, + O = null; + return ( + f.length && + (O = f.reduce(function (t, e) { + var r = u[e], + n = parseFloat(i[e]) || 0, + a = (parseFloat(r) - n) * D + n; + return (t[e] = a), t; + }, {})), + (M.current = O), + (M.position = C), + 1 === C && ((M.active = !1), (M.complete = !0)), + (0, a.merge)(t, M) + ); + } + return t; + }; + e.ixInstances = function () { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : Object.freeze({}), + e = arguments.length > 1 ? arguments[1] : void 0; + switch (e.type) { + case o: + return e.payload.ixInstances || Object.freeze({}); + case h: + return Object.freeze({}); + case l: + var r = e.payload, + n = r.instanceId, + i = r.elementId, + s = r.actionItem, + p = r.eventId, + d = r.eventTarget, + m = r.eventStateKey, + y = r.actionListId, + g = r.groupIndex, + E = r.isCarrier, + T = r.origin, + A = r.destination, + I = r.immediate, + P = r.verbose, + w = r.continuous, + C = r.parameterId, + D = r.actionGroups, + M = r.smoothing, + O = r.restingValue, + F = r.pluginInstance, + k = r.pluginDuration, + R = r.instanceDelay, + L = r.skipMotion, + N = r.skipToValue, + V = s.actionTypeId, + B = b(V), + G = _(B, V), + j = Object.keys(A).filter(function (t) { + return null != A[t]; + }), + z = s.config.easing; + return (0, a.set)(t, n, { + id: n, + elementId: i, + active: !1, + position: 0, + start: 0, + origin: T, + destination: A, + destinationKeys: j, + immediate: I, + verbose: P, + current: null, + actionItem: s, + actionTypeId: V, + eventId: p, + eventTarget: d, + eventStateKey: m, + actionListId: y, + groupIndex: g, + renderType: B, + isCarrier: E, + styleProp: G, + continuous: w, + parameterId: C, + actionGroups: D, + smoothing: M, + restingValue: O, + pluginInstance: F, + pluginDuration: k, + instanceDelay: R, + skipMotion: L, + skipToValue: N, + customEasingFn: Array.isArray(z) && 4 === z.length ? v(z) : void 0, + }); + case c: + var H = e.payload, + X = H.instanceId, + W = H.time; + return (0, a.mergeIn)(t, [X], { active: !0, complete: !1, start: W }); + case u: + var U = e.payload.instanceId; + if (!t[U]) return t; + for (var q = {}, Y = Object.keys(t), K = Y.length, Q = 0; Q < K; Q++) { + var $ = Y[Q]; + $ !== U && (q[$] = t[$]); + } + return q; + case f: + for (var Z = t, J = Object.keys(t), tt = J.length, et = 0; et < tt; et++) { + var rt = J[et], + nt = t[rt], + it = nt.continuous ? x : S; + Z = (0, a.set)(Z, rt, it(nt, e)); + } + return Z; + default: + return t; + } + }; + }, + function (t, e, r) { + 'use strict'; + Object.defineProperty(e, '__esModule', { value: !0 }), (e.ixParameters = void 0); + var n = r(13).IX2EngineActionTypes, + i = n.IX2_RAW_DATA_IMPORTED, + a = n.IX2_SESSION_STOPPED, + s = n.IX2_PARAMETER_CHANGED; + e.ixParameters = function () { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = arguments.length > 1 ? arguments[1] : void 0; + switch (e.type) { + case i: + return e.payload.ixParameters || {}; + case a: + return {}; + case s: + var r = e.payload, + n = r.key, + o = r.value; + return (t[n] = o), t; + default: + return t; + } + }; + }, + function (t, e) { + t.exports = function (t, e) { + if (null == t) return {}; + var r, + n, + i = {}, + a = Object.keys(t); + for (n = 0; n < a.length; n++) (r = a[n]), e.indexOf(r) >= 0 || (i[r] = t[r]); + return i; + }; + }, + function (t, e, r) { + var n = r(87), + i = r(89), + a = r(40), + s = r(414), + o = r(415), + h = '[object Map]', + l = '[object Set]'; + t.exports = function (t) { + if (null == t) return 0; + if (a(t)) return s(t) ? o(t) : t.length; + var e = i(t); + return e == h || e == l ? t.size : n(t).length; + }; + }, + function (t, e, r) { + var n = r(39), + i = r(10), + a = r(30), + s = '[object String]'; + t.exports = function (t) { + return 'string' == typeof t || (!i(t) && a(t) && n(t) == s); + }; + }, + function (t, e, r) { + var n = r(416), + i = r(417), + a = r(418); + t.exports = function (t) { + return i(t) ? a(t) : n(t); + }; + }, + function (t, e, r) { + var n = r(143)('length'); + t.exports = n; + }, + function (t, e) { + var r = RegExp( + '[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]', + ); + t.exports = function (t) { + return r.test(t); + }; + }, + function (t, e) { + var r = '[\\ud800-\\udfff]', + n = '[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]', + i = '\\ud83c[\\udffb-\\udfff]', + a = '[^\\ud800-\\udfff]', + s = '(?:\\ud83c[\\udde6-\\uddff]){2}', + o = '[\\ud800-\\udbff][\\udc00-\\udfff]', + h = '(?:' + n + '|' + i + ')' + '?', + l = + '[\\ufe0e\\ufe0f]?' + + h + + ('(?:\\u200d(?:' + [a, s, o].join('|') + ')[\\ufe0e\\ufe0f]?' + h + ')*'), + c = '(?:' + [a + n + '?', n, s, o, r].join('|') + ')', + u = RegExp(i + '(?=' + i + ')|' + c + l, 'g'); + t.exports = function (t) { + for (var e = (u.lastIndex = 0); u.test(t); ) ++e; + return e; + }; + }, + function (t, e, r) { + var n = r(28), + i = r(420), + a = r(421); + t.exports = function (t, e) { + return a(t, i(n(e))); + }; + }, + function (t, e) { + var r = 'Expected a function'; + t.exports = function (t) { + if ('function' != typeof t) throw new TypeError(r); + return function () { + var e = arguments; + switch (e.length) { + case 0: + return !t.call(this); + case 1: + return !t.call(this, e[0]); + case 2: + return !t.call(this, e[0], e[1]); + case 3: + return !t.call(this, e[0], e[1], e[2]); + } + return !t.apply(this, e); + }; + }; + }, + function (t, e, r) { + var n = r(142), + i = r(28), + a = r(422), + s = r(425); + t.exports = function (t, e) { + if (null == t) return {}; + var r = n(s(t), function (t) { + return [t]; + }); + return ( + (e = i(e)), + a(t, r, function (t, r) { + return e(t, r[0]); + }) + ); + }; + }, + function (t, e, r) { + var n = r(91), + i = r(423), + a = r(65); + t.exports = function (t, e, r) { + for (var s = -1, o = e.length, h = {}; ++s < o; ) { + var l = e[s], + c = n(t, l); + r(c, l) && i(h, a(l, t), c); + } + return h; + }; + }, + function (t, e, r) { + var n = r(424), + i = r(65), + a = r(84), + s = r(23), + o = r(48); + t.exports = function (t, e, r, h) { + if (!s(t)) return t; + for (var l = -1, c = (e = i(e, t)).length, u = c - 1, f = t; null != f && ++l < c; ) { + var p = o(e[l]), + d = r; + if ('__proto__' === p || 'constructor' === p || 'prototype' === p) return t; + if (l != u) { + var m = f[p]; + void 0 === (d = h ? h(m, p, f) : void 0) && (d = s(m) ? m : a(e[l + 1]) ? [] : {}); + } + n(f, p, d), (f = f[p]); + } + return t; + }; + }, + function (t, e, r) { + var n = r(185), + i = r(79), + a = Object.prototype.hasOwnProperty; + t.exports = function (t, e, r) { + var s = t[e]; + (a.call(t, e) && i(s, r) && (void 0 !== r || e in t)) || n(t, e, r); + }; + }, + function (t, e, r) { + var n = r(133), + i = r(426), + a = r(428); + t.exports = function (t) { + return n(t, a, i); + }; + }, + function (t, e, r) { + var n = r(82), + i = r(427), + a = r(134), + s = r(135), + o = Object.getOwnPropertySymbols + ? function (t) { + for (var e = []; t; ) n(e, a(t)), (t = i(t)); + return e; + } + : s; + t.exports = o; + }, + function (t, e, r) { + var n = r(138)(Object.getPrototypeOf, Object); + t.exports = n; + }, + function (t, e, r) { + var n = r(136), + i = r(429), + a = r(40); + t.exports = function (t) { + return a(t) ? n(t, !0) : i(t); + }; + }, + function (t, e, r) { + var n = r(23), + i = r(88), + a = r(430), + s = Object.prototype.hasOwnProperty; + t.exports = function (t) { + if (!n(t)) return a(t); + var e = i(t), + r = []; + for (var o in t) ('constructor' != o || (!e && s.call(t, o))) && r.push(o); + return r; + }; + }, + function (t, e) { + t.exports = function (t) { + var e = []; + if (null != t) for (var r in Object(t)) e.push(r); + return e; + }; + }, + function (t, e, r) { + var n = r(87), + i = r(89), + a = r(64), + s = r(10), + o = r(40), + h = r(83), + l = r(88), + c = r(85), + u = '[object Map]', + f = '[object Set]', + p = Object.prototype.hasOwnProperty; + t.exports = function (t) { + if (null == t) return !0; + if ( + o(t) && + (s(t) || 'string' == typeof t || 'function' == typeof t.splice || h(t) || c(t) || a(t)) + ) + return !t.length; + var e = i(t); + if (e == u || e == f) return !t.size; + if (l(t)) return !n(t).length; + for (var r in t) if (p.call(t, r)) return !1; + return !0; + }; + }, + function (t, e, r) { + var n = r(185), + i = r(183), + a = r(28); + t.exports = function (t, e) { + var r = {}; + return ( + (e = a(e, 3)), + i(t, function (t, i, a) { + n(r, i, e(t, i, a)); + }), + r + ); + }; + }, + function (t, e, r) { + var n = r(434), + i = r(182), + a = r(435), + s = r(10); + t.exports = function (t, e) { + return (s(t) ? n : i)(t, a(e)); + }; + }, + function (t, e) { + t.exports = function (t, e) { + for (var r = -1, n = null == t ? 0 : t.length; ++r < n && !1 !== e(t[r], r, t); ); + return t; + }; + }, + function (t, e, r) { + var n = r(93); + t.exports = function (t) { + return 'function' == typeof t ? t : n; + }; + }, + function (t, e, r) { + var n = r(437), + i = r(23), + a = 'Expected a function'; + t.exports = function (t, e, r) { + var s = !0, + o = !0; + if ('function' != typeof t) throw new TypeError(a); + return ( + i(r) && ((s = 'leading' in r ? !!r.leading : s), (o = 'trailing' in r ? !!r.trailing : o)), + n(t, e, { leading: s, maxWait: e, trailing: o }) + ); + }; + }, + function (t, e, r) { + var n = r(23), + i = r(438), + a = r(94), + s = 'Expected a function', + o = Math.max, + h = Math.min; + t.exports = function (t, e, r) { + var l, + c, + u, + f, + p, + d, + m = 0, + v = !1, + y = !1, + g = !0; + if ('function' != typeof t) throw new TypeError(s); + function E(e) { + var r = l, + n = c; + return (l = c = void 0), (m = e), (f = t.apply(n, r)); + } + function b(t) { + var r = t - d; + return void 0 === d || r >= e || r < 0 || (y && t - m >= u); + } + function _() { + var t = i(); + if (b(t)) return x(t); + p = setTimeout( + _, + (function (t) { + var r = e - (t - d); + return y ? h(r, u - (t - m)) : r; + })(t), + ); + } + function x(t) { + return (p = void 0), g && l ? E(t) : ((l = c = void 0), f); + } + function S() { + var t = i(), + r = b(t); + if (((l = arguments), (c = this), (d = t), r)) { + if (void 0 === p) + return (function (t) { + return (m = t), (p = setTimeout(_, e)), v ? E(t) : f; + })(d); + if (y) return clearTimeout(p), (p = setTimeout(_, e)), E(d); + } + return void 0 === p && (p = setTimeout(_, e)), f; + } + return ( + (e = a(e) || 0), + n(r) && + ((v = !!r.leading), + (u = (y = 'maxWait' in r) ? o(a(r.maxWait) || 0, e) : u), + (g = 'trailing' in r ? !!r.trailing : g)), + (S.cancel = function () { + void 0 !== p && clearTimeout(p), (m = 0), (l = d = c = p = void 0); + }), + (S.flush = function () { + return void 0 === p ? f : x(i()); + }), + S + ); + }; + }, + function (t, e, r) { + var n = r(18); + t.exports = function () { + return n.Date.now(); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(3)(r(37)); + Object.defineProperty(e, '__esModule', { value: !0 }), + (e.setStyle = function (t, e, r) { + t.style[e] = r; + }), + (e.getStyle = function (t, e) { + return t.style[e]; + }), + (e.getProperty = function (t, e) { + return t[e]; + }), + (e.matchSelector = function (t) { + return function (e) { + return e[s](t); + }; + }), + (e.getQuerySelector = function (t) { + var e = t.id, + r = t.selector; + if (e) { + var n = e; + if (-1 !== e.indexOf(h)) { + var i = e.split(h), + a = i[0]; + if (((n = i[1]), a !== document.documentElement.getAttribute(u))) return null; + } + return '[data-w-id="'.concat(n, '"], [data-w-id^="').concat(n, '_instance"]'); + } + return r; + }), + (e.getValidDocument = function (t) { + if (null == t || t === document.documentElement.getAttribute(u)) return document; + return null; + }), + (e.queryDocument = function (t, e) { + return Array.prototype.slice.call(document.querySelectorAll(e ? t + ' ' + e : t)); + }), + (e.elementContains = function (t, e) { + return t.contains(e); + }), + (e.isSiblingNode = function (t, e) { + return t !== e && t.parentNode === e.parentNode; + }), + (e.getChildElements = function (t) { + for (var e = [], r = 0, n = (t || []).length; r < n; r++) { + var i = t[r].children, + a = i.length; + if (a) for (var s = 0; s < a; s++) e.push(i[s]); + } + return e; + }), + (e.getSiblingElements = function () { + for ( + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], + e = [], + r = [], + n = 0, + i = t.length; + n < i; + n++ + ) { + var a = t[n].parentNode; + if (a && a.children && a.children.length && -1 === r.indexOf(a)) { + r.push(a); + for (var s = a.firstElementChild; null != s; ) + -1 === t.indexOf(s) && e.push(s), (s = s.nextElementSibling); + } + } + return e; + }), + (e.getRefType = function (t) { + if (null != t && 'object' == (0, n.default)(t)) return t instanceof Element ? l : c; + return null; + }), + (e.getClosestElement = void 0); + var i = r(45), + a = r(13), + s = i.IX2BrowserSupport.ELEMENT_MATCHES, + o = a.IX2EngineConstants, + h = o.IX2_ID_DELIMITER, + l = o.HTML_ELEMENT, + c = o.PLAIN_OBJECT, + u = o.WF_PAGE; + var f = Element.prototype.closest + ? function (t, e) { + return document.documentElement.contains(t) ? t.closest(e) : null; + } + : function (t, e) { + if (!document.documentElement.contains(t)) return null; + var r = t; + do { + if (r[s] && r[s](e)) return r; + r = r.parentNode; + } while (null != r); + return null; + }; + e.getClosestElement = f; + }, + function (t, e, r) { + 'use strict'; + var n, + i = r(3), + a = i(r(38)), + s = i(r(37)), + o = r(3); + Object.defineProperty(e, '__esModule', { value: !0 }), (e.default = void 0); + var h, + l, + c, + u = o(r(46)), + f = o(r(441)), + p = o(r(90)), + d = o(r(460)), + m = r(13), + v = r(184), + y = r(120), + g = r(45), + E = m.EventTypeConsts, + b = E.MOUSE_CLICK, + _ = E.MOUSE_SECOND_CLICK, + x = E.MOUSE_DOWN, + S = E.MOUSE_UP, + T = E.MOUSE_OVER, + A = E.MOUSE_OUT, + I = E.DROPDOWN_CLOSE, + P = E.DROPDOWN_OPEN, + w = E.SLIDER_ACTIVE, + C = E.SLIDER_INACTIVE, + D = E.TAB_ACTIVE, + M = E.TAB_INACTIVE, + O = E.NAVBAR_CLOSE, + F = E.NAVBAR_OPEN, + k = E.MOUSE_MOVE, + R = E.PAGE_SCROLL_DOWN, + L = E.SCROLL_INTO_VIEW, + N = E.SCROLL_OUT_OF_VIEW, + V = E.PAGE_SCROLL_UP, + B = E.SCROLLING_IN_VIEW, + G = E.PAGE_FINISH, + j = E.ECOMMERCE_CART_CLOSE, + z = E.ECOMMERCE_CART_OPEN, + H = E.PAGE_START, + X = E.PAGE_SCROLL, + W = 'COMPONENT_ACTIVE', + U = 'COMPONENT_INACTIVE', + q = m.IX2EngineConstants.COLON_DELIMITER, + Y = g.IX2VanillaUtils.getNamespacedParameterId, + K = function (t) { + return function (e) { + return !('object' !== (0, s.default)(e) || !t(e)) || e; + }; + }, + Q = K(function (t) { + return t.element === t.nativeEvent.target; + }), + $ = K(function (t) { + var e = t.element, + r = t.nativeEvent; + return e.contains(r.target); + }), + Z = (0, f.default)([Q, $]), + J = function (t, e) { + if (e) { + var r = t.getState().ixData.events[e]; + if (r && !st[r.eventTypeId]) return r; + } + return null; + }, + tt = function (t, e) { + var r = t.store, + n = t.event, + i = t.element, + a = t.eventStateKey, + s = n.action, + o = n.id, + h = s.config, + l = h.actionListId, + c = h.autoStopEventId, + u = J(r, c); + return ( + u && + (0, v.stopActionGroup)({ + store: r, + eventId: c, + eventTarget: i, + eventStateKey: c + q + a.split(q)[1], + actionListId: (0, p.default)(u, 'action.config.actionListId'), + }), + (0, v.stopActionGroup)({ + store: r, + eventId: o, + eventTarget: i, + eventStateKey: a, + actionListId: l, + }), + (0, v.startActionGroup)({ + store: r, + eventId: o, + eventTarget: i, + eventStateKey: a, + actionListId: l, + }), + e + ); + }, + et = function (t, e) { + return function (r, n) { + return !0 === t(r, n) ? e(r, n) : n; + }; + }, + rt = { handler: et(Z, tt) }, + nt = (0, u.default)({}, rt, { types: [W, U].join(' ') }), + it = [ + { target: window, types: 'resize orientationchange', throttle: !0 }, + { target: document, types: 'scroll wheel readystatechange IX2_PAGE_UPDATE', throttle: !0 }, + ], + at = { types: it }, + st = { PAGE_START: H, PAGE_FINISH: G }, + ot = + ((h = void 0 !== window.pageXOffset), + (l = 'CSS1Compat' === document.compatMode ? document.documentElement : document.body), + function () { + return { + scrollLeft: h ? window.pageXOffset : l.scrollLeft, + scrollTop: h ? window.pageYOffset : l.scrollTop, + stiffScrollTop: (0, d.default)( + h ? window.pageYOffset : l.scrollTop, + 0, + l.scrollHeight - window.innerHeight, + ), + scrollWidth: l.scrollWidth, + scrollHeight: l.scrollHeight, + clientWidth: l.clientWidth, + clientHeight: l.clientHeight, + innerWidth: window.innerWidth, + innerHeight: window.innerHeight, + }; + }), + ht = function (t) { + var e = t.element, + r = t.nativeEvent, + n = r.type, + i = r.target, + a = r.relatedTarget, + s = e.contains(i); + if ('mouseover' === n && s) return !0; + var o = e.contains(a); + return !('mouseout' !== n || !s || !o); + }, + lt = function (t) { + var e, + r, + n = t.element, + i = t.event.config, + a = ot(), + s = a.clientWidth, + o = a.clientHeight, + h = i.scrollOffsetValue, + l = 'PX' === i.scrollOffsetUnit ? h : (o * (h || 0)) / 100; + return ( + (e = n.getBoundingClientRect()), + (r = { left: 0, top: l, right: s, bottom: o - l }), + !(e.left > r.right || e.right < r.left || e.top > r.bottom || e.bottom < r.top) + ); + }, + ct = function (t) { + return function (e, r) { + var n = e.nativeEvent.type, + i = -1 !== [W, U].indexOf(n) ? n === W : r.isActive, + a = (0, u.default)({}, r, { isActive: i }); + return r && a.isActive === r.isActive ? a : t(e, a) || a; + }; + }, + ut = function (t) { + return function (e, r) { + var n = { elementHovered: ht(e) }; + return ((r ? n.elementHovered !== r.elementHovered : n.elementHovered) && t(e, n)) || n; + }; + }, + ft = function (t) { + return function (e) { + var r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + n = ot(), + i = n.stiffScrollTop, + a = n.scrollHeight, + s = n.innerHeight, + o = e.event, + h = o.config, + l = o.eventTypeId, + c = h.scrollOffsetValue, + f = 'PX' === h.scrollOffsetUnit, + p = a - s, + d = Number((i / p).toFixed(2)); + if (r && r.percentTop === d) return r; + var m, + v, + y = (f ? c : (s * (c || 0)) / 100) / p, + g = 0; + r && ((m = d > r.percentTop), (g = (v = r.scrollingDown !== m) ? d : r.anchorTop)); + var E = l === R ? d >= g + y : d <= g - y, + b = (0, u.default)({}, r, { + percentTop: d, + inBounds: E, + anchorTop: g, + scrollingDown: m, + }); + return (r && E && (v || b.inBounds !== r.inBounds) && t(e, b)) || b; + }; + }, + pt = function (t) { + return function (e) { + var r = + arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { clickCount: 0 }, + n = { clickCount: (r.clickCount % 2) + 1 }; + return (n.clickCount !== r.clickCount && t(e, n)) || n; + }; + }, + dt = function () { + var t = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0]; + return (0, u.default)({}, nt, { + handler: et( + t ? Z : Q, + ct(function (t, e) { + return e.isActive ? rt.handler(t, e) : e; + }), + ), + }); + }, + mt = function () { + var t = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0]; + return (0, u.default)({}, nt, { + handler: et( + t ? Z : Q, + ct(function (t, e) { + return e.isActive ? e : rt.handler(t, e); + }), + ), + }); + }, + vt = (0, u.default)({}, at, { + handler: + ((c = function (t, e) { + var r = e.elementVisible, + n = t.event; + return !t.store.getState().ixData.events[n.action.config.autoStopEventId] && e.triggered + ? e + : (n.eventTypeId === L) === r + ? (tt(t), (0, u.default)({}, e, { triggered: !0 })) + : e; + }), + function (t, e) { + var r = (0, u.default)({}, e, { elementVisible: lt(t) }); + return ((e ? r.elementVisible !== e.elementVisible : r.elementVisible) && c(t, r)) || r; + }), + }), + yt = + ((n = {}), + (0, a.default)(n, w, dt()), + (0, a.default)(n, C, mt()), + (0, a.default)(n, P, dt()), + (0, a.default)(n, I, mt()), + (0, a.default)(n, F, dt(!1)), + (0, a.default)(n, O, mt(!1)), + (0, a.default)(n, D, dt()), + (0, a.default)(n, M, mt()), + (0, a.default)(n, z, { types: 'ecommerce-cart-open', handler: et(Z, tt) }), + (0, a.default)(n, j, { types: 'ecommerce-cart-close', handler: et(Z, tt) }), + (0, a.default)(n, b, { + types: 'click', + handler: et( + Z, + pt(function (t, e) { + var r, + n, + i, + a = e.clickCount; + (n = (r = t).store), + (i = r.event.action.config.autoStopEventId), + Boolean(J(n, i)) ? 1 === a && tt(t) : tt(t); + }), + ), + }), + (0, a.default)(n, _, { + types: 'click', + handler: et( + Z, + pt(function (t, e) { + 2 === e.clickCount && tt(t); + }), + ), + }), + (0, a.default)(n, x, (0, u.default)({}, rt, { types: 'mousedown' })), + (0, a.default)(n, S, (0, u.default)({}, rt, { types: 'mouseup' })), + (0, a.default)(n, T, { + types: 'mouseover mouseout', + handler: et( + Z, + ut(function (t, e) { + e.elementHovered && tt(t); + }), + ), + }), + (0, a.default)(n, A, { + types: 'mouseover mouseout', + handler: et( + Z, + ut(function (t, e) { + e.elementHovered || tt(t); + }), + ), + }), + (0, a.default)(n, k, { + types: 'mousemove mouseout scroll', + handler: function (t) { + var e = t.store, + r = t.element, + n = t.eventConfig, + i = t.nativeEvent, + a = t.eventStateKey, + s = + arguments.length > 1 && void 0 !== arguments[1] + ? arguments[1] + : { clientX: 0, clientY: 0, pageX: 0, pageY: 0 }, + o = n.basedOn, + h = n.selectedAxis, + l = n.continuousParameterGroupId, + c = n.reverse, + u = n.restingState, + f = void 0 === u ? 0 : u, + p = i.clientX, + d = void 0 === p ? s.clientX : p, + v = i.clientY, + g = void 0 === v ? s.clientY : v, + E = i.pageX, + b = void 0 === E ? s.pageX : E, + _ = i.pageY, + x = void 0 === _ ? s.pageY : _, + S = 'X_AXIS' === h, + T = 'mouseout' === i.type, + A = f / 100, + I = l, + P = !1; + switch (o) { + case m.EventBasedOn.VIEWPORT: + A = S + ? Math.min(d, window.innerWidth) / window.innerWidth + : Math.min(g, window.innerHeight) / window.innerHeight; + break; + case m.EventBasedOn.PAGE: + var w = ot(), + C = w.scrollLeft, + D = w.scrollTop, + M = w.scrollWidth, + O = w.scrollHeight; + A = S ? Math.min(C + b, M) / M : Math.min(D + x, O) / O; + break; + case m.EventBasedOn.ELEMENT: + default: + I = Y(a, l); + var F = 0 === i.type.indexOf('mouse'); + if (F && !0 !== Z({ element: r, nativeEvent: i })) break; + var k = r.getBoundingClientRect(), + R = k.left, + L = k.top, + N = k.width, + V = k.height; + if ( + !F && + !(function (t, e) { + return t.left > e.left && t.left < e.right && t.top > e.top && t.top < e.bottom; + })({ left: d, top: g }, k) + ) + break; + (P = !0), (A = S ? (d - R) / N : (g - L) / V); + } + return ( + T && (A > 0.95 || A < 0.05) && (A = Math.round(A)), + (o !== m.EventBasedOn.ELEMENT || P || P !== s.elementHovered) && + ((A = c ? 1 - A : A), e.dispatch((0, y.parameterChanged)(I, A))), + { elementHovered: P, clientX: d, clientY: g, pageX: b, pageY: x } + ); + }, + }), + (0, a.default)(n, X, { + types: it, + handler: function (t) { + var e = t.store, + r = t.eventConfig, + n = r.continuousParameterGroupId, + i = r.reverse, + a = ot(), + s = a.scrollTop / (a.scrollHeight - a.clientHeight); + (s = i ? 1 - s : s), e.dispatch((0, y.parameterChanged)(n, s)); + }, + }), + (0, a.default)(n, B, { + types: it, + handler: function (t) { + var e = t.element, + r = t.store, + n = t.eventConfig, + i = t.eventStateKey, + a = + arguments.length > 1 && void 0 !== arguments[1] + ? arguments[1] + : { scrollPercent: 0 }, + s = ot(), + o = s.scrollLeft, + h = s.scrollTop, + l = s.scrollWidth, + c = s.scrollHeight, + u = s.clientHeight, + f = n.basedOn, + p = n.selectedAxis, + d = n.continuousParameterGroupId, + v = n.startsEntering, + g = n.startsExiting, + E = n.addEndOffset, + b = n.addStartOffset, + _ = n.addOffsetValue, + x = void 0 === _ ? 0 : _, + S = n.endOffsetValue, + T = void 0 === S ? 0 : S, + A = 'X_AXIS' === p; + if (f === m.EventBasedOn.VIEWPORT) { + var I = A ? o / l : h / c; + return ( + I !== a.scrollPercent && r.dispatch((0, y.parameterChanged)(d, I)), + { scrollPercent: I } + ); + } + var P = Y(i, d), + w = e.getBoundingClientRect(), + C = (b ? x : 0) / 100, + D = (E ? T : 0) / 100; + (C = v ? C : 1 - C), (D = g ? D : 1 - D); + var M = w.top + Math.min(w.height * C, u), + O = w.top + w.height * D - M, + F = Math.min(u + O, c), + k = Math.min(Math.max(0, u - M), F) / F; + return ( + k !== a.scrollPercent && r.dispatch((0, y.parameterChanged)(P, k)), + { scrollPercent: k } + ); + }, + }), + (0, a.default)(n, L, vt), + (0, a.default)(n, N, vt), + (0, a.default)( + n, + R, + (0, u.default)({}, at, { + handler: ft(function (t, e) { + e.scrollingDown && tt(t); + }), + }), + ), + (0, a.default)( + n, + V, + (0, u.default)({}, at, { + handler: ft(function (t, e) { + e.scrollingDown || tt(t); + }), + }), + ), + (0, a.default)(n, G, { + types: 'readystatechange IX2_PAGE_UPDATE', + handler: et( + Q, + (function (t) { + return function (e, r) { + var n = { finished: 'complete' === document.readyState }; + return !n.finished || (r && r.finshed) || t(e), n; + }; + })(tt), + ), + }), + (0, a.default)(n, H, { + types: 'readystatechange IX2_PAGE_UPDATE', + handler: et( + Q, + (function (t) { + return function (e, r) { + return r || t(e), { started: !0 }; + }; + })(tt), + ), + }), + n); + e.default = yt; + }, + function (t, e, r) { + var n = r(442)(); + t.exports = n; + }, + function (t, e, r) { + var n = r(121), + i = r(443), + a = r(188), + s = r(189), + o = r(10), + h = r(456), + l = 'Expected a function', + c = 8, + u = 32, + f = 128, + p = 256; + t.exports = function (t) { + return i(function (e) { + var r = e.length, + i = r, + d = n.prototype.thru; + for (t && e.reverse(); i--; ) { + var m = e[i]; + if ('function' != typeof m) throw new TypeError(l); + if (d && !v && 'wrapper' == s(m)) var v = new n([], !0); + } + for (i = v ? i : r; ++i < r; ) { + m = e[i]; + var y = s(m), + g = 'wrapper' == y ? a(m) : void 0; + v = + g && h(g[0]) && g[1] == (f | c | u | p) && !g[4].length && 1 == g[9] + ? v[s(g[0])].apply(v, g[3]) + : 1 == m.length && h(m) + ? v[y]() + : v.thru(m); + } + return function () { + var t = arguments, + n = t[0]; + if (v && 1 == t.length && o(n)) return v.plant(n).value(); + for (var i = 0, a = r ? e[i].apply(this, t) : n; ++i < r; ) a = e[i].call(this, a); + return a; + }; + }); + }; + }, + function (t, e, r) { + var n = r(444), + i = r(447), + a = r(449); + t.exports = function (t) { + return a(i(t, void 0, n), t + ''); + }; + }, + function (t, e, r) { + var n = r(445); + t.exports = function (t) { + return null != t && t.length ? n(t, 1) : []; + }; + }, + function (t, e, r) { + var n = r(82), + i = r(446); + t.exports = function t(e, r, a, s, o) { + var h = -1, + l = e.length; + for (a || (a = i), o || (o = []); ++h < l; ) { + var c = e[h]; + r > 0 && a(c) ? (r > 1 ? t(c, r - 1, a, s, o) : n(o, c)) : s || (o[o.length] = c); + } + return o; + }; + }, + function (t, e, r) { + var n = r(47), + i = r(64), + a = r(10), + s = n ? n.isConcatSpreadable : void 0; + t.exports = function (t) { + return a(t) || i(t) || !!(s && t && t[s]); + }; + }, + function (t, e, r) { + var n = r(448), + i = Math.max; + t.exports = function (t, e, r) { + return ( + (e = i(void 0 === e ? t.length - 1 : e, 0)), + function () { + for (var a = arguments, s = -1, o = i(a.length - e, 0), h = Array(o); ++s < o; ) + h[s] = a[e + s]; + s = -1; + for (var l = Array(e + 1); ++s < e; ) l[s] = a[s]; + return (l[e] = r(h)), n(t, this, l); + } + ); + }; + }, + function (t, e) { + t.exports = function (t, e, r) { + switch (r.length) { + case 0: + return t.call(e); + case 1: + return t.call(e, r[0]); + case 2: + return t.call(e, r[0], r[1]); + case 3: + return t.call(e, r[0], r[1], r[2]); + } + return t.apply(e, r); + }; + }, + function (t, e, r) { + var n = r(450), + i = r(452)(n); + t.exports = i; + }, + function (t, e, r) { + var n = r(451), + i = r(186), + a = r(93), + s = i + ? function (t, e) { + return i(t, 'toString', { + configurable: !0, + enumerable: !1, + value: n(e), + writable: !0, + }); + } + : a; + t.exports = s; + }, + function (t, e) { + t.exports = function (t) { + return function () { + return t; + }; + }; + }, + function (t, e) { + var r = 800, + n = 16, + i = Date.now; + t.exports = function (t) { + var e = 0, + a = 0; + return function () { + var s = i(), + o = n - (s - a); + if (((a = s), o > 0)) { + if (++e >= r) return arguments[0]; + } else e = 0; + return t.apply(void 0, arguments); + }; + }; + }, + function (t, e, r) { + var n = r(139), + i = n && new n(); + t.exports = i; + }, + function (t, e) { + t.exports = function () {}; + }, + function (t, e) { + t.exports = {}; + }, + function (t, e, r) { + var n = r(123), + i = r(188), + a = r(189), + s = r(457); + t.exports = function (t) { + var e = a(t), + r = s[e]; + if ('function' != typeof r || !(e in n.prototype)) return !1; + if (t === r) return !0; + var o = i(r); + return !!o && t === o[0]; + }; + }, + function (t, e, r) { + var n = r(123), + i = r(121), + a = r(122), + s = r(10), + o = r(30), + h = r(458), + l = Object.prototype.hasOwnProperty; + function c(t) { + if (o(t) && !s(t) && !(t instanceof n)) { + if (t instanceof i) return t; + if (l.call(t, '__wrapped__')) return h(t); + } + return new i(t); + } + (c.prototype = a.prototype), (c.prototype.constructor = c), (t.exports = c); + }, + function (t, e, r) { + var n = r(123), + i = r(121), + a = r(459); + t.exports = function (t) { + if (t instanceof n) return t.clone(); + var e = new i(t.__wrapped__, t.__chain__); + return ( + (e.__actions__ = a(t.__actions__)), + (e.__index__ = t.__index__), + (e.__values__ = t.__values__), + e + ); + }; + }, + function (t, e) { + t.exports = function (t, e) { + var r = -1, + n = t.length; + for (e || (e = Array(n)); ++r < n; ) e[r] = t[r]; + return e; + }; + }, + function (t, e, r) { + var n = r(461), + i = r(94); + t.exports = function (t, e, r) { + return ( + void 0 === r && ((r = e), (e = void 0)), + void 0 !== r && (r = (r = i(r)) == r ? r : 0), + void 0 !== e && (e = (e = i(e)) == e ? e : 0), + n(i(t), e, r) + ); + }; + }, + function (t, e) { + t.exports = function (t, e, r) { + return ( + t == t && (void 0 !== r && (t = t <= r ? t : r), void 0 !== e && (t = t >= e ? t : e)), t + ); + }; + }, + function (t, e, r) { + 'use strict'; + var n = r(22); + n.define( + 'links', + (t.exports = function (t, e) { + var r, + i, + a, + s = {}, + o = t(window), + h = n.env(), + l = window.location, + c = document.createElement('a'), + u = 'w--current', + f = /index\.(html|php)$/, + p = /\/$/; + function d(e) { + var n = (r && e.getAttribute('href-disabled')) || e.getAttribute('href'); + if (((c.href = n), !(n.indexOf(':') >= 0))) { + var s = t(e); + if (c.hash.length > 1 && c.host + c.pathname === l.host + l.pathname) { + if (!/^#[a-zA-Z0-9\-\_]+$/.test(c.hash)) return; + var o = t(c.hash); + o.length && i.push({ link: s, sec: o, active: !1 }); + } else if ('#' !== n && '' !== n) { + var h = c.href === l.href || n === a || (f.test(n) && p.test(a)); + v(s, u, h); + } + } + } + function m() { + var t = o.scrollTop(), + r = o.height(); + e.each(i, function (e) { + var n = e.link, + i = e.sec, + a = i.offset().top, + s = i.outerHeight(), + o = 0.5 * r, + h = i.is(':visible') && a + s - o >= t && a + o <= t + r; + e.active !== h && ((e.active = h), v(n, u, h)); + }); + } + function v(t, e, r) { + var n = t.hasClass(e); + (r && n) || ((r || n) && (r ? t.addClass(e) : t.removeClass(e))); + } + return ( + (s.ready = + s.design = + s.preview = + function () { + (r = h && n.env('design')), + (a = n.env('slug') || l.pathname || ''), + n.scroll.off(m), + (i = []); + for (var t = document.links, e = 0; e < t.length; ++e) d(t[e]); + i.length && (n.scroll.on(m), m()); + }), + s + ); + }), + ); + }, + function (t, e, r) { + 'use strict'; + var n = r(22); + n.define( + 'scroll', + (t.exports = function (t) { + var e = { WF_CLICK_EMPTY: 'click.wf-empty-link', WF_CLICK_SCROLL: 'click.wf-scroll' }, + r = window.location, + i = (function () { + try { + return Boolean(window.frameElement); + } catch (t) { + return !0; + } + })() + ? null + : window.history, + a = t(window), + s = t(document), + o = t(document.body), + h = + window.requestAnimationFrame || + window.mozRequestAnimationFrame || + window.webkitRequestAnimationFrame || + function (t) { + window.setTimeout(t, 15); + }, + l = n.env('editor') ? '.w-editor-body' : 'body', + c = 'header, ' + l + ' > .header, ' + l + ' > .w-nav:not([data-no-scroll])', + u = 'a[href="#"]', + f = 'a[href*="#"]:not(.w-tab-link):not(' + u + ')', + p = document.createElement('style'); + p.appendChild( + document.createTextNode('.wf-force-outline-none[tabindex="-1"]:focus{outline:none;}'), + ); + var d = /^#[a-zA-Z0-9][\w:.-]*$/; + var m = + 'function' == typeof window.matchMedia && + window.matchMedia('(prefers-reduced-motion: reduce)'); + function v(t, e) { + var r; + switch (e) { + case 'add': + (r = t.attr('tabindex')) + ? t.attr('data-wf-tabindex-swap', r) + : t.attr('tabindex', '-1'); + break; + case 'remove': + (r = t.attr('data-wf-tabindex-swap')) + ? (t.attr('tabindex', r), t.removeAttr('data-wf-tabindex-swap')) + : t.removeAttr('tabindex'); + } + t.toggleClass('wf-force-outline-none', 'add' === e); + } + function y(e) { + var s = e.currentTarget; + if ( + !(n.env('design') || (window.$.mobile && /(?:^|\s)ui-link(?:$|\s)/.test(s.className))) + ) { + var l, + u = + ((l = s), + d.test(l.hash) && l.host + l.pathname === r.host + r.pathname ? s.hash : ''); + if ('' !== u) { + var f = t(u); + f.length && + (e && (e.preventDefault(), e.stopPropagation()), + (function (t) { + if ( + r.hash !== t && + i && + i.pushState && + (!n.env.chrome || 'file:' !== r.protocol) + ) { + var e = i.state && i.state.hash; + e !== t && i.pushState({ hash: t }, '', t); + } + })(u), + window.setTimeout( + function () { + !(function (e, r) { + var n = a.scrollTop(), + i = (function (e) { + var r = t(c), + n = 'fixed' === r.css('position') ? r.outerHeight() : 0, + i = e.offset().top - n; + if ('mid' === e.data('scroll')) { + var s = a.height() - n, + o = e.outerHeight(); + o < s && (i -= Math.round((s - o) / 2)); + } + return i; + })(e); + if (n === i) return; + var s = (function (t, e, r) { + if ( + 'none' === document.body.getAttribute('data-wf-scroll-motion') || + m.matches + ) + return 0; + var n = 1; + return ( + o.add(t).each(function (t, e) { + var r = parseFloat(e.getAttribute('data-scroll-time')); + !isNaN(r) && r >= 0 && (n = r); + }), + (472.143 * Math.log(Math.abs(e - r) + 125) - 2e3) * n + ); + })(e, n, i), + l = Date.now(); + h(function t() { + var e = Date.now() - l; + window.scroll( + 0, + (function (t, e, r, n) { + return r > n + ? e + : t + + (e - t) * + ((i = r / n) < 0.5 + ? 4 * i * i * i + : (i - 1) * (2 * i - 2) * (2 * i - 2) + 1); + var i; + })(n, i, e, s), + ), + e <= s ? h(t) : 'function' == typeof r && r(); + }); + })(f, function () { + v(f, 'add'), f.get(0).focus({ preventScroll: !0 }), v(f, 'remove'); + }); + }, + e ? 0 : 300, + )); + } + } + } + return { + ready: function () { + var t = e.WF_CLICK_EMPTY, + r = e.WF_CLICK_SCROLL; + s.on(r, f, y), + s.on(t, u, function (t) { + t.preventDefault(); + }), + document.head.insertBefore(p, document.head.firstChild); + }, + }; + }), + ); + }, + function (t, e, r) { + 'use strict'; + r(22).define( + 'touch', + (t.exports = function (t) { + var e = {}, + r = window.getSelection; + function n(e) { + var n, + i, + a = !1, + s = !1, + o = Math.min(Math.round(0.04 * window.innerWidth), 40); + function h(t) { + var e = t.touches; + (e && e.length > 1) || + ((a = !0), e ? ((s = !0), (n = e[0].clientX)) : (n = t.clientX), (i = n)); + } + function l(e) { + if (a) { + if (s && 'mousemove' === e.type) return e.preventDefault(), void e.stopPropagation(); + var n = e.touches, + h = n ? n[0].clientX : e.clientX, + l = h - i; + (i = h), + Math.abs(l) > o && + r && + '' === String(r()) && + (!(function (e, r, n) { + var i = t.Event(e, { originalEvent: r }); + t(r.target).trigger(i, n); + })('swipe', e, { direction: l > 0 ? 'right' : 'left' }), + u()); + } + } + function c(t) { + if (a) + return ( + (a = !1), + s && 'mouseup' === t.type + ? (t.preventDefault(), t.stopPropagation(), void (s = !1)) + : void 0 + ); + } + function u() { + a = !1; + } + e.addEventListener('touchstart', h, !1), + e.addEventListener('touchmove', l, !1), + e.addEventListener('touchend', c, !1), + e.addEventListener('touchcancel', u, !1), + e.addEventListener('mousedown', h, !1), + e.addEventListener('mousemove', l, !1), + e.addEventListener('mouseup', c, !1), + e.addEventListener('mouseout', u, !1), + (this.destroy = function () { + e.removeEventListener('touchstart', h, !1), + e.removeEventListener('touchmove', l, !1), + e.removeEventListener('touchend', c, !1), + e.removeEventListener('touchcancel', u, !1), + e.removeEventListener('mousedown', h, !1), + e.removeEventListener('mousemove', l, !1), + e.removeEventListener('mouseup', c, !1), + e.removeEventListener('mouseout', u, !1), + (e = null); + }); + } + return ( + (t.event.special.tap = { bindType: 'click', delegateType: 'click' }), + (e.init = function (e) { + return (e = 'string' == typeof e ? t(e).get(0) : e) ? new n(e) : null; + }), + (e.instance = e.init(document)), + e + ); + }), + ); + }, +]); +/** + * ---------------------------------------------------------------------- + * Webflow: Interactions 2.0: Init + */ +Webflow.require('ix2').init({ + events: { + 'e-3': { + id: 'e-3', + name: '', + animationType: 'preset', + eventTypeId: 'MOUSE_CLICK', + action: { + id: '', + actionTypeId: 'GENERAL_START_ACTION', + config: { + delay: 0, + easing: '', + duration: 0, + actionListId: 'a-5', + affectedElements: {}, + playInReverse: false, + autoStopEventId: 'e-4', + }, + }, + mediaQueries: ['main', 'medium', 'small', 'tiny'], + target: { + id: '629f4c28fb3b0cb40479abf6|1b9410f0-a14e-b8e1-0d78-bf17723ad7e8', + appliesTo: 'ELEMENT', + styleBlockIds: [], + }, + targets: [ + { + id: '629f4c28fb3b0cb40479abf6|1b9410f0-a14e-b8e1-0d78-bf17723ad7e8', + appliesTo: 'ELEMENT', + styleBlockIds: [], + }, + ], + config: { + loop: false, + playInReverse: false, + scrollOffsetValue: null, + scrollOffsetUnit: null, + delay: 0, + direction: null, + effectIn: null, + }, + createdOn: 1654623206791, + }, + 'e-4': { + id: 'e-4', + name: '', + animationType: 'preset', + eventTypeId: 'MOUSE_SECOND_CLICK', + action: { + id: '', + actionTypeId: 'GENERAL_START_ACTION', + config: { + delay: 0, + easing: '', + duration: 0, + actionListId: 'a-6', + affectedElements: {}, + playInReverse: false, + autoStopEventId: 'e-3', + }, + }, + mediaQueries: ['main', 'medium', 'small', 'tiny'], + target: { + id: '629f4c28fb3b0cb40479abf6|1b9410f0-a14e-b8e1-0d78-bf17723ad7e8', + appliesTo: 'ELEMENT', + styleBlockIds: [], + }, + targets: [ + { + id: '629f4c28fb3b0cb40479abf6|1b9410f0-a14e-b8e1-0d78-bf17723ad7e8', + appliesTo: 'ELEMENT', + styleBlockIds: [], + }, + ], + config: { + loop: false, + playInReverse: false, + scrollOffsetValue: null, + scrollOffsetUnit: null, + delay: null, + direction: null, + effectIn: null, + }, + createdOn: 1654623206791, + }, + 'e-5': { + id: 'e-5', + name: '', + animationType: 'custom', + eventTypeId: 'PAGE_SCROLL', + action: { + id: '', + actionTypeId: 'GENERAL_CONTINUOUS_ACTION', + config: { actionListId: 'a-3', affectedElements: {}, duration: 0 }, + }, + mediaQueries: ['main', 'medium', 'small', 'tiny'], + target: { id: '629f4c28fb3b0cb40479abf6', appliesTo: 'PAGE', styleBlockIds: [] }, + targets: [{ id: '629f4c28fb3b0cb40479abf6', appliesTo: 'PAGE', styleBlockIds: [] }], + config: [ + { + continuousParameterGroupId: 'a-3-p', + smoothing: 65, + startsEntering: true, + addStartOffset: false, + addOffsetValue: 50, + startsExiting: false, + addEndOffset: false, + endOffsetValue: 50, + }, + ], + createdOn: 1654634674775, + }, + 'e-6': { + id: 'e-6', + name: '', + animationType: 'custom', + eventTypeId: 'MOUSE_MOVE', + action: { + id: '', + actionTypeId: 'GENERAL_CONTINUOUS_ACTION', + config: { actionListId: 'a-4', affectedElements: {}, duration: 0 }, + }, + mediaQueries: ['main', 'medium', 'small', 'tiny'], + target: { id: '629f4c28fb3b0cb40479abf6', appliesTo: 'PAGE', styleBlockIds: [] }, + targets: [{ id: '629f4c28fb3b0cb40479abf6', appliesTo: 'PAGE', styleBlockIds: [] }], + config: [ + { + continuousParameterGroupId: 'a-4-p', + selectedAxis: 'X_AXIS', + basedOn: 'VIEWPORT', + reverse: false, + smoothing: 81, + restingState: 50, + }, + { + continuousParameterGroupId: 'a-4-p-2', + selectedAxis: 'Y_AXIS', + basedOn: 'VIEWPORT', + reverse: false, + smoothing: 81, + restingState: 50, + }, + ], + createdOn: 1654635618018, + }, + 'e-7': { + id: 'e-7', + name: '', + animationType: 'custom', + eventTypeId: 'MOUSE_CLICK', + action: { + id: '', + actionTypeId: 'GENERAL_START_ACTION', + config: { + delay: 0, + easing: '', + duration: 0, + actionListId: 'a-7', + affectedElements: {}, + playInReverse: false, + autoStopEventId: 'e-8', + }, + }, + mediaQueries: ['main', 'medium', 'small', 'tiny'], + target: { + id: '629f4c28fb3b0cb40479abf6|c58b2aca-cf86-ca46-a233-d7594f023944', + appliesTo: 'ELEMENT', + styleBlockIds: [], + }, + targets: [ + { + id: '629f4c28fb3b0cb40479abf6|c58b2aca-cf86-ca46-a233-d7594f023944', + appliesTo: 'ELEMENT', + styleBlockIds: [], + }, + ], + config: { + loop: false, + playInReverse: false, + scrollOffsetValue: null, + scrollOffsetUnit: null, + delay: null, + direction: null, + effectIn: null, + }, + createdOn: 1654715833710, + }, + 'e-8': { + id: 'e-8', + name: '', + animationType: 'custom', + eventTypeId: 'MOUSE_SECOND_CLICK', + action: { + id: '', + actionTypeId: 'GENERAL_START_ACTION', + config: { + delay: 0, + easing: '', + duration: 0, + actionListId: 'a-8', + affectedElements: {}, + playInReverse: false, + autoStopEventId: 'e-7', + }, + }, + mediaQueries: ['main', 'medium', 'small', 'tiny'], + target: { + id: '629f4c28fb3b0cb40479abf6|c58b2aca-cf86-ca46-a233-d7594f023944', + appliesTo: 'ELEMENT', + styleBlockIds: [], + }, + targets: [ + { + id: '629f4c28fb3b0cb40479abf6|c58b2aca-cf86-ca46-a233-d7594f023944', + appliesTo: 'ELEMENT', + styleBlockIds: [], + }, + ], + config: { + loop: false, + playInReverse: false, + scrollOffsetValue: null, + scrollOffsetUnit: null, + delay: null, + direction: null, + effectIn: null, + }, + createdOn: 1654715833710, + }, + }, + actionLists: { + 'a-5': { + id: 'a-5', + title: 'dark-light', + actionItemGroups: [ + { + actionItems: [ + { + id: 'a-5-n', + actionTypeId: 'PLUGIN_LOTTIE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + useEventTarget: true, + id: '629f4c28fb3b0cb40479abf6|1b9410f0-a14e-b8e1-0d78-bf17723ad7e8', + }, + value: 100, + }, + }, + { + id: 'a-5-n-3', + actionTypeId: 'STYLE_OPACITY', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.light', + selectorGuids: ['88b91b30-96aa-5822-0955-226cb9a00395'], + }, + value: 0, + unit: '', + }, + }, + { + id: 'a-5-n-5', + actionTypeId: 'STYLE_BACKGROUND_COLOR', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + useEventTarget: 'PARENT', + selector: '.body', + selectorGuids: ['ec9b1bef-69ef-b531-5ec4-c7eebdd3c6a0'], + }, + globalSwatchId: '', + rValue: 6, + bValue: 29, + gValue: 20, + aValue: 1, + }, + }, + { + id: 'a-5-n-7', + actionTypeId: 'STYLE_TEXT_COLOR', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.header', + selectorGuids: ['918b9c51-1e3a-f24c-3960-45beef0e82df'], + }, + globalSwatchId: '', + rValue: 255, + bValue: 255, + gValue: 255, + aValue: 1, + }, + }, + { + id: 'a-5-n-9', + actionTypeId: 'STYLE_OPACITY', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.dark', + selectorGuids: ['31e65102-23dd-fe01-a89c-1a66a798ca17'], + }, + value: 1, + unit: '', + }, + }, + { + id: 'a-5-n-11', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.hero-png.nap.light', + selectorGuids: [ + '5942ae87-dcb9-b04c-a597-03a28bff3872', + 'ebaed314-b39e-65e4-c3cd-5eb0f824cda9', + 'f6c20463-4fee-7d6f-30d8-496227cb065f', + ], + }, + yValue: 27, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-5-n-13', + actionTypeId: 'STYLE_TEXT_COLOR', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.link', + selectorGuids: ['7a5336e3-56bd-d747-9c2e-4d6d6840a8aa'], + }, + globalSwatchId: '', + rValue: 255, + bValue: 255, + gValue: 255, + aValue: 1, + }, + }, + { + id: 'a-5-n-15', + actionTypeId: 'STYLE_BACKGROUND_COLOR', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.icon.inside', + selectorGuids: [ + '15bd2929-f910-8b28-aae5-dd64cfc8cef2', + 'd806ae32-67d3-b11a-e23e-b221e203443e', + ], + }, + globalSwatchId: '', + rValue: 10, + bValue: 42, + gValue: 32, + aValue: 1, + }, + }, + { + id: 'a-5-n-17', + actionTypeId: 'STYLE_TEXT_COLOR', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.paragraphs', + selectorGuids: ['d47cdb68-0cb9-0002-d4de-7ffbf9a76084'], + }, + globalSwatchId: '', + rValue: 255, + bValue: 255, + gValue: 255, + aValue: 0.6, + }, + }, + { + id: 'a-5-n-19', + actionTypeId: 'STYLE_BACKGROUND_COLOR', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.hero-div', + selectorGuids: ['413e8b80-c5ee-3b51-1465-2463d12c6436'], + }, + globalSwatchId: '', + rValue: 6, + bValue: 29, + gValue: 20, + aValue: 1, + }, + }, + ], + }, + { + actionItems: [ + { + id: 'a-5-n-2', + actionTypeId: 'PLUGIN_LOTTIE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + useEventTarget: true, + id: '629f4c28fb3b0cb40479abf6|1b9410f0-a14e-b8e1-0d78-bf17723ad7e8', + }, + value: 0, + }, + }, + { + id: 'a-5-n-4', + actionTypeId: 'STYLE_OPACITY', + config: { + delay: 0, + easing: 'easeInOut', + duration: 300, + target: { + selector: '.light', + selectorGuids: ['88b91b30-96aa-5822-0955-226cb9a00395'], + }, + value: 1, + unit: '', + }, + }, + { + id: 'a-5-n-6', + actionTypeId: 'STYLE_BACKGROUND_COLOR', + config: { + delay: 0, + easing: 'easeInOut', + duration: 300, + target: { + useEventTarget: 'PARENT', + selector: '.body', + selectorGuids: ['ec9b1bef-69ef-b531-5ec4-c7eebdd3c6a0'], + }, + globalSwatchId: '', + rValue: 246, + bValue: 240, + gValue: 245, + aValue: 1, + }, + }, + { + id: 'a-5-n-8', + actionTypeId: 'STYLE_TEXT_COLOR', + config: { + delay: 0, + easing: 'easeInOut', + duration: 300, + target: { + selector: '.header', + selectorGuids: ['918b9c51-1e3a-f24c-3960-45beef0e82df'], + }, + globalSwatchId: '', + rValue: 6, + bValue: 29, + gValue: 20, + aValue: 1, + }, + }, + { + id: 'a-5-n-12', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: 'easeOut', + duration: 500, + target: { + selector: '.hero-png.nap.light', + selectorGuids: [ + '5942ae87-dcb9-b04c-a597-03a28bff3872', + 'ebaed314-b39e-65e4-c3cd-5eb0f824cda9', + 'f6c20463-4fee-7d6f-30d8-496227cb065f', + ], + }, + yValue: -13, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-5-n-14', + actionTypeId: 'STYLE_TEXT_COLOR', + config: { + delay: 0, + easing: '', + duration: 300, + target: { + selector: '.link', + selectorGuids: ['7a5336e3-56bd-d747-9c2e-4d6d6840a8aa'], + }, + globalSwatchId: '', + rValue: 6, + bValue: 29, + gValue: 20, + aValue: 1, + }, + }, + { + id: 'a-5-n-16', + actionTypeId: 'STYLE_BACKGROUND_COLOR', + config: { + delay: 0, + easing: '', + duration: 300, + target: { + selector: '.icon.inside', + selectorGuids: [ + '15bd2929-f910-8b28-aae5-dd64cfc8cef2', + 'd806ae32-67d3-b11a-e23e-b221e203443e', + ], + }, + globalSwatchId: '', + rValue: 255, + bValue: 255, + gValue: 255, + aValue: 1, + }, + }, + { + id: 'a-5-n-18', + actionTypeId: 'STYLE_TEXT_COLOR', + config: { + delay: 0, + easing: '', + duration: 300, + target: { + selector: '.paragraphs', + selectorGuids: ['d47cdb68-0cb9-0002-d4de-7ffbf9a76084'], + }, + globalSwatchId: '', + rValue: 0, + bValue: 0, + gValue: 0, + aValue: 1, + }, + }, + { + id: 'a-5-n-20', + actionTypeId: 'STYLE_BACKGROUND_COLOR', + config: { + delay: 0, + easing: '', + duration: 300, + target: { + selector: '.hero-div', + selectorGuids: ['413e8b80-c5ee-3b51-1465-2463d12c6436'], + }, + globalSwatchId: '', + rValue: 255, + bValue: 255, + gValue: 255, + aValue: 1, + }, + }, + { + id: 'a-5-n-10', + actionTypeId: 'STYLE_OPACITY', + config: { + delay: 300, + easing: '', + duration: 300, + target: { + selector: '.dark', + selectorGuids: ['31e65102-23dd-fe01-a89c-1a66a798ca17'], + }, + value: 0, + unit: '', + }, + }, + ], + }, + ], + useFirstGroupAsInitialState: true, + createdOn: 1654638089670, + }, + 'a-6': { + id: 'a-6', + title: 'light-dark', + actionItemGroups: [ + { + actionItems: [ + { + id: 'a-6-n', + actionTypeId: 'PLUGIN_LOTTIE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + useEventTarget: true, + id: '629f4c28fb3b0cb40479abf6|1b9410f0-a14e-b8e1-0d78-bf17723ad7e8', + }, + value: 100, + }, + }, + { + id: 'a-6-n-2', + actionTypeId: 'STYLE_BACKGROUND_COLOR', + config: { + delay: 0, + easing: '', + duration: 200, + target: { + useEventTarget: 'PARENT', + selector: '.body', + selectorGuids: ['ec9b1bef-69ef-b531-5ec4-c7eebdd3c6a0'], + }, + globalSwatchId: '', + rValue: 6, + bValue: 29, + gValue: 20, + aValue: 1, + }, + }, + { + id: 'a-6-n-3', + actionTypeId: 'STYLE_OPACITY', + config: { + delay: 0, + easing: '', + duration: 200, + target: { + selector: '.light', + selectorGuids: ['88b91b30-96aa-5822-0955-226cb9a00395'], + }, + value: 0, + unit: '', + }, + }, + { + id: 'a-6-n-4', + actionTypeId: 'STYLE_TEXT_COLOR', + config: { + delay: 0, + easing: '', + duration: 200, + target: { + selector: '.header', + selectorGuids: ['918b9c51-1e3a-f24c-3960-45beef0e82df'], + }, + globalSwatchId: '', + rValue: 255, + bValue: 255, + gValue: 255, + aValue: 1, + }, + }, + { + id: 'a-6-n-5', + actionTypeId: 'STYLE_OPACITY', + config: { + delay: 0, + easing: '', + duration: 200, + target: { + selector: '.dark', + selectorGuids: ['31e65102-23dd-fe01-a89c-1a66a798ca17'], + }, + value: 1, + unit: '', + }, + }, + { + id: 'a-6-n-6', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.hero-png.nap.light', + selectorGuids: [ + '5942ae87-dcb9-b04c-a597-03a28bff3872', + 'ebaed314-b39e-65e4-c3cd-5eb0f824cda9', + 'f6c20463-4fee-7d6f-30d8-496227cb065f', + ], + }, + yValue: 27, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-6-n-7', + actionTypeId: 'STYLE_TEXT_COLOR', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.link', + selectorGuids: ['7a5336e3-56bd-d747-9c2e-4d6d6840a8aa'], + }, + globalSwatchId: '', + rValue: 255, + bValue: 255, + gValue: 255, + aValue: 1, + }, + }, + { + id: 'a-6-n-8', + actionTypeId: 'STYLE_TEXT_COLOR', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.paragraphs', + selectorGuids: ['d47cdb68-0cb9-0002-d4de-7ffbf9a76084'], + }, + globalSwatchId: '', + rValue: 255, + bValue: 255, + gValue: 255, + aValue: 0.6, + }, + }, + { + id: 'a-6-n-9', + actionTypeId: 'STYLE_BACKGROUND_COLOR', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.icon.inside', + selectorGuids: [ + '15bd2929-f910-8b28-aae5-dd64cfc8cef2', + 'd806ae32-67d3-b11a-e23e-b221e203443e', + ], + }, + globalSwatchId: '', + rValue: 10, + bValue: 42, + gValue: 32, + aValue: 1, + }, + }, + { + id: 'a-6-n-10', + actionTypeId: 'STYLE_BACKGROUND_COLOR', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.hero-div', + selectorGuids: ['413e8b80-c5ee-3b51-1465-2463d12c6436'], + }, + globalSwatchId: '', + rValue: 6, + bValue: 29, + gValue: 20, + aValue: 1, + }, + }, + ], + }, + ], + useFirstGroupAsInitialState: false, + createdOn: 1654638149271, + }, + 'a-3': { + id: 'a-3', + title: 'parallax', + continuousParameterGroups: [ + { + id: 'a-3-p', + type: 'SCROLL_PROGRESS', + parameterLabel: 'Scroll', + continuousActionGroups: [ + { + keyframe: 0, + actionItems: [ + { + id: 'a-3-n', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.hero-png._2', + selectorGuids: [ + '5942ae87-dcb9-b04c-a597-03a28bff3872', + '5942ae87-dcb9-b04c-a597-03a28bff3874', + ], + }, + yValue: 0, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-3-n-3', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.hero-png._3', + selectorGuids: [ + '5942ae87-dcb9-b04c-a597-03a28bff3872', + '5942ae87-dcb9-b04c-a597-03a28bff3875', + ], + }, + yValue: 0, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-3-n-5', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.hero-png._4', + selectorGuids: [ + '5942ae87-dcb9-b04c-a597-03a28bff3872', + '5942ae87-dcb9-b04c-a597-03a28bff3876', + ], + }, + yValue: 0, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-3-n-7', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.hero-png._5', + selectorGuids: [ + '5942ae87-dcb9-b04c-a597-03a28bff3872', + '5942ae87-dcb9-b04c-a597-03a28bff3877', + ], + }, + yValue: 0, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-3-n-9', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.hero-png.back', + selectorGuids: [ + '5942ae87-dcb9-b04c-a597-03a28bff3872', + 'f2b3d7ce-805b-49e7-34ed-1be8797f660e', + ], + }, + yValue: 0, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + ], + }, + { + keyframe: 17, + actionItems: [ + { + id: 'a-3-n-2', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.hero-png._2', + selectorGuids: [ + '5942ae87-dcb9-b04c-a597-03a28bff3872', + '5942ae87-dcb9-b04c-a597-03a28bff3874', + ], + }, + yValue: 11, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-3-n-4', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.hero-png._3', + selectorGuids: [ + '5942ae87-dcb9-b04c-a597-03a28bff3872', + '5942ae87-dcb9-b04c-a597-03a28bff3875', + ], + }, + yValue: 25, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-3-n-6', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.hero-png._4', + selectorGuids: [ + '5942ae87-dcb9-b04c-a597-03a28bff3872', + '5942ae87-dcb9-b04c-a597-03a28bff3876', + ], + }, + yValue: 30, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-3-n-8', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.hero-png._5', + selectorGuids: [ + '5942ae87-dcb9-b04c-a597-03a28bff3872', + '5942ae87-dcb9-b04c-a597-03a28bff3877', + ], + }, + yValue: 35, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-3-n-10', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.hero-png.back', + selectorGuids: [ + '5942ae87-dcb9-b04c-a597-03a28bff3872', + 'f2b3d7ce-805b-49e7-34ed-1be8797f660e', + ], + }, + yValue: 40, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + ], + }, + { + keyframe: 82, + actionItems: [ + { + id: 'a-3-n-11', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.footer-png._2', + selectorGuids: [ + '2e7e8dd8-bb44-33fe-8272-d891eea15e8d', + 'c625e6ca-6f7e-db18-d598-84b9d7a7a483', + ], + }, + yValue: -20, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-3-n-13', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.footer-png._3', + selectorGuids: [ + '2e7e8dd8-bb44-33fe-8272-d891eea15e8d', + 'b7622332-3af0-4f1b-e743-965b661e6ef3', + ], + }, + yValue: -28, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-3-n-15', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.footer-png._4.sun', + selectorGuids: [ + '2e7e8dd8-bb44-33fe-8272-d891eea15e8d', + '5375645f-99d3-e42b-d387-c781b185f144', + '53a55a2f-f678-a706-5a80-3f9cf212b1c6', + ], + }, + yValue: -35, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-3-n-17', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.footer-png._4.sun', + selectorGuids: [ + '2e7e8dd8-bb44-33fe-8272-d891eea15e8d', + '5375645f-99d3-e42b-d387-c781b185f144', + '53a55a2f-f678-a706-5a80-3f9cf212b1c6', + ], + }, + yValue: 40, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + ], + }, + { + keyframe: 100, + actionItems: [ + { + id: 'a-3-n-12', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.footer-png._2', + selectorGuids: [ + '2e7e8dd8-bb44-33fe-8272-d891eea15e8d', + 'c625e6ca-6f7e-db18-d598-84b9d7a7a483', + ], + }, + yValue: 0, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-3-n-14', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.footer-png._3', + selectorGuids: [ + '2e7e8dd8-bb44-33fe-8272-d891eea15e8d', + 'b7622332-3af0-4f1b-e743-965b661e6ef3', + ], + }, + yValue: 0, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-3-n-16', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.footer-png._4.sun', + selectorGuids: [ + '2e7e8dd8-bb44-33fe-8272-d891eea15e8d', + '5375645f-99d3-e42b-d387-c781b185f144', + '53a55a2f-f678-a706-5a80-3f9cf212b1c6', + ], + }, + yValue: 0, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-3-n-18', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.footer-png._4.sun', + selectorGuids: [ + '2e7e8dd8-bb44-33fe-8272-d891eea15e8d', + '5375645f-99d3-e42b-d387-c781b185f144', + '53a55a2f-f678-a706-5a80-3f9cf212b1c6', + ], + }, + yValue: 0, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + ], + }, + ], + }, + ], + createdOn: 1654634679326, + }, + 'a-4': { + id: 'a-4', + title: 'icon animations', + continuousParameterGroups: [ + { + id: 'a-4-p', + type: 'MOUSE_X', + parameterLabel: 'Mouse X', + continuousActionGroups: [ + { + keyframe: 0, + actionItems: [ + { + id: 'a-4-n', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|2ab4bf81-065f-bf16-62d7-cbe8b02a2db4' }, + xValue: -1, + yValue: null, + xUnit: 'em', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-5', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|16e3db97-a5fd-8b29-05c5-40aa2dcf6fce' }, + xValue: 1, + xUnit: 'em', + yUnit: 'PX', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-9', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|71848cc8-6ce9-6a41-9f73-3f3f2520973f' }, + yValue: 1, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-13', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|9e73de82-1436-d64b-064b-f402f0bc9e57' }, + yValue: 2, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-17', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|3d9544e4-4c23-aea6-03a7-e33ce9b652a6' }, + xValue: 1, + yValue: null, + xUnit: 'em', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-19', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|3d9544e4-4c23-aea6-03a7-e33ce9b652a2' }, + xValue: -1, + yValue: null, + xUnit: 'em', + yUnit: 'px', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-23', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|3d9544e4-4c23-aea6-03a7-e33ce9b652a3' }, + xValue: -0.5, + xUnit: 'em', + yUnit: 'PX', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-25', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|5896e3f6-6a8d-efca-d234-616572630d70' }, + xValue: -0.5, + yValue: null, + xUnit: 'em', + yUnit: 'px', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-29', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|5896e3f6-6a8d-efca-d234-616572630d72' }, + xValue: 1, + yValue: null, + xUnit: 'em', + yUnit: 'px', + zUnit: 'PX', + }, + }, + ], + }, + { + keyframe: 100, + actionItems: [ + { + id: 'a-4-n-2', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|2ab4bf81-065f-bf16-62d7-cbe8b02a2db4' }, + xValue: 1, + yValue: null, + xUnit: 'em', + yUnit: 'px', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-6', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|16e3db97-a5fd-8b29-05c5-40aa2dcf6fce' }, + xValue: -1, + xUnit: 'em', + yUnit: 'PX', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-10', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|71848cc8-6ce9-6a41-9f73-3f3f2520973f' }, + yValue: -1, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-14', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|9e73de82-1436-d64b-064b-f402f0bc9e57' }, + yValue: -2, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-18', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|3d9544e4-4c23-aea6-03a7-e33ce9b652a6' }, + xValue: -1, + xUnit: 'em', + yUnit: 'PX', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-20', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|3d9544e4-4c23-aea6-03a7-e33ce9b652a2' }, + xValue: 1, + xUnit: 'em', + yUnit: 'PX', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-24', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|3d9544e4-4c23-aea6-03a7-e33ce9b652a3' }, + xValue: 0.5, + xUnit: 'em', + yUnit: 'PX', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-26', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|5896e3f6-6a8d-efca-d234-616572630d70' }, + xValue: 0.5, + xUnit: 'em', + yUnit: 'PX', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-30', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|5896e3f6-6a8d-efca-d234-616572630d72' }, + xValue: -1, + xUnit: 'em', + yUnit: 'PX', + zUnit: 'PX', + }, + }, + ], + }, + ], + }, + { + id: 'a-4-p-2', + type: 'MOUSE_Y', + parameterLabel: 'Mouse Y', + continuousActionGroups: [ + { + keyframe: 0, + actionItems: [ + { + id: 'a-4-n-3', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|2ab4bf81-065f-bf16-62d7-cbe8b02a2db4' }, + yValue: -1, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-7', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|16e3db97-a5fd-8b29-05c5-40aa2dcf6fce' }, + yValue: -1, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-11', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|71848cc8-6ce9-6a41-9f73-3f3f2520973f' }, + xValue: 1, + xUnit: 'em', + yUnit: 'PX', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-15', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|9e73de82-1436-d64b-064b-f402f0bc9e57' }, + xValue: -2, + xUnit: 'em', + yUnit: 'PX', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-21', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|3d9544e4-4c23-aea6-03a7-e33ce9b652a2' }, + yValue: -0.5, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-27', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|5896e3f6-6a8d-efca-d234-616572630d70' }, + yValue: -0.5, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-31', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|5896e3f6-6a8d-efca-d234-616572630d72' }, + yValue: 1, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + ], + }, + { + keyframe: 100, + actionItems: [ + { + id: 'a-4-n-4', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|2ab4bf81-065f-bf16-62d7-cbe8b02a2db4' }, + yValue: 1, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-8', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|16e3db97-a5fd-8b29-05c5-40aa2dcf6fce' }, + yValue: 1, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-12', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|71848cc8-6ce9-6a41-9f73-3f3f2520973f' }, + xValue: -1, + xUnit: 'em', + yUnit: 'PX', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-16', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|9e73de82-1436-d64b-064b-f402f0bc9e57' }, + xValue: 2, + xUnit: 'em', + yUnit: 'PX', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-22', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|3d9544e4-4c23-aea6-03a7-e33ce9b652a2' }, + yValue: 0.5, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-28', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|5896e3f6-6a8d-efca-d234-616572630d70' }, + xValue: null, + yValue: 0.5, + xUnit: 'em', + yUnit: 'em', + zUnit: 'PX', + }, + }, + { + id: 'a-4-n-32', + actionTypeId: 'TRANSFORM_MOVE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { id: '629f4c28fb3b0cb40479abf6|5896e3f6-6a8d-efca-d234-616572630d72' }, + yValue: -1, + xUnit: 'PX', + yUnit: 'em', + zUnit: 'PX', + }, + }, + ], + }, + ], + }, + ], + createdOn: 1654635630093, + }, + 'a-7': { + id: 'a-7', + title: 'mobile menu open', + actionItemGroups: [ + { + actionItems: [ + { + id: 'a-7-n', + actionTypeId: 'PLUGIN_LOTTIE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + useEventTarget: true, + id: '629f4c28fb3b0cb40479abf6|c58b2aca-cf86-ca46-a233-d7594f023944', + }, + value: 0, + }, + }, + { + id: 'a-7-n-3', + actionTypeId: 'GENERAL_DISPLAY', + config: { + delay: 0, + easing: '', + duration: 0, + target: { + selector: '.mobile-menu-open', + selectorGuids: ['f6ddcc82-2dee-f8f3-b6d8-243233614469'], + }, + value: 'none', + }, + }, + { + id: 'a-7-n-5', + actionTypeId: 'STYLE_OPACITY', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.mobile-menu-open', + selectorGuids: ['f6ddcc82-2dee-f8f3-b6d8-243233614469'], + }, + value: 0, + unit: '', + }, + }, + ], + }, + { + actionItems: [ + { + id: 'a-7-n-2', + actionTypeId: 'PLUGIN_LOTTIE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + useEventTarget: true, + id: '629f4c28fb3b0cb40479abf6|c58b2aca-cf86-ca46-a233-d7594f023944', + }, + value: 100, + }, + }, + { + id: 'a-7-n-4', + actionTypeId: 'GENERAL_DISPLAY', + config: { + delay: 0, + easing: '', + duration: 0, + target: { + selector: '.mobile-menu-open', + selectorGuids: ['f6ddcc82-2dee-f8f3-b6d8-243233614469'], + }, + value: 'flex', + }, + }, + { + id: 'a-7-n-6', + actionTypeId: 'STYLE_OPACITY', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.mobile-menu-open', + selectorGuids: ['f6ddcc82-2dee-f8f3-b6d8-243233614469'], + }, + value: 1, + unit: '', + }, + }, + ], + }, + ], + useFirstGroupAsInitialState: true, + createdOn: 1654715838913, + }, + 'a-8': { + id: 'a-8', + title: 'mobile menu close', + actionItemGroups: [ + { + actionItems: [ + { + id: 'a-8-n', + actionTypeId: 'PLUGIN_LOTTIE', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + useEventTarget: true, + id: '629f4c28fb3b0cb40479abf6|c58b2aca-cf86-ca46-a233-d7594f023944', + }, + value: 0, + }, + }, + { + id: 'a-8-n-2', + actionTypeId: 'STYLE_OPACITY', + config: { + delay: 0, + easing: '', + duration: 500, + target: { + selector: '.mobile-menu-open', + selectorGuids: ['f6ddcc82-2dee-f8f3-b6d8-243233614469'], + }, + value: 0, + unit: '', + }, + }, + { + id: 'a-8-n-3', + actionTypeId: 'GENERAL_DISPLAY', + config: { + delay: 500, + easing: '', + duration: 0, + target: { + selector: '.mobile-menu-open', + selectorGuids: ['f6ddcc82-2dee-f8f3-b6d8-243233614469'], + }, + value: 'none', + }, + }, + ], + }, + ], + useFirstGroupAsInitialState: false, + createdOn: 1654715957751, + }, + }, + site: { + mediaQueries: [ + { key: 'main', min: 992, max: 10000 }, + { key: 'medium', min: 768, max: 991 }, + { key: 'small', min: 480, max: 767 }, + { key: 'tiny', min: 0, max: 479 }, + ], + }, +}); diff --git a/src/assets/static-home/videos/3rd_party_1920 alpha-1.mov b/src/assets/static-home/videos/3rd_party_1920 alpha-1.mov new file mode 100644 index 0000000..b263c18 Binary files /dev/null and b/src/assets/static-home/videos/3rd_party_1920 alpha-1.mov differ diff --git a/src/assets/static-home/videos/3rd_party_aplha.mp4 b/src/assets/static-home/videos/3rd_party_aplha.mp4 new file mode 100644 index 0000000..7250046 Binary files /dev/null and b/src/assets/static-home/videos/3rd_party_aplha.mp4 differ diff --git a/src/assets/static-home/videos/3rd_party_aplha.webm b/src/assets/static-home/videos/3rd_party_aplha.webm new file mode 100644 index 0000000..2b4ecdc Binary files /dev/null and b/src/assets/static-home/videos/3rd_party_aplha.webm differ diff --git a/src/assets/static-home/videos/Soonaverse_nofee_001-poster-00001.jpg b/src/assets/static-home/videos/Soonaverse_nofee_001-poster-00001.jpg new file mode 100644 index 0000000..b9c52a2 Binary files /dev/null and b/src/assets/static-home/videos/Soonaverse_nofee_001-poster-00001.jpg differ diff --git a/src/assets/static-home/videos/Soonaverse_nofee_001-transcode.mp4 b/src/assets/static-home/videos/Soonaverse_nofee_001-transcode.mp4 new file mode 100644 index 0000000..3598414 Binary files /dev/null and b/src/assets/static-home/videos/Soonaverse_nofee_001-transcode.mp4 differ diff --git a/src/assets/static-home/videos/Soonaverse_nofee_001-transcode.webm b/src/assets/static-home/videos/Soonaverse_nofee_001-transcode.webm new file mode 100644 index 0000000..2101ad6 Binary files /dev/null and b/src/assets/static-home/videos/Soonaverse_nofee_001-transcode.webm differ diff --git a/src/assets/static-home/videos/marketplace 1920 alpha-2_HVEC.mov b/src/assets/static-home/videos/marketplace 1920 alpha-2_HVEC.mov new file mode 100644 index 0000000..28fb759 Binary files /dev/null and b/src/assets/static-home/videos/marketplace 1920 alpha-2_HVEC.mov differ diff --git a/src/assets/static-home/videos/marketplace_alpha-2_webM.mp4 b/src/assets/static-home/videos/marketplace_alpha-2_webM.mp4 new file mode 100644 index 0000000..b4b7584 Binary files /dev/null and b/src/assets/static-home/videos/marketplace_alpha-2_webM.mp4 differ diff --git a/src/assets/static-home/videos/marketplace_alpha-2_webM.webm b/src/assets/static-home/videos/marketplace_alpha-2_webM.webm new file mode 100644 index 0000000..4c257de Binary files /dev/null and b/src/assets/static-home/videos/marketplace_alpha-2_webM.webm differ diff --git a/src/assets/tanglepay_logo.png b/src/assets/tanglepay_logo.png new file mode 100644 index 0000000..5a7f877 Binary files /dev/null and b/src/assets/tanglepay_logo.png differ diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts new file mode 100644 index 0000000..de026de --- /dev/null +++ b/src/environments/environment.prod.ts @@ -0,0 +1,8 @@ +export const environment = { + production: true, + algolia: { + appId: '2WGM1RPQKZ', + key: 'ed51a01fc204688339e89ac8e9d53028', + }, + soonaversePlaceholder: 'https://soonaverse.com/favicon.ico', +}; diff --git a/src/environments/environment.ts b/src/environments/environment.ts new file mode 100644 index 0000000..4be08a0 --- /dev/null +++ b/src/environments/environment.ts @@ -0,0 +1,9 @@ +const useEmulator = false; +export const environment = { + production: false, + algolia: { + appId: '6MPUETJRDB', + key: '5c053a0370395f0fe8cf7ce9e5a21a72', + }, + soonaversePlaceholder: 'https://soonaverse.com/favicon.ico', +}; diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000..bb4f939 Binary files /dev/null and b/src/favicon.ico differ diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..9fb5272 --- /dev/null +++ b/src/index.html @@ -0,0 +1,706 @@ + + + + + Soonaverse + + + + + + + + + + + + + diff --git a/src/locale/messages.ar-EG.xlf b/src/locale/messages.ar-EG.xlf new file mode 100644 index 0000000..73c80c2 --- /dev/null +++ b/src/locale/messages.ar-EG.xlf @@ -0,0 +1,6119 @@ + + + + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 69 + + + + Discover + + src/app/@shell/ui/header/header.component.html + 56,57 + + + src/app/pages/home/home.page.html + 18,19 + + + + Create new + + src/app/@shell/ui/header/header.component.html + 62 + + + + Space + + src/app/@shell/ui/header/header.component.html + 68,69 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 83,84 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 6,7 + + + src/app/pages/collection/pages/collection/collection.page.html + 54,55 + + + src/app/pages/market/pages/collections/collections.page.html + 122,123 + + + src/app/pages/market/pages/nfts/nfts.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 112,113 + + + + Proposal + + src/app/@shell/ui/header/header.component.html + 71,72 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 23,24 + + + + Award + + src/app/@shell/ui/header/header.component.html + 74,75 + + + src/app/pages/award/pages/award/award.page.html + 26,27 + + + + Collection + + src/app/@shell/ui/header/header.component.html + 77,78 + + + src/app/pages/collection/pages/collection/collection.page.html + 19,20 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 114,115 + + + src/app/pages/nft/pages/new/single/single.page.html + 336,337 + + + src/app/pages/space/pages/collections/collections.page.html + 26 + + + + None. + + src/app/@shell/ui/header/header.component.html + 128,129 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 52 + + + + My Profile + + src/app/@shell/ui/header/header.component.html + 137,138 + + + src/app/components/auth/services/auth.service.ts + 315 + + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 152,153 + + + + You have + + src/app/@shell/ui/header/header.component.html + 154 + + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 154,155 + + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 156,157 + + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 272 + + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 273 + + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 280 + + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 281 + + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 282 + + + + just offered + + src/app/@shell/ui/header/header.component.ts + 289 + + + + for + + src/app/@shell/ui/header/header.component.ts + 290 + + + src/app/components/timeline-nft/timeline-nft.component.html + 60 + + + + Your + + src/app/@shell/ui/header/header.component.ts + 291 + + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 292 + + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 300,299 + + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 301 + + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 12 + + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 17 + + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 22 + + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27 + + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 34,35 + + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 52,53 + + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 56,57 + + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8,10 + + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 11,13 + + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 28,29 + + + + Coming SOON + + src/app/@shell/ui/sider/sider.component.html + 35,36 + + + src/app/pages/award/pages/new/new.page.html + 271,272 + + + src/app/pages/award/pages/new/new.page.html + 281,282 + + + src/app/pages/award/pages/new/new.page.html + 291,292 + + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 8,9 + + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 9,10 + + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 20,21 + + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 22,23 + + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23,24 + + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 24,25 + + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 31,32 + + + src/app/pages/award/pages/award/award.page.html + 154 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 152 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 184 + + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 1,3 + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 111 + + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 156 + + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 167 + + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 189 + + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 196 + + + + You have to open Soonaverse in MetaMask app. + + src/app/components/auth/services/auth.service.ts + 239 + + + + Failed to initialize MetaMask, try to reload page. + + src/app/components/auth/services/auth.service.ts + 241 + + + + Pending + + + src/app/components/award/components/award-status/award-status.component.html + 1,2 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 1,2 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 1,2 + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 3,4 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 3,4 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 3,4 + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 5 + + + src/app/pages/space/pages/awards/awards.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 25 + + + + Available + + src/app/components/award/components/award-status/award-status.component.html + 6 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 62 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 150,149 + + + src/app/pages/collection/pages/collection/collection.page.html + 98,99 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 39,37 + + + src/app/pages/space/pages/collections/collections.page.ts + 24 + + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 4 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 553,554 + + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 542,543 + + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 14 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 564,565 + + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 574,575 + + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 19 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 43,44 + + + src/app/pages/collection/pages/collection/collection.page.html + 80,81 + + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 21 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 46,47 + + + src/app/pages/collection/pages/collection/collection.page.html + 82,83 + + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 24 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 50,51 + + + src/app/pages/collection/pages/collection/collection.page.html + 86,87 + + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 42 + + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 57 + + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 67 + + + src/app/pages/space/pages/awards/awards.page.ts + 26 + + + src/app/pages/space/pages/collections/collections.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 26 + + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 2,3 + + + src/app/pages/nft/pages/new/single/single.page.html + 342,343 + + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 11,12 + + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 65,67 + + + + Search + + src/app/components/collection/components/select-collection/select-collection.component.html + 74 + + + src/app/components/space/components/select-space/select-space.component.html + 74 + + + src/app/pages/discover/pages/discover/discover.page.html + 22,23 + + + src/app/pages/market/pages/market/market.page.html + 22,23 + + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 84 + + + src/app/components/space/components/select-space/select-space.component.html + 84 + + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 14,13 + + + + Wallet details + + src/app/components/member/components/member-about/member-about.component.html + 42,43 + + + + Member's Wallet Address. + + src/app/components/member/components/member-about/member-about.component.html + 44,45 + + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 55,56 + + + + All + + src/app/components/member/components/member-about/member-about.component.html + 58,59 + + + src/app/pages/discover/pages/spaces/spaces.page.ts + 28,27 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 38,37 + + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 78,79 + + + + Latest Badges + + src/app/components/member/components/member-about/member-about.component.html + 84,85 + + + + No badges + + src/app/components/member/components/member-about/member-about.component.html + 93,94 + + + + See all + + src/app/components/member/components/member-about/member-about.component.html + 97,98 + + + + Connections + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 5 + + + src/app/pages/member/pages/activity/activity.page.html + 68 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 50,51 + + + + Awards + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 6 + + + src/app/pages/discover/pages/discover/discover.page.ts + 23 + + + src/app/pages/member/pages/member/member.page.ts + 27 + + + src/app/pages/space/pages/space/space.page.ts + 33 + + + + XP + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 7 + + + src/app/components/member/components/member-card/member-card.component.html + 31,32 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 16,17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 25,26 + + + + Total reputation + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 29 + + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 38,39 + + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 6,7 + + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 7,8 + + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 11 + + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 18,19 + + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19,20 + + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 22 + + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 29,30 + + + src/app/pages/space/pages/upsert/upsert.page.html + 154 + + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 30,31 + + + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 34,37 + + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 43,44 + + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 49,50 + + + src/app/pages/space/pages/upsert/upsert.page.html + 52,53 + + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 51,52 + + + src/app/pages/space/pages/upsert/upsert.page.html + 60,61 + + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 53,54 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67,68 + + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 63,64 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 206,207 + + + src/app/pages/space/pages/upsert/upsert.page.html + 80,81 + + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 65,66 + + + src/app/pages/space/pages/upsert/upsert.page.html + 87,88 + + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,76 + + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 77,78 + + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 89,90 + + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 91,92 + + + + reputation + + src/app/components/member/components/member-reputation-drawer/member-reputation-drawer.component.html + 15 + + + src/app/components/member/components/member-reputation-modal/member-reputation-modal.component.html + 17 + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 15,16 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 29,30 + + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 44,45 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 9,10 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 44,45 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46,47 + + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 61 + + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 66 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 63 + + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 72,73 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 108,109 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 66,67 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 69,70 + + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 83 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 86 + + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 84 + + + src/app/pages/nft/pages/nft/nft.page.html + 102 + + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 87 + + + src/app/pages/nft/pages/nft/nft.page.html + 104 + + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 111 + + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 144,145 + + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 148,149 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 188,189 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 269,270 + + + + By checking this box, you agree with + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 154,155 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 108,109 + + + + Terms and Conditions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 157,158 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 111,112 + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 163 + + + + Send IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 172,173 + + + + Copied + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 181 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 232 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150 + + + src/app/components/share/share.component.html + 11 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 139 + + + src/app/components/wallet-address/wallet-address.component.html + 24 + + + + Copy + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 182 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 233 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 151 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 140 + + + src/app/components/wallet-address/wallet-address.component.html + 25 + + + + Do not send funds from an exchange, always use wallets you fully control. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 193 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + + + Firefly + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 202 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 283 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 166 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 151 + + + + Tanglepay + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 211 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 292 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 175 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 160 + + + + Send + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 223 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130 + + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 223,224 + + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 239 + + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 245,246 + + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 246,247 + + + + Action + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 247,248 + + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 248,249 + + + src/app/pages/nft/pages/nft/nft.page.html + 213,214 + + + src/app/pages/nft/pages/nft/nft.page.html + 242,243 + + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 250,251 + + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 262,263 + + + src/app/pages/nft/pages/nft/nft.page.html + 214,215 + + + src/app/pages/nft/pages/nft/nft.page.html + 229,230 + + + src/app/pages/nft/pages/nft/nft.page.html + 243,244 + + + src/app/pages/nft/pages/nft/nft.page.html + 253,254 + + + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 274 + + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 306,307 + + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 312 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 238 + + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 317 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 243 + + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 329,330 + + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 224 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 368 + + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 226 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 370 + + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 47,48 + + + src/app/pages/collection/pages/collection/collection.page.html + 83,84 + + + + Price + + src/app/components/nft/components/nft-card/nft-card.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 12 + + + src/app/pages/collection/pages/collection/collection.page.html + 197 + + + src/app/pages/collection/pages/collection/collection.page.html + 207 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 65 + + + src/app/pages/market/pages/collections/collections.page.html + 162 + + + src/app/pages/market/pages/nfts/nfts.page.html + 50 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 71,72 + + + src/app/pages/nft/pages/new/single/single.page.html + 62 + + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 73 + + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 88,89 + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 100,101 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 110,112 + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 155,154 + + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 15,16 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 29,30 + + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 71,72 + + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 117 + + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121 + + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121,122 + + + + remaining to make the transfer. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 132,133 + + + + Expired + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 133,134 + + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 137 + + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141,142 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130,131 + + + + Transaction history + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 214 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 177 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 204 + + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 204 + + + + Transaction complete. Congratulations. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 232,233 + + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 16,17 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 31,32 + + + + Sale Starts + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 50,51 + + + src/app/pages/nft/pages/nft/nft.page.html + 39,40 + + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 59,60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 74,75 + + + src/app/pages/nft/pages/nft/nft.page.html + 86,87 + + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68,69 + + + + Migrate + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100,101 + + + src/app/pages/nft/pages/nft/nft.page.html + 324,325 + + + + Shimmer/Mainnet (Tokenization)...SOON. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 102,104 + + + src/app/pages/nft/pages/nft/nft.page.html + 326,328 + + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 108,109 + + + src/app/pages/nft/pages/nft/nft.page.html + 332,333 + + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 114,115 + + + src/app/pages/nft/pages/nft/nft.page.html + 338,339 + + + + Preparing... + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 116 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 122 + + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 120,121 + + + src/app/pages/nft/pages/nft/nft.page.html + 345,346 + + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149,150 + + + src/app/pages/nft/pages/new/single/single.page.html + 297,298 + + + src/app/pages/nft/pages/nft/nft.page.html + 15 + + + + Trade info + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 3,5 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 3,4 + + + + Floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 12 + + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 41 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 40,41 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 101,102 + + + src/app/pages/nft/pages/new/single/single.page.html + 90,91 + + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 50 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 49,50 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 112,113 + + + src/app/pages/nft/pages/new/single/single.page.html + 100,101 + + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 57 + + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 158 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 91,92 + + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 159 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 62,63 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 532,533 + + + + Specific member(s) only (Transfer) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + + + Reserve for specific buyer + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 82,83 + + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2,4 + + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 6,8 + + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 11 + + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 12 + + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 16,17 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 31,32 + + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 86,87 + + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 90,91 + + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 94,95 + + + + Donut graph coming SOON. + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 40,41 + + + + Commencing + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 5,6 + + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 7,8 + + + + Completed + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 9,10 + + + + Share + + src/app/components/share/share.component.html + 5,6 + + + src/app/components/share/share.component.html + 18,19 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 14,15 + + + + Copy to clipboard + + src/app/components/share/share.component.html + 12 + + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 2,3 + + + src/app/pages/award/pages/new/new.page.html + 109,110 + + + src/app/pages/proposal/pages/new/new.page.html + 248,249 + + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 11,12 + + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 65,67 + + + src/app/pages/award/pages/new/new.page.html + 138,139 + + + src/app/pages/proposal/pages/new/new.page.html + 277,278 + + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 14,13 + + + + No Connections + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 2,3 + + + + Rep. weight + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 7,8 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 68,69 + + + + Status + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 8,9 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 72,73 + + + + Established + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 33 + + + + Recognised + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 34 + + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 11,12 + + + src/app/pages/member/pages/member/member.page.html + 30 + + + + members + + src/app/components/space/components/space-card/space-card.component.html + 28 + + + src/app/pages/discover/pages/members/members.page.html + 55,56 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 10,11 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 35,36 + + + + Value range is 0-1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 8 + + + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 30,31 + + + + Equal + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 39 + + + + Half + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 40 + + + + Double + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 41 + + + + Earned Badge + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + + + with + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + + + Show less + + src/app/components/timeline-badges/timeline-badges.component.html + 38 + + + src/app/components/timeline-nft/timeline-nft.component.html + 114 + + + + Show more + + src/app/components/timeline-badges/timeline-badges.component.html + 39 + + + src/app/components/timeline-nft/timeline-nft.component.html + 115 + + + + Timeline + + src/app/components/timeline-nft/timeline-nft.component.html + 1 + + + + Listed by + + src/app/components/timeline-nft/timeline-nft.component.html + 20 + + + + Made available for auction by + + src/app/components/timeline-nft/timeline-nft.component.html + 23 + + + + Purchased by + + src/app/components/timeline-nft/timeline-nft.component.html + 59 + + + + details + + src/app/components/timeline-nft/timeline-nft.component.html + 61 + + + + Invalid + + src/app/components/timeline-nft/timeline-nft.component.html + 73,74 + + + + Listed by space + + src/app/components/timeline-nft/timeline-nft.component.html + 104 + + + + Bill (owner) + + src/app/components/timeline-nft/timeline-nft.component.ts + 46 + + + + Bill (royalty) + + src/app/components/timeline-nft/timeline-nft.component.ts + 48 + + + + Credit + + src/app/components/timeline-nft/timeline-nft.component.ts + 51 + + + + Payment + + src/app/components/timeline-nft/timeline-nft.component.ts + 53 + + + + Order + + src/app/components/timeline-nft/timeline-nft.component.ts + 55 + + + + Generate address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 12,13 + + + + Make transaction + + src/app/components/wallet-address/iota-address/iota-address.component.html + 33,34 + + + + Wait for confirmation + + src/app/components/wallet-address/iota-address/iota-address.component.html + 55,56 + + + + Confirmed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 78,79 + + + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/iota-address/iota-address.component.html + 104,105 + + + + space + + src/app/components/wallet-address/iota-address/iota-address.component.html + 105 + + + + profile + + src/app/components/wallet-address/iota-address/iota-address.component.html + 106 + + + + for future transactions. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 107,108 + + + + Generate new address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 111 + + + + Send a small + + src/app/components/wallet-address/iota-address/iota-address.component.html + 120 + + + + amount to validate your address. This expires in + + src/app/components/wallet-address/iota-address/iota-address.component.html + 121 + + + + Expired. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 123,124 + + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 172 + + + + Validating address... + + src/app/components/wallet-address/iota-address/iota-address.component.html + 194 + + + + Now you can deal with NFT`s + + src/app/components/wallet-address/iota-address/iota-address.component.html + 221,222 + + + + Finish Verification + + src/app/components/wallet-address/iota-address/iota-address.component.html + 225 + + + + Not verified + + src/app/components/wallet-address/wallet-address.component.html + 4,5 + + + + Verify wallet + + src/app/components/wallet-address/wallet-address.component.html + 9,10 + + + + Verified + + src/app/components/wallet-address/wallet-address.component.html + 18,19 + + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 43 + + + + address + + src/app/components/wallet-address/wallet-address.component.html + 43 + + + src/app/components/wallet-address/wallet-address.component.html + 59 + + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 59 + + + + Detailed Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.html + 3,4 + + + + End Date + + src/app/pages/award/pages/award/award-info/award-info.component.html + 9,10 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 50 + + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 16 + + + + Award info + + src/app/pages/award/pages/award/award.page.html + 5,6 + + + src/app/pages/award/pages/new/new.page.html + 17,18 + + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 81,82 + + + src/app/pages/award/pages/award/award.page.html + 176,177 + + + + Approve Award + + src/app/pages/award/pages/award/award.page.html + 91,92 + + + + Approve + + src/app/pages/award/pages/award/award.page.html + 103 + + + + Decline + + src/app/pages/award/pages/award/award.page.html + 114 + + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 128,129 + + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 136,137 + + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 142,143 + + + + Submit + + src/app/pages/award/pages/award/award.page.html + 151 + + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 35 + + + src/app/pages/space/pages/space/space.page.ts + 30 + + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 94 + + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2,4 + + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14,15 + + + src/app/pages/proposal/pages/new/new.page.html + 23,24 + + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19,20 + + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 23,24 + + + + Title + + src/app/pages/award/pages/new/new.page.html + 28 + + + src/app/pages/proposal/pages/new/new.page.html + 28 + + + src/app/pages/space/pages/upsert/upsert.page.html + 29 + + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 35,36 + + + src/app/pages/proposal/pages/new/new.page.html + 51,52 + + + + End + + src/app/pages/award/pages/new/new.page.html + 45 + + + src/app/pages/proposal/pages/new/new.page.html + 62 + + + + Award description + + src/app/pages/award/pages/new/new.page.html + 55,56 + + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 66,67 + + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 68,69 + + + + Badge Title is required. + + src/app/pages/award/pages/new/new.page.html + 73,74 + + + + Badge Title + + src/app/pages/award/pages/new/new.page.html + 78,79 + + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 89,90 + + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 103,104 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 363,364 + + + src/app/pages/proposal/pages/new/new.page.html + 242,243 + + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 105,106 + + + + Reward Info + + src/app/pages/award/pages/new/new.page.html + 155,156 + + + + Defines the amount of XP for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 157,158 + + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 162,163 + + + src/app/pages/award/pages/new/new.page.html + 182,183 + + + + Total XP (Max 10000) + + src/app/pages/award/pages/new/new.page.html + 167,168 + + + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + src/app/pages/award/pages/new/new.page.html + 177,178 + + + + Number of Badges + + src/app/pages/award/pages/new/new.page.html + 187,188 + + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 197,198 + + + + Badge + + src/app/pages/award/pages/new/new.page.html + 206 + + + + What the badge looks like. + + src/app/pages/award/pages/new/new.page.html + 207,208 + + + + Mint an unique NTT badge. + + src/app/pages/award/pages/new/new.page.html + 216,217 + + + + Mint Avatar + + src/app/pages/award/pages/new/new.page.html + 225 + + + + WOW! Now reward your members with it! + + src/app/pages/award/pages/new/new.page.html + 238,239 + + + + Award Setup + + src/app/pages/award/pages/new/new.page.html + 245,246 + + + + Defines who and how can get a badge. + + src/app/pages/award/pages/new/new.page.html + 247,248 + + + + Guardian approval + + src/app/pages/award/pages/new/new.page.html + 254,255 + + + + The award must be approved by the guardians of the space before it's active or distributed + + src/app/pages/award/pages/new/new.page.html + 260,261 + + + + Discord Activity + + src/app/pages/award/pages/new/new.page.html + 265,266 + + + + Github Activity + + src/app/pages/award/pages/new/new.page.html + 275,276 + + + + Custom and more + + src/app/pages/award/pages/new/new.page.html + 285,286 + + + + Create award + + src/app/pages/award/pages/new/new.page.html + 310,311 + + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2,3 + + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 39 + + + src/app/pages/award/pages/participants/participants.page.html + 46,47 + + + src/app/pages/proposal/pages/participants/participants.page.html + 24 + + + src/app/pages/proposal/pages/participants/participants.page.html + 31,32 + + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 51 + + + src/app/pages/proposal/pages/participants/participants.page.html + 36 + + + src/app/pages/space/pages/members/members.page.html + 49,50 + + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 59 + + + src/app/pages/proposal/pages/participants/participants.page.html + 44 + + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 71 + + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 82 + + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 39 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 131 + + + src/app/pages/space/pages/awards/awards.page.ts + 23 + + + src/app/pages/space/pages/collections/collections.page.ts + 23 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 23 + + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 40 + + + + Visit website + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 7,8 + + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 18,19 + + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 22,23 + + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 28,29 + + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 34,35 + + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 40,41 + + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 46,47 + + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51,52 + + + + The badges you need + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 78 + + + + Resources + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89 + + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 114 + + + + Discount for members with XP + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 119 + + + + Guardians of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 47 + + + + Members of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 49 + + + + Members With Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 51 + + + + Check out collection + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 72 + + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 3 + + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 11 + + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 26 + + + src/app/pages/collection/pages/collection/collection.page.html + 125 + + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 30 + + + src/app/pages/collection/pages/collection/collection.page.html + 129 + + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 36 + + + src/app/pages/collection/pages/collection/collection.page.html + 135 + + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 139 + + + + + + src/app/pages/collection/pages/collection/collection.page.html + 55,56 + + + src/app/pages/collection/pages/collection/collection.page.html + 70,71 + + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 69,70 + + + + Items + + src/app/pages/collection/pages/collection/collection.page.html + 93,94 + + + + Price starts at + + src/app/pages/collection/pages/collection/collection.page.html + 103,104 + + + + Sale in progress + + src/app/pages/collection/pages/collection/collection.page.html + 111,112 + + + + remaining + + src/app/pages/collection/pages/collection/collection.page.html + 113,114 + + + src/app/pages/nft/pages/nft/nft.page.html + 129,130 + + + + Find item + + src/app/pages/collection/pages/collection/collection.page.html + 163 + + + src/app/pages/member/pages/nfts/nfts.page.html + 12 + + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 173,174 + + + src/app/pages/nft/pages/new/new.page.html + 2,3 + + + + Recent + + src/app/pages/collection/pages/collection/collection.page.html + 199 + + + src/app/pages/collection/pages/collection/collection.page.html + 216 + + + src/app/pages/discover/pages/awards/awards.page.html + 20 + + + src/app/pages/discover/pages/awards/awards.page.html + 31 + + + src/app/pages/discover/pages/collections/collections.page.html + 40 + + + src/app/pages/discover/pages/collections/collections.page.html + 51 + + + src/app/pages/discover/pages/members/members.page.html + 31 + + + src/app/pages/discover/pages/members/members.page.html + 42 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 20 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 31 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 20 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 33 + + + src/app/pages/market/pages/collections/collections.page.html + 154 + + + src/app/pages/market/pages/collections/collections.page.html + 171 + + + src/app/pages/market/pages/nfts/nfts.page.html + 42 + + + src/app/pages/market/pages/nfts/nfts.page.html + 59 + + + + Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + + src/app/pages/market/pages/collections/collections.page.html + 155 + + + src/app/pages/market/pages/nfts/nfts.page.html + 43 + + + src/app/pages/market/pages/nfts/nfts.page.html + 60 + + + + High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 201 + + + src/app/pages/market/pages/collections/collections.page.html + 156 + + + src/app/pages/market/pages/nfts/nfts.page.html + 44 + + + src/app/pages/market/pages/nfts/nfts.page.html + 61 + + + + Sort by + + src/app/pages/collection/pages/collection/collection.page.html + 206 + + + src/app/pages/discover/pages/awards/awards.page.html + 18 + + + src/app/pages/discover/pages/awards/awards.page.html + 24,25 + + + src/app/pages/discover/pages/collections/collections.page.html + 37,38 + + + src/app/pages/discover/pages/collections/collections.page.html + 44,45 + + + src/app/pages/discover/pages/members/members.page.html + 29 + + + src/app/pages/discover/pages/members/members.page.html + 35,36 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 18 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 24,25 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 18 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 24,25 + + + src/app/pages/market/pages/collections/collections.page.html + 152 + + + src/app/pages/market/pages/collections/collections.page.html + 161 + + + src/app/pages/market/pages/nfts/nfts.page.html + 40 + + + src/app/pages/market/pages/nfts/nfts.page.html + 49 + + + + Price: Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 217 + + + src/app/pages/market/pages/collections/collections.page.html + 172 + + + + Price: High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 218 + + + src/app/pages/market/pages/collections/collections.page.html + 173 + + + + No NFTs + + src/app/pages/collection/pages/collection/collection.page.html + 240 + + + src/app/pages/market/pages/nfts/nfts.page.html + 84 + + + src/app/pages/member/pages/nfts/nfts.page.html + 32 + + + src/app/pages/nft/pages/nft/nft.page.html + 408 + + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2,3 + + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3,5 + + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18,19 + + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20,21 + + + + Name + + src/app/pages/collection/pages/upsert/upsert.page.html + 30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 70,71 + + + src/app/pages/nft/pages/new/single/single.page.html + 26 + + + + Description + + src/app/pages/collection/pages/upsert/upsert.page.html + 40,41 + + + src/app/pages/nft/pages/new/single/single.page.html + 36,37 + + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 53,54 + + + src/app/pages/nft/pages/new/single/single.page.html + 49,50 + + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 55,56 + + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 118 + + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 120 + + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 131,132 + + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 141,142 + + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 150 + + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 158,159 + + + + Links + + src/app/pages/collection/pages/upsert/upsert.page.html + 181 + + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 182,183 + + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 187,188 + + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 213,214 + + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 226,227 + + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 233,234 + + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 248,249 + + + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + src/app/pages/collection/pages/upsert/upsert.page.html + 250,251 + + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 298 + + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 311 + + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 350,351 + + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 365,366 + + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 383,384 + + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 385,386 + + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 417 + + + src/app/pages/space/pages/upsert/upsert.page.html + 192 + + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 443 + + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 478 + + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 488,489 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 501,502 + + + src/app/pages/market/pages/collections/collections.page.html + 132,133 + + + src/app/pages/market/pages/collections/collections.page.html + 137,138 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 116,117 + + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 490,491 + + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 494,495 + + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 519,520 + + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 521,522 + + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 537,538 + + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 547,548 + + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 558,559 + + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 569,570 + + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 585,586 + + + + Limited Edition + + src/app/pages/collection/pages/upsert/upsert.page.html + 590 + + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 606 + + + + Select Collections + + src/app/pages/collection/pages/upsert/upsert.page.html + 629,630 + + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 677,678 + + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 690,691 + + + + Member seems to log out during the file upload request. + + src/app/pages/collection/pages/upsert/upsert.page.ts + 317 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 195 + + + src/app/pages/nft/pages/new/single/single.page.ts + 154 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 107 + + + + My Overview + + src/app/pages/dashboard/dashboard.page.html + 2,3 + + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 6,7 + + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 14,15 + + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 23 + + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 25,26 + + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 36,37 + + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 48,49 + + + + Oldest + + src/app/pages/discover/pages/awards/awards.page.html + 21 + + + src/app/pages/discover/pages/awards/awards.page.html + 32 + + + src/app/pages/discover/pages/collections/collections.page.html + 41 + + + src/app/pages/discover/pages/collections/collections.page.html + 52 + + + src/app/pages/discover/pages/members/members.page.html + 32 + + + src/app/pages/discover/pages/members/members.page.html + 43 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 21 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 32 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 21 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 34 + + + + No Awards + + src/app/pages/discover/pages/awards/awards.page.html + 54 + + + src/app/pages/member/pages/awards/awards.page.html + 19 + + + src/app/pages/space/pages/awards/awards.page.html + 35 + + + + collections + + src/app/pages/discover/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 185,186 + + + + No Collections + + src/app/pages/discover/pages/collections/collections.page.html + 75 + + + src/app/pages/space/pages/collections/collections.page.html + 38 + + + + Discover Soonaverse + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + + + Enter the first few letters to search... + + src/app/pages/discover/pages/discover/discover.page.html + 7 + + + + Spaces + + src/app/pages/discover/pages/discover/discover.page.ts + 21 + + + src/app/pages/member/pages/member/member.page.ts + 29 + + + + Collections + + src/app/pages/discover/pages/discover/discover.page.ts + 22 + + + src/app/pages/market/pages/market/market.page.ts + 23 + + + src/app/pages/space/pages/space/space.page.ts + 31 + + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 24 + + + src/app/pages/space/pages/space/space.page.ts + 32 + + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 25 + + + src/app/pages/space/pages/space/space.page.ts + 34 + + + + Include connections + + src/app/pages/discover/pages/members/members.page.html + 23,24 + + + src/app/pages/member/pages/activity/activity.page.html + 28,29 + + + src/app/pages/member/pages/spaces/member-spaces.component.html + 5,6 + + + + (Select some space) + + src/app/pages/discover/pages/members/members.page.html + 24 + + + src/app/pages/member/pages/activity/activity.page.html + 29 + + + + No Members + + src/app/pages/discover/pages/members/members.page.html + 66 + + + src/app/pages/space/pages/members/members.page.html + 58 + + + + proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 43,44 + + + + No Proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 55 + + + src/app/pages/space/pages/proposals/proposals.page.html + 35 + + + + No Spaces + + src/app/pages/discover/pages/spaces/spaces.page.html + 56 + + + + Open + + src/app/pages/discover/pages/spaces/spaces.page.ts + 29 + + + + Welcome to The Soonaverse + + src/app/pages/home/home.page.html + 5,6 + + + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + src/app/pages/home/home.page.html + 8,9 + + + + Join Us + + src/app/pages/home/home.page.html + 19,20 + + + + Marketplace + + src/app/pages/home/home.page.html + 31 + + + + See Docs + + src/app/pages/home/home.page.html + 43,44 + + + + Get started with the Soonaverse + + src/app/pages/home/home.page.html + 52,53 + + + + Not sure where to start? Find featured spaces and NFT Collections below. + + src/app/pages/home/home.page.html + 54 + + + + Trending Collections + + src/app/pages/home/home.page.html + 60,61 + + + + Go to Marketplace + + src/app/pages/home/home.page.html + 70 + + + + Discover more + + src/app/pages/home/home.page.html + 86 + + + src/app/pages/home/home.page.html + 102 + + + src/app/pages/home/home.page.html + 122 + + + + Popular spaces + + src/app/pages/home/home.page.html + 92,93 + + + + Creating your community is easy as 1-2-3 + + src/app/pages/home/home.page.html + 130,131 + + + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + src/app/pages/home/home.page.html + 132,133 + + + + StepArticle image + + src/app/pages/home/home.page.html + 143,144 + + + + Voting is essential and it needs to be on-chain and FREE. + + src/app/pages/home/home.page.html + 162 + + + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + src/app/pages/home/home.page.html + 165,167 + + + + Go there now + + src/app/pages/home/home.page.html + 177 + + + + Want to learn more about SoonLabs? + + src/app/pages/home/home.page.html + 202,203 + + + + Visit YouTube + + src/app/pages/home/home.page.html + 213 + + + + Who’s using the Soonaverse? + + src/app/pages/home/home.page.html + 222,224 + + + + Investors + + src/app/pages/home/home.page.html + 275,276 + + + + Privacy + + src/app/pages/home/home.page.html + 285,286 + + + + Terms + + src/app/pages/home/home.page.html + 295,296 + + + + Powered by SoonLabs + + src/app/pages/home/home.page.html + 306,307 + + + src/app/pages/home/home.page.html + 318,319 + + + + Create your community + + src/app/pages/home/home.page.ts + 33,31 + + + + Feeless, secure, on-chain voting, and “one click” creation tools. + + src/app/pages/home/home.page.ts + 34 + + + + Build reputation and rewards + + src/app/pages/home/home.page.ts + 38,36 + + + + Create incentives and build reputation, trust and community engagement. + + src/app/pages/home/home.page.ts + 39 + + + + Manage, Maintain, Grow + + src/app/pages/home/home.page.ts + 43,41 + + + + Governance, voting, for both public and private communities. + + src/app/pages/home/home.page.ts + 44 + + + + NFTs + + src/app/pages/market/pages/collections/collections.page.html + 12,13 + + + src/app/pages/market/pages/nfts/nfts.page.html + 13,14 + + + src/app/pages/member/pages/member/member.page.ts + 30 + + + + Select Access type + + src/app/pages/market/pages/collections/collections.page.html + 20,21 + + + + All accesses + + src/app/pages/market/pages/collections/collections.page.html + 25,26 + + + src/app/pages/market/pages/collections/collections.page.html + 32,33 + + + src/app/pages/market/pages/collections/collections.page.html + 111 + + + + Open sale + + src/app/pages/market/pages/collections/collections.page.html + 38,39 + + + src/app/pages/market/pages/collections/collections.page.html + 45,46 + + + src/app/pages/market/pages/collections/collections.page.html + 112 + + + + Space members only + + src/app/pages/market/pages/collections/collections.page.html + 51,52 + + + src/app/pages/market/pages/collections/collections.page.html + 58,59 + + + src/app/pages/market/pages/collections/collections.page.html + 113 + + + + Space guardians only + + src/app/pages/market/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 71,72 + + + src/app/pages/market/pages/collections/collections.page.html + 114 + + + + Space members with badge only + + src/app/pages/market/pages/collections/collections.page.html + 77,78 + + + src/app/pages/market/pages/collections/collections.page.html + 84,85 + + + src/app/pages/market/pages/collections/collections.page.html + 115 + + + + At least one NFT from collections + + src/app/pages/market/pages/collections/collections.page.html + 90,91 + + + src/app/pages/market/pages/collections/collections.page.html + 97,98 + + + src/app/pages/market/pages/collections/collections.page.html + 116 + + + + No collections + + src/app/pages/market/pages/collections/collections.page.html + 196 + + + + Marketplace + + src/app/pages/market/pages/market/market.page.html + 2,4 + + + + Spaces, awards, proposals or members... + + src/app/pages/market/pages/market/market.page.html + 7 + + + + NFT's + + src/app/pages/market/pages/market/market.page.ts + 24 + + + + On Auction + + src/app/pages/market/pages/nfts/nfts.page.ts + 40,37 + + + + Owned + + src/app/pages/market/pages/nfts/nfts.page.ts + 41 + + + src/app/pages/nft/pages/nft/nft.page.html + 6,7 + + + + View space + + src/app/pages/member/pages/activity/activity.page.html + 20,21 + + + + Awards Completed + + src/app/pages/member/pages/activity/activity.page.html + 37 + + + + Total Reputation + + src/app/pages/member/pages/activity/activity.page.html + 39 + + + + Earned badges + + src/app/pages/member/pages/activity/activity.page.html + 47 + + + + More + + src/app/pages/member/pages/activity/activity.page.html + 51,52 + + + + Reputation + + src/app/pages/member/pages/activity/activity.page.html + 72,73 + + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 6,7 + + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 21,22 + + + + No Badges yet + + src/app/pages/member/pages/badges/badges.page.html + 19,20 + + + + Discover Badges + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + + + My profile + + src/app/pages/member/pages/member/member.page.html + 9 + + + + Profile + + src/app/pages/member/pages/member/member.page.html + 10 + + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 15,16 + + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 26 + + + + Badges + + src/app/pages/member/pages/member/member.page.ts + 28 + + + + (Join space with alliance) + + src/app/pages/member/pages/spaces/member-spaces.component.html + 6 + + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 44,45 + + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 48,49 + + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 57 + + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 69,70 + + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 92,93 + + + + Select collection + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 123,124 + + + src/app/pages/nft/pages/new/single/single.page.html + 349,350 + + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136,137 + + + + Upload back once you generate bellow + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138,139 + + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 166 + + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 191,192 + + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14,15 + + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16,17 + + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 21,22 + + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 32,33 + + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 51,52 + + + + Properties + + src/app/pages/nft/pages/new/single/single.page.html + 111,112 + + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 113,114 + + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 120,121 + + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 121,122 + + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 133,134 + + + src/app/pages/nft/pages/new/single/single.page.html + 166,168 + + + src/app/pages/nft/pages/new/single/single.page.html + 173,174 + + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 144 + + + src/app/pages/nft/pages/new/single/single.page.html + 178,180 + + + src/app/pages/nft/pages/new/single/single.page.html + 186 + + + src/app/pages/nft/pages/new/single/single.page.html + 236 + + + src/app/pages/nft/pages/new/single/single.page.html + 270,272 + + + src/app/pages/nft/pages/new/single/single.page.html + 276 + + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 159 + + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 196,197 + + + + Stats + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 205,206 + + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 212,213 + + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 213,214 + + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 225,226 + + + src/app/pages/nft/pages/new/single/single.page.html + 258,260 + + + src/app/pages/nft/pages/new/single/single.page.html + 265,266 + + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 251 + + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287,288 + + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 299,300 + + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 324 + + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 338,339 + + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 371,372 + + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 381,382 + + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 142 + + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 4,5 + + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 281,282 + + + + Sale ends + + src/app/pages/nft/pages/nft/nft.page.html + 54,55 + + + + Finalising auction... + + src/app/pages/nft/pages/nft/nft.page.html + 55,56 + + + + hours + + src/app/pages/nft/pages/nft/nft.page.html + 67,68 + + + + min + + src/app/pages/nft/pages/nft/nft.page.html + 73,74 + + + + sec + + src/app/pages/nft/pages/nft/nft.page.html + 79,80 + + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 101 + + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 137 + + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 145 + + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 153 + + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 161 + + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 166,167 + + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 167,168 + + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 168,169 + + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 174 + + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 181 + + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 194,195 + + + + My Bids + + src/app/pages/nft/pages/nft/nft.page.html + 198,199 + + + + My Transactions + + src/app/pages/nft/pages/nft/nft.page.html + 202,203 + + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 211,212 + + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 212,213 + + + + Date + + src/app/pages/nft/pages/nft/nft.page.html + 240,241 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 8,9 + + + + Type + + src/app/pages/nft/pages/nft/nft.page.html + 241,242 + + + + On-Chain Record + + src/app/pages/nft/pages/nft/nft.page.html + 309,310 + + + + Preparing... + + src/app/pages/nft/pages/nft/nft.page.html + 310,311 + + + + View + + src/app/pages/nft/pages/nft/nft.page.html + 313,314 + + + src/app/pages/nft/pages/nft/nft.page.html + 341,342 + + + src/app/pages/nft/pages/nft/nft.page.html + 348,349 + + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 318,319 + + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 373,374 + + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 376,377 + + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 377 + + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 386,388 + + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2,4 + + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17,18 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 5,6 + + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19,20 + + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 35,36 + + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 45 + + + + Commencing milestone. + + src/app/pages/proposal/pages/new/new.page.html + 69,70 + + + + Commencing milestone + + src/app/pages/proposal/pages/new/new.page.html + 76,77 + + + + Start milestone. + + src/app/pages/proposal/pages/new/new.page.html + 83,84 + + + + Start milestone + + src/app/pages/proposal/pages/new/new.page.html + 90,91 + + + + End milestone. + + src/app/pages/proposal/pages/new/new.page.html + 97,98 + + + + End milestone + + src/app/pages/proposal/pages/new/new.page.html + 104,105 + + + + Proposal description is required. + + src/app/pages/proposal/pages/new/new.page.html + 112,113 + + + + Proposal description + + src/app/pages/proposal/pages/new/new.page.html + 117,118 + + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 127,128 + + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 129,130 + + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 136,137 + + + + Question Title + + src/app/pages/proposal/pages/new/new.page.html + 140,141 + + + + Question description + + src/app/pages/proposal/pages/new/new.page.html + 152,153 + + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 178,179 + + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 183,184 + + + + Answer Text + + src/app/pages/proposal/pages/new/new.page.html + 187,188 + + + + Answer description + + src/app/pages/proposal/pages/new/new.page.html + 198,199 + + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 233,234 + + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 244,245 + + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 292,293 + + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 294,295 + + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 299 + + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 306,307 + + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 312,313 + + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 316,317 + + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 322,323 + + + + IOTA Token Holders + + src/app/pages/proposal/pages/new/new.page.html + 327,328 + + + + All IOTA token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 333,334 + + + + Voting Type + + src/app/pages/proposal/pages/new/new.page.html + 341 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 55 + + + + Member - One Vote + + src/app/pages/proposal/pages/new/new.page.html + 348,349 + + + + Each member of the space gets one vote + + src/app/pages/proposal/pages/new/new.page.html + 354,355 + + + + XP Reputation - Space + + src/app/pages/proposal/pages/new/new.page.html + 362,363 + + + + Votes are weighted based on total amount of XP a member has in the space + + src/app/pages/proposal/pages/new/new.page.html + 368,369 + + + + XP Reputation - Space + Connection + + src/app/pages/proposal/pages/new/new.page.html + 378,379 + + + + Votes are weighted based on total amount of XP a member has in the space & connections + + src/app/pages/proposal/pages/new/new.page.html + 384,385 + + + + XP Reputation - Selected Badges + + src/app/pages/proposal/pages/new/new.page.html + 394,395 + + + + Votes are weighted based on total amount of XP a member has for selected badges + + src/app/pages/proposal/pages/new/new.page.html + 400,401 + + + + Reputation Options + + src/app/pages/proposal/pages/new/new.page.html + 412,413 + + + + Set Minimum Weight + + src/app/pages/proposal/pages/new/new.page.html + 423,424 + + + + Select Badge + + src/app/pages/proposal/pages/new/new.page.html + 438,439 + + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 465,466 + + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 322 + + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 2,3 + + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 58,59 + + + + Voted + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 3,4 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 38 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 129 + + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 4,5 + + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 5 + + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 9 + + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 12 + + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 18 + + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 21 + + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 27 + + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 30 + + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 52 + + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 37 + + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 124 + + + + Voter + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 7,8 + + + + Option + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 9,10 + + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 26 + + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 28 + + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 34,35 + + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 39 + + + + Start Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 45 + + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 56 + + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 60 + + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 61 + + + + Export to JSON + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 65,67 + + + + Cast your vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 50,51 + + + + Open Firefly to Vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 53 + + + + Voting instructions + + src/app/pages/proposal/pages/proposal/proposal.page.html + 55 + + + + You will select your options and execute the vote within Firefly. + + src/app/pages/proposal/pages/proposal/proposal.page.html + 57,58 + + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 64,65 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 117,118 + + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 70,71 + + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 91 + + + + New + + src/app/pages/space/pages/awards/awards.page.html + 23,24 + + + src/app/pages/space/pages/collections/collections.page.html + 25,26 + + + src/app/pages/space/pages/proposals/proposals.page.html + 23,24 + + + + award + + src/app/pages/space/pages/awards/awards.page.html + 24 + + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 24 + + + src/app/pages/space/pages/members/members.page.html + 24 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 24 + + + + Active + + src/app/pages/space/pages/members/members.page.html + 9 + + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 18 + + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 28 + + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 35 + + + src/app/pages/space/pages/members/members.page.html + 43,44 + + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 63 + + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 78,79 + + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 81,82 + + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 84,86 + + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 89,91 + + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 91,93 + + + + Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 3,5 + + + + No Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 11 + + + + Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 24,26 + + + + No Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 32 + + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 24 + + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 21,22 + + + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 53,54 + + + + Show All + + src/app/pages/space/pages/space/space-about/space-about.component.html + 59,60 + + + + Connected spaces that you recognize + + src/app/pages/space/pages/space/space-about/space-about.component.html + 65,66 + + + + New connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 76,77 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 88 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 117 + + + + connections + + src/app/pages/space/pages/space/space-about/space-about.component.html + 104 + + + + Close + + src/app/pages/space/pages/space/space-about/space-about.component.html + 120 + + + + New + + src/app/pages/space/pages/space/space-about/space-about.component.html + 132 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 169 + + + + Edit + + src/app/pages/space/pages/space/space-about/space-about.component.html + 133 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 170 + + + + connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 134,135 + + + + Form a connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 148 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + + + Save + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 181 + + + + Terminate alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 159,160 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 190,191 + + + + alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 171,172 + + + + Space's Wallet Address + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201,202 + + + + Wallet to hold funds for the Space. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 203,204 + + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 252,253 + + + + About space + + src/app/pages/space/pages/space/space.page.html + 5,6 + + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 53 + + + src/app/pages/space/pages/space/space.page.html + 113,114 + + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 77 + + + src/app/pages/space/pages/space/space.page.html + 139 + + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2,3 + + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3,4 + + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17,18 + + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19,20 + + + + Space description + + src/app/pages/space/pages/upsert/upsert.page.html + 39,40 + + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 54,55 + + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 100,101 + + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 107,108 + + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 128,129 + + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 130,131 + + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 139,140 + + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 143,144 + + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 163,164 + + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 236,237 + + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 249,250 + + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + + + + diff --git a/src/locale/messages.ar-SA.xlf b/src/locale/messages.ar-SA.xlf new file mode 100644 index 0000000..06c8bd4 --- /dev/null +++ b/src/locale/messages.ar-SA.xlf @@ -0,0 +1,13271 @@ + + + + + + Top Members + + src/app/@core/services/filter-storage/filter-storage.service.ts + 96 + + Top Members + + + Recent + + src/app/@core/services/filter-storage/filter-storage.service.ts + 97 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 115 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 132 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 146 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 164 + + حديث + + + Oldest + + src/app/@core/services/filter-storage/filter-storage.service.ts + 98 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 116 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 133 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 147 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 165 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 187 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 206 + + Oldest + + + Ending Soon + + src/app/@core/services/filter-storage/filter-storage.service.ts + 114 + + Ending Soon + + + Ending SOON + + src/app/@core/services/filter-storage/filter-storage.service.ts + 163 + + Ending SOON + + + Available Date + + src/app/@core/services/filter-storage/filter-storage.service.ts + 181 + + Available Date + + + Recently Created + + src/app/@core/services/filter-storage/filter-storage.service.ts + 182 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 205 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 57 + + Recently Created + + + Price: Low to High + + src/app/@core/services/filter-storage/filter-storage.service.ts + 183 + + السعر: منخفض إلى مرتفع + + + Price: High to Low + + src/app/@core/services/filter-storage/filter-storage.service.ts + 184 + + السعر: مرتفع إلى منخفض + + + Top Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 185 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 203 + + Top Traded + + + Recently Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 186 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 204 + + Recently Traded + + + Public Vote + + src/app/@core/services/filter-storage/filter-storage.service.ts + 199 + + Public Vote + + + Community Rank + + src/app/@core/services/filter-storage/filter-storage.service.ts + 200 + + Community Rank + + + SOON on Sale + + src/app/@core/services/filter-storage/filter-storage.service.ts + 201 + + SOON on Sale + + + Recently Minted + + src/app/@core/services/filter-storage/filter-storage.service.ts + 202 + + Recently Minted + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 74 + + الرجوع + + + Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products. + + src/app/@core/services/seo/seo.service.ts + 7 + + Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products. + + + Bill Payment + + src/app/@core/services/transaction/transaction.service.ts + 18 + + Bill Payment + + + Bill (royalty) + + src/app/@core/services/transaction/transaction.service.ts + 20 + + الفاتورة (الإتاوات) + + + Credit + + src/app/@core/services/transaction/transaction.service.ts + 26 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 336 + + الرصيد + + + Payment + + src/app/@core/services/transaction/transaction.service.ts + 28 + + الدفع + + + Credit NFT + + src/app/@core/services/transaction/transaction.service.ts + 30 + + Credit NFT + + + Mint Collection + + src/app/@core/services/transaction/transaction.service.ts + 32 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 36 + + Mint Collection + + + Mint Token + + src/app/@core/services/transaction/transaction.service.ts + 34 + + + src/app/pages/space/pages/manage/manage.page.html + 116 + + Mint Token + + + Withdraw Asset + + src/app/@core/services/transaction/transaction.service.ts + 36 + + Withdraw Asset + + + Unlock + + src/app/@core/services/transaction/transaction.service.ts + 38 + + Unlock + + + Vote + + src/app/@core/services/transaction/transaction.service.ts + 40 + + Vote + + + Order + + src/app/@core/services/transaction/transaction.service.ts + 42 + + الترتيب + + + (Mint Alias) + + src/app/@core/services/transaction/transaction.service.ts + 49 + + (Mint Alias) + + + (Mint NFTs) + + src/app/@core/services/transaction/transaction.service.ts + 51 + + (Mint NFTs) + + + (Mint Foundry) + + src/app/@core/services/transaction/transaction.service.ts + 53 + + (Mint Foundry) + + + (Send Alias to Guardian) + + src/app/@core/services/transaction/transaction.service.ts + 55 + + (Send Alias to Guardian) + + + (Lock Collection) + + src/app/@core/services/transaction/transaction.service.ts + 57 + + (Lock Collection) + + + Discover + + src/app/@shell/ui/header/header.component.html + 76 + + + src/app/components/auth/services/auth.service.ts + 83 + + إكتشف + + + Create new + + src/app/@shell/ui/header/header.component.html + 91 + + صنع جديد + + + Space + + src/app/@shell/ui/header/header.component.html + 97 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100 + + + src/app/pages/collection/pages/collection/collection.page.html + 110 + + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 206,205 + + + src/app/pages/token/pages/new/summary/summary.component.html + 242,241 + + فضاء + + + Proposal + + src/app/@shell/ui/header/header.component.html + 103 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 29 + + اقتراح + + + Award + + src/app/@shell/ui/header/header.component.html + 106 + + + src/app/pages/award/pages/award/award.page.html + 29 + + + src/app/pages/award/pages/award/award.page.ts + 98 + + جائزة + + + Collection + + src/app/@shell/ui/header/header.component.html + 110 + + + src/app/@shell/ui/header/header.component.html + 129 + + + src/app/pages/collection/pages/collection/collection.page.html + 37 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136 + + + src/app/pages/nft/pages/new/single/single.page.html + 346 + + + src/app/pages/space/pages/collections/collections.page.html + 50 + + مجموعة + + + Token + + src/app/@shell/ui/header/header.component.html + 113 + + + src/app/@shell/ui/header/header.component.html + 132 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 321 + + + src/app/pages/token/pages/token/token.page.html + 29 + + + src/app/pages/token/pages/token/token.page.ts + 99 + + + src/app/pages/token/pages/trade/trade.page.ts + 274 + + Token + + + To unlock more features you have to stake SOON token. + + src/app/@shell/ui/header/header.component.html + 124,126 + + To unlock more features you have to stake SOON token. + + + VIP LEVEL + + src/app/@shell/ui/header/header.component.html + 197,198 + + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 37,38 + + + src/app/pages/member/pages/activity/activity.page.html + 146,147 + + VIP LEVEL + + + None. + + src/app/@shell/ui/header/header.component.html + 232 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 77 + + None. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 240 + + + src/app/components/auth/services/auth.service.ts + 551 + + صفحتي الشخصية + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 265,266 + + Purchase has not been completed + + + You have + + src/app/@shell/ui/header/header.component.html + 270 + + لديك + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 272 + + لإنهاء العملية الخاصة بك + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 282,283 + + Open Checkout + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 334 + + لقد فزت بـ NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 335 + + أنت مالك لـ NFT جديد. تهانينا! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 342 + + لم ينجح عرضك! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 343 + + عرضك على + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 344 + + زيدَ عنه! حاول بعرض أكبر! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 351 + + عرض للتو + + + for + + src/app/@shell/ui/header/header.component.ts + 352 + + + src/app/components/timeline/timeline.component.html + 171 + + من أجل + + + Your + + src/app/@shell/ui/header/header.component.ts + 353 + + الخاص بك + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 354 + + قد تلقى عرض جديد لـ + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 377 + + غير مدعوم + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 378 + + هذا الإشعار غير مدعوم بعد في لغتك + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27,28 + + فضاء + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 38,39 + + اقتراح + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 49,50 + + جائزة + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 60,61 + + مجموعة + + + Token + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 70,71 + + Token + + + Stake more SOON to create tokens and collections. + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 81,84 + + Stake more SOON to create tokens and collections. + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 57,58 + + Connect to your MetaMask wallet + + + Connect via TanglePay + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 73 + + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 47 + + Connect via TanglePay + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 97 + + خروج + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 103 + + تصميم + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8 + + The page you were looking for was not found + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 9,11 + + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + اكتشف Soonaverse + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 19 + + Network status + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 30,31 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 84,85 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 140,141 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 197,198 + + Network status + + + Operational + + src/app/@shell/ui/sider/network-status/network-status.component.html + 36 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 90 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 146 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 203 + + Operational + + + Degraded Performance + + src/app/@shell/ui/sider/network-status/network-status.component.html + 43 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 97 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 153 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 210 + + Degraded Performance + + + Down + + src/app/@shell/ui/sider/network-status/network-status.component.html + 50 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 104 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 160 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 217 + + Down + + + Last milestone + + src/app/@shell/ui/sider/network-status/network-status.component.html + 57,58 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 111,112 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 170,171 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 224,225 + + Last milestone + + + Devnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 78,79 + + + src/app/components/network/components/select-network/select-network.component.html + 61,63 + + Devnet + + + Shimmer Mainnet Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 132,133 + + Shimmer Mainnet Coming SOON + + + Testnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 191,192 + + + src/app/components/network/components/select-network/select-network.component.html + 33,35 + + Testnet + + + Assembly + + src/app/@shell/ui/sider/network-status/network-status.component.html + 237 + + Assembly + + + Assembly Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 244,245 + + Assembly Coming SOON + + + Shimmer EVM Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 266,267 + + Shimmer EVM Coming SOON + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 48 + + قراءة الوثائق + + + Show more + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 47 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 27 + + + src/app/components/timeline/timeline.component.html + 304 + + عرض المزيد + + + Show less + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 48 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 28 + + + src/app/components/timeline/timeline.component.html + 303 + + عرض أقل + + + Search here... + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 50 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 30 + + Search here... + + + Reset + + + src/app/components/algolia/algolia-clear/algolia-clear.component.html + 5,7 + + Reset + + + + Search + + src/app/components/algolia/search/search.component.html + 20,19 + + + src/app/components/collection/components/select-collection/select-collection.component.html + 95,94 + + + src/app/components/space/components/select-space/select-space.component.html + 95,94 + + بحث + + + Start typing... + + src/app/components/algolia/search/search.component.html + 36 + + Start typing... + + + Open + + src/app/components/algolia/services/algolia.service.ts + 28 + + مفتوح + + + Guardians of Space Only + + src/app/components/algolia/services/algolia.service.ts + 30 + + حراس الفضاء فقط + + + Members of Space Only + + src/app/components/algolia/services/algolia.service.ts + 32 + + أعضاء الفضاء فقط + + + Members With Badge Only + + src/app/components/algolia/services/algolia.service.ts + 34 + + أعضاء الفضاء مع شارة فقط + + + Members With NFT only + + src/app/components/algolia/services/algolia.service.ts + 36 + + Members With NFT only + + + Unavailable for sale + + src/app/components/algolia/services/algolia.service.ts + 49 + + Unavailable for sale + + + On Auction + + src/app/components/algolia/services/algolia.service.ts + 51 + + On Auction + + + Available + + src/app/components/algolia/services/algolia.service.ts + 53 + + + src/app/components/award/components/award-status/award-status.component.html + 23 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 61 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 162 + + + src/app/pages/space/pages/collections/collections.page.ts + 31 + + + src/app/pages/token/pages/token/token.page.ts + 256 + + متوفر + + + On Sale + + src/app/components/algolia/services/algolia.service.ts + 55 + + On Sale + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 19 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23 + + اتصل بمحفظة Metamask الخاصة بك + + + TanglePay + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 43 + + TanglePay + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 67 + + تأكد من تحديد سلسلة IOTA EVM CHAIN في MetaMask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 69 + + اسم الشبكة: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 70 + + رابط RPC + https://evm.wasp.sc.iota.org + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 71 + + رقم السلسلة: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 89,90 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 120,121 + + إلغاء + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 8,10 + + اتصال + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + قطع الاتصال + + + Staking + + src/app/components/auth/services/auth.service.ts + 90 + + Staking + + + Tokens + + src/app/components/auth/services/auth.service.ts + 97 + + + src/app/pages/discover/pages/awards/awards.page.html + 145,144 + + + src/app/pages/member/pages/member/member.page.ts + 66 + + + src/app/pages/member/pages/tokens/tokens.page.html + 49 + + + src/app/pages/member/pages/tokens/tokens.page.html + 235 + + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 41 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 2 + + Tokens + + + Swap + + src/app/components/auth/services/auth.service.ts + 104 + + Swap + + + Pool + + src/app/components/auth/services/auth.service.ts + 111 + + Pool + + + Marketplace + + src/app/components/auth/services/auth.service.ts + 118 + + السوق + + + My Overview + + src/app/components/auth/services/auth.service.ts + 125 + + + src/app/pages/dashboard/dashboard.page.html + 2 + + نظرة عامة + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 232 + + تعذر توقيع المعاملة. الرجاء محاولة إعادة تحميل الصفحة. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 278 + + يجب عليك فتح MetaMask الخاص بك أولاً! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 290 + + يجب عليك تمكين قراءة عنوان الحساب الخاص بك. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 298 + + الرجاء التأكد من اختيار العنوان في MetaMask! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 307 + + + src/app/components/auth/services/auth.service.ts + 378 + + غير قادر على الحصول على nonce للتوثيق! + + + Unable to connect your TanglePay wallet. + + src/app/components/auth/services/auth.service.ts + 343 + + + src/app/components/auth/services/auth.service.ts + 482 + + Unable to connect your TanglePay wallet. + + + Unable to detect address in TanglePay! + + src/app/components/auth/services/auth.service.ts + 349 + + Unable to detect address in TanglePay! + + + You have to open Soonaverse in wallet app. + + src/app/components/auth/services/auth.service.ts + 443 + + You have to open Soonaverse in wallet app. + + + Failed to initialize wallet, try to reload page. + + src/app/components/auth/services/auth.service.ts + 445 + + Failed to initialize wallet, try to reload page. + + + Give badges + + src/app/components/award/components/award-awards/award-awards.component.html + 11 + + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 16 + + Give badges + + + Once issued, this badge is sent to the rewarded participant's wallet. + + src/app/components/award/components/award-awards/award-awards.component.html + 34 + + Once issued, this badge is sent to the rewarded participant's wallet. + + + Upload CSV + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 31,32 + + Upload CSV + + + Download CSV template + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 34 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 85 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 10 + + Download CSV template + + + You can create badge airdrops for any user. You can upload CSV with users ETH addresses and they will be properly reward. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 42,44 + + You can create badge airdrops for any user. You can upload CSV with users ETH addresses and they will be properly reward. + + + If you don’t know how to prepare CSV file, you can download our template made for you. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 50,51 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 101,102 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 25,26 + + If you don’t know how to prepare CSV file, you can download our template made for you. + + + Confirm schedule + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 77 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 128 + + Confirm schedule + + + ETH Address + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 97 + + ETH Address + + + Action + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 98 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 288 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 153 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 22 + + + src/app/pages/token/pages/trade/trade.page.html + 214 + + + src/app/pages/token/pages/trade/trade.page.html + 288 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 24 + + عملية + + + Badge + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 104 + + + src/app/pages/award/pages/new/new.page.html + 298,297 + + شارة + + + Submitted. + + src/app/components/award/components/award-give-badges/award-give-badges.component.ts + 103 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 137 + + Submitted. + + + Fund Award & Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 3 + + Fund Award & Mint + + + Reward Token + + src/app/components/award/components/award-mint/award-mint.component.html + 21 + + Reward Token + + + Reward to be funded + + src/app/components/award/components/award-mint/award-mint.component.html + 43 + + Reward to be funded + + + Confirm & Start + + src/app/components/award/components/award-mint/award-mint.component.html + 98,99 + + Confirm & Start + + + Once you agree with the terms, the generated address will remain active during the whole process. + + src/app/components/award/components/award-mint/award-mint.component.html + 105,107 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 181,183 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 93,95 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 146,148 + + Once you agree with the terms, the generated address will remain active during the whole process. + + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + src/app/components/award/components/award-mint/award-mint.component.html + 120,121 + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + + Transaction history + + src/app/components/award/components/award-mint/award-mint.component.html + 159 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 252 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 246 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 134 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 176 + + + src/app/components/space/components/space-claim/space-claim.component.html + 113 + + + src/app/components/space/components/space-claim/space-claim.component.html + 135 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 122 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 144 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 207 + + + src/app/components/token/components/token-bid/token-bid.component.html + 212 + + + src/app/components/token/components/token-bid/token-bid.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 256 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 249 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 254 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 276 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 209 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 269 + + + src/app/components/token/components/token-stake/token-stake.component.html + 319 + + + src/app/components/token/components/token-stake/token-stake.component.html + 341 + + + src/app/components/token/components/token-vote/token-vote.component.html + 271 + + + src/app/components/token/components/token-vote/token-vote.component.html + 293 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 110 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 146 + + Transaction history + + + Transaction complete. Congratulations. + + src/app/components/award/components/award-mint/award-mint.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 271 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 235 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 277 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 294 + + اكتملت المعاملة. تهانينا. + + + Finish Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 191,192 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 289,290 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 281,282 + + Finish Mint + + + Funding info + + src/app/components/award/components/award-mint/award-mint.component.ts + 83 + + Funding info + + + Make transaction + + src/app/components/award/components/award-mint/award-mint.component.ts + 84 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 92 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 87 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 101 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 77 + + إجراء العملية + + + Wait for confirmation + + src/app/components/award/components/award-mint/award-mint.component.ts + 85 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 93 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 87 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 108 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 88 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 102 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 78 + + في انتظار التأكيد + + + Confirmed + + src/app/components/award/components/award-mint/award-mint.component.ts + 86 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 94 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 88 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 109 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 89 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 103 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 79 + + تم التأكيد + + + Payment received. + + src/app/components/award/components/award-mint/award-mint.component.ts + 141 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 150 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 196 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 136 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 136 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 145 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 155 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 140 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 159 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 157 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 131 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 224 + + Payment received. + + + Confirming transaction. + + src/app/components/award/components/award-mint/award-mint.component.ts + 158 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 167 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 213 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 164 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 185 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 153 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 153 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 162 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 172 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 157 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 176 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 174 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 148 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 241 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 208 + + Confirming transaction. + + + Transaction confirmed. + + src/app/components/award/components/award-mint/award-mint.component.ts + 167 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 176 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 222 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 173 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 194 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 162 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 162 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 171 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 181 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 166 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 185 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 183 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 157 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 250 + + Transaction confirmed. + + + Invalid amount received. Refunding transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 186 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 203 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 258 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 182 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 190 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 210 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 186 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 204 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 212 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 190 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 270 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 247 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 159 + + تم استلام مبلغ غير صالح. استرداد المعاملة... + + + Invalid transaction.You must gift storage deposit. + + src/app/components/award/components/award-mint/award-mint.component.ts + 209 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 218 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 281 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 206 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 205 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 213 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 225 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 209 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 227 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 227 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 206 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 293 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 262 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 175 + + Invalid transaction.You must gift storage deposit. + + + Invalid payment refunded. + + src/app/components/award/components/award-mint/award-mint.component.ts + 224 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 233 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 296 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 220 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 228 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 241 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 224 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 242 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 243 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 221 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 308 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 279 + + Invalid payment refunded. + + + Waiting for transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 300 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 321 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 442 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 290 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 313 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 311 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 316 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 306 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 348 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 327 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 319 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 350 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 336 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 415 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 398 + + Waiting for transaction... + + + Pending Funding + + + src/app/components/award/components/award-status/award-status.component.html + 5,6 + + Pending Funding + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 11,12 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 11,12 + + مرفوض + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 17 + + + src/app/pages/space/pages/awards/awards.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 32 + + مكتمل + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 571 + + أعضاء الفضاء فقط + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 558 + + حراس الفضاء فقط + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 29 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 584 + + أعضاء الفضاء مع شارة فقط + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 39 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 596 + + على الأقل NFT واحد من المجموعات + + + Specific members only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 53 + + Specific members only + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 28 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 95 + + + src/app/components/token/components/token-card/token-card.component.html + 70 + + يبدأ في + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 30 + + + src/app/components/countdown/countdown.component.html + 56 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 109 + + أيام + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 33 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 122 + + يبدأ اليوم + + + Collection is not yet migrated to the decentralized network. + + src/app/components/collection/components/collection-card/collection-card.component.html + 59 + + Collection is not yet migrated to the decentralized network. + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 76 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 612 + + إصدار محدود + + + Floor Price + + src/app/components/collection/components/collection-card/collection-card.component.html + 104 + + + src/app/pages/collection/pages/collection/collection.page.html + 203 + + Floor Price + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 56 + + قيد المراجعة + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 66 + + + src/app/pages/space/pages/awards/awards.page.ts + 33 + + + src/app/pages/space/pages/collections/collections.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 33 + + مرفوض + + + Remaining + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 42 + + Remaining + + + NFTs + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 49 + + + src/app/pages/market/pages/market/market.page.ts + 14 + + + src/app/pages/market/pages/market/market.page.ts + 35 + + + src/app/pages/member/pages/member/member.page.ts + 67 + + NFTs + + + Mint collection on network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 3 + + Mint collection on network + + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 43,45 + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + + Unsold NFT's + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 60,61 + + Unsold NFT's + + + Decide what should happen with all NFTs that were not sold yet. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 67 + + Decide what should happen with all NFTs that were not sold yet. + + + Keep the same price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 76 + + Keep the same price + + + Take Ownership + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 86 + + Take Ownership + + + Set new price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 96 + + Set new price + + + Burn all unsold + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 103 + + Burn all unsold + + + Note that the collection ownership will be granted only to your profile. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 130,131 + + Note that the collection ownership will be granted only to your profile. + + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 141,143 + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 150 + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + + Confirm & Start minting + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 174,175 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 139,140 + + Confirm & Start minting + + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 196,198 + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + + remaining to make the transfer. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 171 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 90 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 132 + + + src/app/components/space/components/space-claim/space-claim.component.html + 78 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 87 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 140 + + + src/app/components/token/components/token-bid/token-bid.component.html + 170 + + + src/app/components/token/components/token-claim/token-claim.component.html + 199 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 194 + + + src/app/components/token/components/token-stake/token-stake.component.html + 279 + + + src/app/components/token/components/token-vote/token-vote.component.html + 209 + + تبقى لإجراء التحويل. + + + Expired + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 213 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 174 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 93 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 135 + + + src/app/components/space/components/space-claim/space-claim.component.html + 81 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 90 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 143 + + + src/app/components/token/components/token-bid/token-bid.component.html + 173 + + + src/app/components/token/components/token-claim/token-claim.component.html + 202 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 197 + + + src/app/components/token/components/token-stake/token-stake.component.html + 282 + + + src/app/components/token/components/token-vote/token-vote.component.html + 212 + + + src/app/pages/token/services/helper.service.ts + 204 + + انتهت مدة الصلاحية + + + NFT's from this collection are now being migrated. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 284,285 + + NFT's from this collection are now being migrated. + + + NFT's in collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 308,309 + + NFT's in collection + + + Total Storage Fee + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 318 + + Total Storage Fee + + + (NFTs Storage Fee + Collection Storage Fee) + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 319 + + (NFTs Storage Fee + Collection Storage Fee) + + + Select network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 91 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 86 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 100 + + Select network + + + Pending + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5,6 + + قيد الانتظار + + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 4 + + + src/app/pages/nft/pages/new/single/single.page.html + 352 + + مجموعة مطلوبة. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 13 + + حدد المجموعة + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 83 + + حدد مجموعة + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 114 + + + src/app/components/space/components/select-space/select-space.component.html + 114 + + لا توجد نتائج لـ + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 20 + + جميع المجموعات + + + + + + + src/app/components/confirm-modal/confirm-modal.component.html + 48,50 + + + src/app/components/confirm-modal/confirm-modal.component.html + 51,53 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 246,251 + + + src/app/components/token/components/token-vote/token-vote.component.html + 46,47 + + + src/app/pages/collection/pages/collection/collection.page.html + 130,131 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 55,56 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 71,72 + + + + + Are you sure? + + src/app/components/confirm-modal/confirm-modal.component.ts + 30 + + Are you sure? + + + Close + + src/app/components/confirm-modal/confirm-modal.component.ts + 33 + + Close + + + Confirm + + src/app/components/confirm-modal/confirm-modal.component.ts + 34 + + + src/app/components/token/components/token-bid/token-bid.component.html + 146 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 170 + + + src/app/components/token/components/token-vote/token-vote.component.html + 181 + + Confirm + + + Connect wallet + + src/app/components/connect-wallet/connect-wallet.component.html + 7 + + Connect wallet + + + d + + src/app/components/countdown/countdown.component.html + 55 + + يوم + + + h + + src/app/components/countdown/countdown.component.html + 68 + + ساعة + + + hours + + src/app/components/countdown/countdown.component.html + 69 + + ساعات + + + m + + src/app/components/countdown/countdown.component.html + 81 + + دقيقة + + + min + + src/app/components/countdown/countdown.component.html + 82 + + دقيقة + + + s + + src/app/components/countdown/countdown.component.html + 94 + + ثانية + + + sec + + src/app/components/countdown/countdown.component.html + 95 + + ثانية + + + Ends + + src/app/components/date-tag/date-tag.component.ts + 11 + + Ends + + + Price + + src/app/components/iota-input/iota-input.component.html + 3 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 139 + + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 81 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 19 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 124 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 49 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 75 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 37 + + + src/app/pages/token/pages/trade/trade.page.html + 209 + + + src/app/pages/token/pages/trade/trade.page.html + 283 + + + src/app/pages/token/pages/trade/trade.page.html + 372 + + + src/app/pages/token/pages/trade/trade.page.html + 659 + + + src/app/pages/token/pages/trade/trade.page.html + 846 + + سعر + + + Verified addresses + + src/app/components/member/components/member-about/member-about.component.html + 90 + + Verified addresses + + + Manage + + src/app/components/member/components/member-about/member-about.component.html + 96 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 297 + + + src/app/pages/space/pages/space/space.page.ts + 53 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 18 + + Manage + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 119 + + الأفضية المنضمة مؤخرا + + + All + + src/app/components/member/components/member-about/member-about.component.html + 124 + + الكل + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 155 + + لا توجد مساهمة حتى الآن. + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 74 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 22 + + جوائز + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 14 + + الاسم المعروض + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19 + + تعيين اسم العرض. هذا لا يغير اسم المستخدم الخاص بك. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 26 + + اسم العرض (اختياري) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 36 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 208 + + + src/app/pages/space/pages/space/space.page.ts + 44 + + عن التطبيق + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 41 + + وصف موجز لنفسك يظهر في ملفك الشخصي. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 48 + + الوصف (اختياري) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 57 + + + src/app/pages/space/pages/upsert/upsert.page.html + 166 + + الصورة الشخصية + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 62 + + قم بتخصيص هويتك في Soonaverse. + + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,78 + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 92 + + رائع! يبدو أن صورتك هي أجمل صورة خاصة. تهانينا. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 97 + + + src/app/pages/space/pages/upsert/upsert.page.html + 54 + + الشبكات + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 99 + + + src/app/pages/space/pages/upsert/upsert.page.html + 61 + + اسم مستخدم Github غير صالح. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 105 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67 + + اكتب اسم حسابك في Github + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 117 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 177 + + + src/app/pages/space/pages/upsert/upsert.page.html + 78 + + اسم تويتر غير صالح. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 123 + + + src/app/pages/space/pages/upsert/upsert.page.html + 84 + + اكتب اسم حسابك في تويتر + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 135 + + يقبل اسم المستخدم على شكل #1234 فقط. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 141 + + اكتب اسم حسابك في ديسكورد + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 155 + + إعدادات + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 157,158 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 123,124 + + حفظ التغييرات + + + + + + + src/app/components/network/components/select-network/select-network.component.html + 4,6 + + + + + + Shimmer + + src/app/components/network/components/select-network/select-network.component.html + 17 + + + src/app/components/network/components/select-network/select-network.component.html + 28 + + + src/app/components/network/components/selected-network/selected-network.component.html + 11 + + + src/app/pages/award/pages/award/award.page.html + 44 + + + src/app/pages/collection/pages/collection/collection.page.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 575 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 169 + + Shimmer + + + IOTA + + src/app/components/network/components/select-network/select-network.component.html + 45 + + + src/app/components/network/components/select-network/select-network.component.html + 56 + + + src/app/components/network/components/selected-network/selected-network.component.html + 19 + + + src/app/pages/award/pages/award/award.page.html + 52 + + + src/app/pages/collection/pages/collection/collection.page.html + 59 + + + src/app/pages/nft/pages/nft/nft.page.html + 583 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 177 + + IOTA + + + Selected Network + + src/app/components/network/components/selected-network/selected-network.component.html + 4,6 + + Selected Network + + + Shimmer Testnet + + src/app/components/network/components/selected-network/selected-network.component.html + 15 + + + src/app/pages/award/pages/award/award.page.html + 48 + + + src/app/pages/collection/pages/collection/collection.page.html + 55 + + + src/app/pages/nft/pages/nft/nft.page.html + 579 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 173 + + Shimmer Testnet + + + IOTA Devnet + + src/app/components/network/components/selected-network/selected-network.component.html + 23 + + + src/app/pages/award/pages/award/award.page.html + 56 + + + src/app/pages/collection/pages/collection/collection.page.html + 63 + + + src/app/pages/nft/pages/nft/nft.page.html + 587 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 181 + + IOTA Devnet + + + Send + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + إرسال + + + to following address: + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + to following address: + + + Copied + + src/app/components/network/components/send-funds/send-funds.component.html + 25 + + + src/app/components/share/share.component.html + 27 + + + src/app/components/wallet-address/wallet-address.component.html + 29 + + تم النسخ + + + Copy + + src/app/components/network/components/send-funds/send-funds.component.html + 26 + + نسخ + + + Do not send funds from an exchange, always use wallets you fully control. + + + src/app/components/network/components/send-funds/send-funds.component.html + 34,36 + + Do not send funds from an exchange, always use wallets you fully control. + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 3 + + تقديم عرض + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 15 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 16 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 25 + + صورة NFT + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 38 + + ينتهي + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 48 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 36 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46 + + الإتاوات + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 55 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 43 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 53 + + تُخصم الإتاوات تلقائياً وتُدفع للفنانين. + + + Royalties goes to + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 73,74 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 61,62 + + Royalties goes to + + + + + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 75,76 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 63,64 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 262,263 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 188,189 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 264,265 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 306,307 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 344,345 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 45 + + + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 109 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + اعلى عرض حالي + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 111 + + + src/app/pages/nft/pages/nft/nft.page.html + 111 + + أقل عرض مقبول + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 127 + + + src/app/pages/nft/pages/nft/nft.page.html + 116 + + العرض الخاص بك هو الأعلى + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 172,173 + + Current price is refreshing in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 208,209 + + سيتم قفل حجز NFT المرغوب به طيل مدة المزاد. بعد الدفع سيتم تأمين العرض الخاص بك، إذا اقتُرِحَ عرض أعلى، سوف يتم استرداد عطائك فورا. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 216,218 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,257 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 321,323 + + إذا اقتُرِحَ عرض أعلى، سوف يتم استرداد عطائك فورا. إذا كنت ترغب في تقديم عرض آخر، قم بإرسال مبلغ أعلى مباشرة إلى نفس العنوان. + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 237,238 + + تقديم عرض + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 278 + + Your transactions + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 286 + + تاريخ الإرسال + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 287 + + + src/app/pages/token/pages/trade/trade.page.html + 854 + + الوقت + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 289 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 33 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 110 + + + src/app/pages/member/pages/tokens/tokens.page.html + 328 + + + src/app/pages/member/pages/transactions/transactions.page.html + 25 + + + src/app/pages/nft/pages/nft/nft.page.html + 323 + + + src/app/pages/nft/pages/nft/nft.page.html + 385 + + + src/app/pages/nft/pages/nft/nft.page.html + 435 + + + src/app/pages/token/pages/trade/trade.page.html + 200 + + + src/app/pages/token/pages/trade/trade.page.html + 274 + + + src/app/pages/token/pages/trade/trade.page.html + 363 + + + src/app/pages/token/pages/trade/trade.page.html + 664 + + + src/app/pages/token/pages/trade/trade.page.html + 851 + + مبلغ + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 55 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 96 + + تفاصيل + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 311,310 + + + src/app/pages/nft/pages/nft/nft.page.html + 324 + + + src/app/pages/nft/pages/nft/nft.page.html + 360,359 + + + src/app/pages/nft/pages/nft/nft.page.html + 386 + + + src/app/pages/nft/pages/nft/nft.page.html + 410,409 + + + src/app/pages/nft/pages/nft/nft.page.html + 436 + + + src/app/pages/nft/pages/nft/nft.page.html + 460,459 + + رابط + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 345 + + تهانينا على الفوز بـ NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 357,358 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 283,284 + + + src/app/components/token/components/token-bid/token-bid.component.html + 271,272 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 313,314 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 306,307 + + + src/app/components/token/components/token-vote/token-vote.component.html + 330,331 + + إغلاق الدفع + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 368,369 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 294,295 + + إظهار NFT الخاص بي + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 384 + + Bidding is expired. Good luck next time :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 272 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 459 + + الNFT المنشأ + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 274 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 461 + + SFT + + + NFT is not yet migrated to the decentralized network. + + src/app/components/nft/components/nft-card/nft-card.component.html + 65 + + NFT is not yet migrated to the decentralized network. + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 118 + + يوم + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 156 + + العرض الحالي + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 191 + + + src/app/pages/nft/pages/nft/nft.page.html + 594 + + يملكه + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 229,231 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 167 + + NFT جديد + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 3 + + إتمام الشراء + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 74,75 + + Total price + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150,151 + + تأكيد و قفل + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 156 + + سيتم قفل NFT الخاص بك للشراء لـ + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + دقائق + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 185 + + تلقينا مبلغ غير صالح. حاول مرة أخرى. + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 237,238 + + التحقق من صحة المعاملة... + + + Order created. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 437 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 332 + + Order created. + + + Deposit NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 215 + + Deposit NFT + + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 46,48 + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + + Confirm & Start deposit + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 76,77 + + Confirm & Start deposit + + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 113,115 + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + + NFT has been deposited. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 165 + + NFT has been deposited. + + + See NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 169,170 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 211,212 + + See NFT + + + Terms & Conditions + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 85 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 106 + + Terms & Conditions + + + Send NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 86 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 107 + + Send NFT + + + NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 147 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 168 + + NFT received. + + + Invalid NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 191 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 212 + + Invalid NFT received. + + + Invalid NFT refunded. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 205 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 226 + + Invalid NFT refunded. + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 19 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 37 + + معاينة + + + Sale Starts + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 57 + + + src/app/pages/nft/services/helper.service.ts + 142 + + يبدأ البيع + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 60 + + + src/app/pages/nft/pages/nft/nft.page.html + 70 + + السعر الحالي + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 80 + + المؤلف + + + System info + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 119 + + + src/app/pages/nft/pages/nft/nft.page.html + 634 + + System info + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 130 + + + src/app/pages/nft/pages/nft/nft.page.html + 654 + + العنوان الحالي غير متصل بشبكة رئيسية. حالما يتم دعم هذه الوظيفة على IOTA/Shimmer، سوف يكون لديك القدرة على نقل هذا NFT بنقرة واحدة إلى الشبكة التي تختارها. + + + Properties + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 135 + + + src/app/pages/nft/pages/new/single/single.page.html + 90 + + خصائص + + + Stats + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 139 + + + src/app/pages/nft/pages/new/single/single.page.html + 193,192 + + خصائص + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149 + + + src/app/pages/nft/pages/new/single/single.page.html + 301 + + + src/app/pages/nft/pages/nft/nft.page.html + 27 + + صورة NFT + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + بيانات تعريف IPFS + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + صورة IPFS + + + Available once minted... + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 64 + + + src/app/pages/nft/pages/nft/nft.page.ts + 81 + + Available once minted... + + + Set your floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 6,7 + + Set your floor price + + + Available time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 42,43 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 42,43 + + Available time + + + NOW + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 54,55 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 54,55 + + NOW + + + Select Date/Time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Select Date/Time + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 71 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 71 + + + src/app/pages/nft/pages/new/single/single.page.html + 69 + + تاريخ التوفر مطلوب. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 80 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 80 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 70 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 81 + + + src/app/pages/nft/pages/new/single/single.page.html + 68 + + + src/app/pages/nft/pages/new/single/single.page.html + 79 + + متوفر في + + + Auction length + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 91,92 + + Auction length + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 98 + + سيمكن تحديد مدد مناقصات عديدة في الإصدار المقبل، بعد تصويت الجميع! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 115 + + مدة المزاد 3 أيام + + + Auction can't be canceled after start date + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 125 + + Auction can't be canceled after start date + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 129 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 145 + + بمجرد اكتمال إدراجك، ستحصل على رسالة تأكيد. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 138,139 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 154,155 + + Confirm listing + + + Set your price + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 6,7 + + Set your price + + + Sale type + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Sale type + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 103,104 + + Open Sale + + + Specific member(s) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 113,114 + + Specific member(s) + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2 + + + src/app/pages/token/pages/trade/trade.page.html + 110 + + Trade history + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 8,10 + + الغرض لوحدك فقط + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 16 + + سيؤدي هذا إلى جعل العنصر الخاص بك غير متوفر للبيع. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 17 + + إيقاف البيع! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 15 + + عرض العنصر للبيع + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 80 + + ليس للبيع + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 88 + + + src/app/pages/token/services/new.service.ts + 29 + + سعر محدد + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 96 + + مزاد علني + + + Stake NFT + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 221 + + Stake NFT + + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 46,48 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 147,149 + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + + For how long you want to stake? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 56,57 + + + src/app/components/token/components/token-stake/token-stake.component.html + 174,175 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 57,58 + + For how long you want to stake? + + + Stake type? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 77,78 + + Stake type? + + + Confirm & Start Stake + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 118,119 + + Confirm & Start Stake + + + NFT has been staked. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 207 + + NFT has been staked. + + + Dynamic + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 76 + + Dynamic + + + Static + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 80 + + Static + + + More + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 97,98 + + More + + + Pending + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 6,7 + + + src/app/pages/token/pages/token/token.page.html + 36 + + + src/app/pages/token/pages/trade/trade.page.html + 524 + + Pending + + + Rejected + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 12,13 + + + src/app/pages/token/pages/token/token.page.html + 42 + + Rejected + + + Commencing + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 18,19 + + Commencing + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 24,25 + + قيد التنفيذ + + + Completed + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 31,32 + + Completed + + + Share + + src/app/components/share/share.component.html + 16 + + + src/app/components/share/share.component.html + 39 + + + src/app/pages/token/pages/trade/trade.page.html + 64 + + + src/app/pages/token/pages/trade/trade.page.html + 635,634 + + شارك + + + Copy to clipboard + + src/app/components/share/share.component.html + 28 + + نسخ إلى الحافظة + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 4 + + + src/app/pages/award/pages/new/new.page.html + 121 + + + src/app/pages/proposal/pages/new/new.page.html + 211 + + فضاء مطلوب. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 13 + + اختر فضاء + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 83 + + + src/app/pages/award/pages/new/new.page.html + 152 + + + src/app/pages/proposal/pages/new/new.page.html + 242 + + اختر فضاء + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 20 + + جميع الفضاءت + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 19,20 + + Joined + + + members + + src/app/components/space/components/space-card/space-card.component.html + 44 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 23 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + الاعضاء + + + Space Claim + + src/app/components/space/components/space-claim/space-claim.component.html + 3 + + Space Claim + + + Confirm and generate address + + src/app/components/space/components/space-claim/space-claim.component.html + 54,55 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 52,53 + + + src/app/components/token/components/token-claim/token-claim.component.html + 138,139 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 96,97 + + + src/app/components/token/components/token-stake/token-stake.component.html + 251,252 + + Confirm and generate address + + + Claim complete. Congratulations. + + src/app/components/space/components/space-claim/space-claim.component.html + 160 + + + src/app/components/token/components/token-claim/token-claim.component.html + 281 + + Claim complete. Congratulations. + + + Close + + src/app/components/space/components/space-claim/space-claim.component.html + 172,173 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 181,182 + + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 29,30 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 79,80 + + + src/app/components/token/components/token-claim/token-claim.component.html + 293,294 + + + src/app/components/token/components/token-stake/token-stake.component.html + 378,379 + + إغلاق + + + Invalid amount or invalid senders address. Refunding transaction... + + src/app/components/space/components/space-claim/space-claim.component.ts + 183 + + Invalid amount or invalid senders address. Refunding transaction... + + + Funds refunded. + + src/app/components/space/components/space-claim/space-claim.component.ts + 222 + + Funds refunded. + + + Space claim submitted. + + src/app/components/space/components/space-claim/space-claim.component.ts + 306 + + Space claim submitted. + + + Token Reward Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 16 + + Token Reward Schedule + + + Existing Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 29 + + Existing Schedule + + + Upload New + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 37 + + Upload New + + + Vault address: + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 55,64 + + Vault address: + + + Schedule a new Reward + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 82,83 + + Schedule a new Reward + + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 93,95 + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + + Start Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 148 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 24 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 24 + + تاريخ البداية + + + End Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 149 + + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 14 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 25 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 25 + + تاريخ الانتهاء + + + Vesting Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 150 + + Vesting Date + + + Tokens to Distribute + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 151 + + Tokens to Distribute + + + Status + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 152 + + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 110,109 + + + src/app/pages/token/pages/trade/trade.page.html + 376 + + الوضع + + + Proposal created to remove the reward. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 154 + + Proposal created to remove the reward. + + + By checking this box, you agree with + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 12 + + بالضغط على هذا الزر، فإنك توافق على + + + Terms and Conditions + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 13 + + الأحكام والشروط + + + Timeline + + src/app/components/timeline/timeline.component.html + 2 + + + src/app/components/timeline/timeline.component.html + 8 + + الخط الزمني + + + Earned Badge + + src/app/components/timeline/timeline.component.html + 66 + + الشارة المكتسبة + + + with + + src/app/components/timeline/timeline.component.html + 66 + + مع + + + Listed by + + src/app/components/timeline/timeline.component.html + 109 + + مقدم للبيع من طرف + + + Made available for auction by + + src/app/components/timeline/timeline.component.html + 112 + + متاحًا للمناقصة من طرف + + + Purchased by + + src/app/components/timeline/timeline.component.html + 170 + + تم شراؤه من لدن + + + See + + src/app/components/timeline/timeline.component.html + 181 + + See + + + Hide + + src/app/components/timeline/timeline.component.html + 182 + + Hide + + + Listed by space + + src/app/components/timeline/timeline.component.html + 287 + + تصفية حسب الفضاءات + + + Refund blocked funds + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 3 + + Refund blocked funds + + + Total available tokens to refund + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 29 + + Total available tokens to refund + + + Refund complete. Congratulations. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 169 + + Refund complete. Congratulations. + + + Credit refund submitted. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 309 + + Credit refund submitted. + + + Airdrop tokens on the network + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 3 + + Airdrop tokens on the network + + + Tokens to airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 56,57 + + Tokens to airdrop + + + Confirm & Start Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 86,87 + + Confirm & Start Airdrop + + + Tokens to Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 120,121 + + Tokens to Airdrop + + + Finish Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 239,240 + + Finish Airdrop + + + Detail + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 60,61 + + Detail + + + Trade + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 70,71 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 201,202 + + Trade + + + Price (USD) + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 101 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 145 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 86 + + Price (USD) + + + 24h Change + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 126,127 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 115,116 + + 24h Change + + + 24h Volume + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 154 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 146 + + 24h Volume + + + M. Cap + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 172 + + M. Cap + + + Open buy order + + src/app/components/token/components/token-bid/token-bid.component.html + 3 + + Open buy order + + + Summary + + src/app/components/token/components/token-bid/token-bid.component.html + 29,30 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 39,40 + + + src/app/components/token/components/token-offer/token-offer.component.html + 46,47 + + Summary + + + Token amount to buy + + src/app/components/token/components/token-bid/token-bid.component.html + 34,35 + + Token amount to buy + + + Offered price per token + + src/app/components/token/components/token-bid/token-bid.component.html + 44,45 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 44,45 + + + src/app/components/token/components/token-offer/token-offer.component.html + 51,52 + + Offered price per token + + + Token amount to send + + src/app/components/token/components/token-bid/token-bid.component.html + 73,74 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 117,118 + + Token amount to send + + + ~ + + src/app/components/token/components/token-bid/token-bid.component.html + 89,98 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 60,69 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 90,99 + + + src/app/pages/token/pages/trade/trade.page.html + 553,556 + + ~ + + + I agree with + + src/app/components/token/components/token-bid/token-bid.component.html + 129 + + + src/app/components/token/components/token-claim/token-claim.component.html + 115 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 153 + + + src/app/components/token/components/token-offer/token-offer.component.html + 133 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 78 + + + src/app/components/token/components/token-refund/token-refund.component.html + 65 + + I agree with + + + Token terms and Conditions + + src/app/components/token/components/token-bid/token-bid.component.html + 131 + + + src/app/components/token/components/token-claim/token-claim.component.html + 117 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 155 + + + src/app/components/token/components/token-offer/token-offer.component.html + 135 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 80 + + + src/app/components/token/components/token-refund/token-refund.component.html + 67 + + Token terms and Conditions + + + and generate address + + src/app/components/token/components/token-bid/token-bid.component.html + 147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 171 + + + src/app/components/token/components/token-vote/token-vote.component.html + 182 + + and generate address + + + Once you agree with the terms, the generated address will remain active during the whole sale. + + src/app/components/token/components/token-bid/token-bid.component.html + 154,155 + + + src/app/components/token/components/token-claim/token-claim.component.html + 146,147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 178,179 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 103,104 + + Once you agree with the terms, the generated address will remain active during the whole sale. + + + Buy complete. Congratulations. + + src/app/components/token/components/token-bid/token-bid.component.html + 259 + + Buy complete. Congratulations. + + + Bid created. + + src/app/components/token/components/token-bid/token-bid.component.ts + 344 + + Bid created. + + + Are you sure you want to cancel the sale? + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 17 + + Are you sure you want to cancel the sale? + + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 23,25 + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + + Cancel sale + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 32,33 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 74,75 + + Cancel sale + + + Canceled public sale. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts + 56 + + Canceled public sale. + + + Total () + + src/app/components/token/components/token-cancel/token-cancel.component.html + 51,52 + + Total () + + + Are you sure you want to cancel your buy order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 66 + + Are you sure you want to cancel your buy order? + + + Are you sure you want to cancel your sell order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 69 + + Are you sure you want to cancel your sell order? + + + Confirm + + src/app/components/token/components/token-cancel/token-cancel.component.html + 76,77 + + Confirm + + + Cancelled. + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 48 + + + src/app/pages/token/pages/trade/trade.page.ts + 589 + + Cancelled. + + + Cancel your buy + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 80 + + Cancel your buy + + + Cancel your sell + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 81 + + Cancel your sell + + + Ongoing sale + + src/app/components/token/components/token-card/token-card.component.html + 22 + + Ongoing sale + + + Sale ends soon + + src/app/components/token/components/token-card/token-card.component.html + 23 + + Sale ends soon + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 24 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 21 + + Cooldown ends + + + Sale starts + + src/app/components/token/components/token-card/token-card.component.html + 55,57 + + Sale starts + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 115,117 + + + src/app/components/token/components/token-card/token-card.component.html + 175,177 + + Sale ends + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 130 + + + src/app/components/token/components/token-card/token-card.component.html + 190 + + + src/app/components/token/components/token-card/token-card.component.html + 250 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 176 + + + src/app/components/token/components/token-row/token-row.component.html + 79 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 20 + + Sale ends + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 235,237 + + Cooldown ends + + + Token Claim + + src/app/components/token/components/token-claim/token-claim.component.html + 3 + + Token Claim + + + Total available tokens to claim as of today + + src/app/components/token/components/token-claim/token-claim.component.html + 42 + + + src/app/components/token/components/token-claim/token-claim.component.html + 56 + + Total available tokens to claim as of today + + + Tokens available from + + src/app/components/token/components/token-claim/token-claim.component.html + 76 + + Tokens available from + + + Total tokens to claim + + src/app/components/token/components/token-claim/token-claim.component.html + 84 + + Total tokens to claim + + + Token claim submitted. + + src/app/components/token/components/token-claim/token-claim.component.ts + 320 + + Token claim submitted. + + + Guardian's of the space will be able to decide where this token will be minted. + + src/app/components/token/components/token-info/token-info-description.component.html + 41 + + Guardian's of the space will be able to decide where this token will be minted. + + + Icon + + src/app/components/token/components/token-info/token-info-description.component.ts + 25 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 24 + + Icon + + + Name + + src/app/components/token/components/token-info/token-info-description.component.ts + 26 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 25 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 31,30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 74 + + + src/app/pages/nft/pages/new/single/single.page.html + 21 + + + src/app/pages/nft/pages/new/single/single.page.html + 27,26 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 15 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 21,20 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 25 + + الاسم + + + Symbol + + src/app/components/token/components/token-info/token-info-description.component.ts + 27 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 30 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 39,38 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 26 + + Symbol + + + Launchpad Price + + src/app/components/token/components/token-info/token-info-description.component.ts + 28 + + Launchpad Price + + + Network + + src/app/components/token/components/token-info/token-info-description.component.ts + 29 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 20 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 5,4 + + + src/app/pages/nft/pages/nft/nft.page.html + 542 + + + src/app/pages/nft/pages/nft/nft.page.html + 564 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 119 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 160 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 28 + + Network + + + Total supply + + src/app/components/token/components/token-info/token-info-description.component.ts + 30 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 29 + + Total supply + + + Current distribution + + src/app/components/token/components/token-info/token-info-description.component.ts + 31 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 30 + + Current distribution + + + Type + + src/app/components/token/components/token-info/token-info-description.component.ts + 32 + + + src/app/pages/member/pages/tokens/tokens.page.html + 58 + + + src/app/pages/member/pages/tokens/tokens.page.html + 325 + + + src/app/pages/member/pages/transactions/transactions.page.html + 24 + + + src/app/pages/nft/pages/nft/nft.page.html + 384 + + + src/app/pages/nft/pages/nft/nft.page.html + 434 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 31 + + + src/app/pages/token/pages/trade/trade.page.html + 361 + + نوع + + + Coming soon + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 91,92 + + Coming soon + + + In Cooldown + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 98,99 + + + src/app/components/token/components/token-row/token-row.component.html + 245,246 + + In Cooldown + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 108,109 + + + src/app/components/token/components/token-row/token-row.component.html + 256,257 + + + src/app/pages/token/pages/trade/trade.page.html + 456 + + + src/app/pages/token/pages/trade/trade.page.html + 467 + + + src/app/pages/token/pages/trade/trade.page.html + 909,910 + + Buy + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 116 + + + src/app/pages/token/pages/trade/trade.page.html + 387 + + + src/app/pages/token/pages/trade/trade.page.html + 1210 + + Buy + + + Sale starts + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 167 + + + src/app/components/token/components/token-row/token-row.component.html + 70 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 19 + + Sale starts + + + Cooldown period ends + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 187,188 + + + src/app/components/token/components/token-row/token-row.component.html + 90,91 + + Cooldown period ends + + + Mint token on network + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 3 + + Mint token on network + + + Public sale will no longer be available after bringing token to a network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 45,46 + + Public sale will no longer be available after bringing token to a network. + + + Once minted all owners will have the option to migrate their tokens to the selected network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 56,58 + + Once minted all owners will have the option to migrate their tokens to the selected network. + + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 68,70 + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + + Tokens to migrate + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 92,93 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 173,174 + + Tokens to migrate + + + Locked public tokens + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 107,108 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 189,190 + + Locked public tokens + + + Open sale order + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 3 + + Open sale order + + + Token ID + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 30,31 + + + src/app/components/token/components/token-offer/token-offer.component.html + 27,28 + + Token ID + + + You will receive + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 74,75 + + + src/app/components/token/components/token-offer/token-offer.component.html + 73,74 + + + src/app/pages/token/pages/trade/trade.page.html + 1132,1133 + + You will receive + + + Fee + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 103 + + + src/app/components/token/components/token-offer/token-offer.component.html + 101 + + + src/app/pages/token/pages/trade/trade.page.html + 1172 + + Fee + + + No FEES! + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 110,111 + + + src/app/components/token/components/token-offer/token-offer.component.html + 108,109 + + + src/app/pages/token/pages/trade/trade.page.html + 1188,1189 + + No FEES! + + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 232,234 + + + src/app/components/token/components/token-vote/token-vote.component.html + 249,251 + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + + Sell complete. Congratulations. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 301 + + + src/app/components/token/components/token-vote/token-vote.component.html + 318 + + Sell complete. Congratulations. + + + Offer order created. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 346 + + Offer order created. + + + Open Token Sell + + src/app/components/token/components/token-offer/token-offer.component.html + 3 + + Open Token Sell + + + Your Balance + + src/app/components/token/components/token-offer/token-offer.component.html + 35,36 + + Your Balance + + + Offered amount of tokens + + src/app/components/token/components/token-offer/token-offer.component.html + 64,65 + + Offered amount of tokens + + + Create a Sell Order + + src/app/components/token/components/token-offer/token-offer.component.html + 151,152 + + Create a Sell Order + + + Offer created. + + src/app/components/token/components/token-offer/token-offer.component.ts + 102 + + Offer created. + + + Public sale info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 4 + + Public sale info + + + Start date is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 7 + + Start date is required. + + + Start date for the token offering + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 16 + + Start date for the token offering + + + Offering length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 23 + + Offering length is required. + + + Select token offering length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 48 + + Select token offering length (Default 2 days) + + + Token allocation info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 63 + + Token allocation info + + + Sale Setup + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 81 + + Sale Setup + + + Enable Cooldown period + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 87,88 + + Enable Cooldown period + + + Enable Cooldown with refund option. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 98,99 + + Enable Cooldown with refund option. + + + Cooldown period length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 103 + + Cooldown period length is required. + + + Select token cooldown length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 129 + + Select token cooldown length (Default 2 days) + + + No Cooldown. Participants can’t refund. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 149,150 + + No Cooldown. Participants can’t refund. + + + Enable Oversale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 160,161 + + Enable Oversale + + + No Oversale. Sale ends with 100% reached. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 171,172 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 54,55 + + No Oversale. Sale ends with 100% reached. + + + Sale continues after 100% reached + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 179,180 + + Sale continues after 100% reached + + + Confirm and schedule sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 195,196 + + Confirm and schedule sale + + + Price per token + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 106 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 34 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 42 + + Price per token + + + Public sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 135 + + + src/app/pages/token/pages/new/summary/summary.component.html + 214 + + Public sale + + + Purchase token + + src/app/components/token/components/token-purchase/token-purchase.component.html + 3 + + Purchase token + + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 113 + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + + Enter how much you want to spend. Amount of tokens will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 116 + + Enter how much you want to spend. Amount of tokens will be calculated. + + + Purchased tokens + + src/app/components/token/components/token-purchase/token-purchase.component.html + 243,244 + + Purchased tokens + + + Price + + src/app/components/token/components/token-purchase/token-purchase.component.html + 260,261 + + Price + + + Cooldown period ends + + src/app/components/token/components/token-refund/token-refund.component.html + 23 + + Cooldown period ends + + + Confirm and refund + + src/app/components/token/components/token-refund/token-refund.component.html + 82,83 + + Confirm and refund + + + Refund token + + src/app/components/token/components/token-refund/token-refund.component.ts + 61 + + Refund token + + + Initial Price + + src/app/components/token/components/token-row/token-row.component.html + 39 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 27 + + Initial Price + + + Avg. Price + + src/app/components/token/components/token-row/token-row.component.html + 47 + + Avg. Price + + + Change (24h) + + src/app/components/token/components/token-row/token-row.component.html + 107,108 + + Change (24h) + + + Volume 24h + + src/app/components/token/components/token-row/token-row.component.html + 150 + + Volume 24h + + + Market Cap + + src/app/components/token/components/token-row/token-row.component.html + 166 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 169 + + + src/app/pages/token/pages/trade/trade.page.html + 582 + + Market Cap + + + Claim + + src/app/components/token/components/token-row/token-row.component.html + 210,211 + + Claim + + + Refund + + src/app/components/token/components/token-row/token-row.component.html + 222,223 + + Refund + + + Launching soon + + src/app/components/token/components/token-row/token-row.component.html + 238,239 + + Launching soon + + + Buy / Sell + + src/app/components/token/components/token-row/token-row.component.html + 259,260 + + Buy / Sell + + + Stake your token + + src/app/components/token/components/token-stake/token-stake.component.html + 3 + + Stake your token + + + Select or define the amount you want to stake and the period for how long you want to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 13,15 + + Select or define the amount you want to stake and the period for how long you want to lock it. + + + Since you are a guardian you can also + + src/app/components/token/components/token-stake/token-stake.component.html + 17 + + Since you are a guardian you can also + + + - Choose an amount and for how long you’d like to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 50 + + - Choose an amount and for how long you’d like to lock it. + + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + src/app/components/token/components/token-stake/token-stake.component.html + 52,54 + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + + - You will get staked points based on your input. + + src/app/components/token/components/token-stake/token-stake.component.html + 56,57 + + - You will get staked points based on your input. + + + See Staking reward page for more info + + src/app/components/token/components/token-stake/token-stake.component.html + 62 + + See Staking reward page for more info + + + here. + + src/app/components/token/components/token-stake/token-stake.component.html + 63 + + here. + + + How it works + + src/app/components/token/components/token-stake/token-stake.component.html + 71 + + How it works + + + How much you want to stake? + + src/app/components/token/components/token-stake/token-stake.component.html + 87,88 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 21,22 + + How much you want to stake? + + + Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 192 + + Rewards Multiplier + + + Staking Value + + src/app/components/token/components/token-stake/token-stake.component.html + 210,219 + + Staking Value + + + Staked amount * Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 216 + + + src/app/pages/member/pages/activity/activity.page.html + 36 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 107 + + Staked amount * Rewards Multiplier + + + You will earn + + src/app/components/token/components/token-stake/token-stake.component.html + 230 + + You will earn + + + Stake complete. Congratulations. + + src/app/components/token/components/token-stake/token-stake.component.html + 366 + + Stake complete. Congratulations. + + + Token stake submitted. + + src/app/components/token/components/token-stake/token-stake.component.ts + 410 + + Token stake submitted. + + + Trade details + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 3 + + Trade details + + + Traded amount + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 29,30 + + Traded amount + + + Price per token + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 48,49 + + + src/app/pages/token/pages/new/summary/summary.component.html + 69,70 + + Price per token + + + Date and Time + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 79,80 + + Date and Time + + + Fullfilled + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 94,95 + + Fullfilled + + + Date + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 109 + + + src/app/pages/member/pages/transactions/transactions.page.html + 22 + + + src/app/pages/nft/pages/nft/nft.page.html + 383 + + + src/app/pages/nft/pages/nft/nft.page.html + 433 + + + src/app/pages/proposal/pages/votes/votes.page.html + 15 + + + src/app/pages/token/pages/trade/trade.page.html + 198 + + + src/app/pages/token/pages/trade/trade.page.html + 272 + + + src/app/pages/token/pages/trade/trade.page.html + 360 + + تاريخ + + + State + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 111 + + State + + + Storage deposit fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 144 + + Storage deposit fee + + + Fullfilment + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 171 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 252 + + Fullfilment + + + Seller + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 176 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 247 + + Seller + + + Transaction + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 204 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 280 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 314 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 358 + + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 41 + + + src/app/pages/member/pages/transactions/transactions.page.html + 74 + + Transaction + + + Non Transferable + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 153 + + + src/app/pages/member/pages/transactions/transactions.page.html + 77 + + Non Transferable + + + Processing... + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 155 + + + src/app/pages/member/pages/transactions/transactions.page.html + 87 + + Processing... + + + Soonaverse Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 170 + + Soonaverse Fee + + + Exchange Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 172 + + Exchange Fee + + + 24h change/Price + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 46 + + 24h change/Price + + + Markets + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 6 + + + src/app/pages/token/pages/trade/trade.page.html + 1242 + + Markets + + + No Tokens + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 38,39 + + + src/app/pages/tokens/pages/favourites/favourites.page.html + 25,26 + + No Tokens + + + Cast Vote + + src/app/components/token/components/token-vote/token-vote.component.html + 3 + + Cast Vote + + + Question + + src/app/components/token/components/token-vote/token-vote.component.html + 16,17 + + Question + + + Selected option + + src/app/components/token/components/token-vote/token-vote.component.html + 23,24 + + Selected option + + + How do you set your votes? + + src/app/components/token/components/token-vote/token-vote.component.html + 33,34 + + How do you set your votes? + + + Total native tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 88,89 + + Total native tokens + + + Total staked tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 105,106 + + Total staked tokens + + + Voting is active on + + src/app/components/token/components/token-vote/token-vote.component.html + 119,120 + + Voting is active on + + + Your total voting weight + + src/app/components/token/components/token-vote/token-vote.component.html + 131,132 + + Your total voting weight + + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + src/app/components/token/components/token-vote/token-vote.component.html + 151,153 + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + + Cast Votes + + src/app/components/token/components/token-vote/token-vote.component.html + 193 + + Cast Votes + + + Send Native Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 124 + + Send Native Tokens + + + Use Staked Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 128 + + Use Staked Tokens + + + Vote received. + + src/app/components/token/components/token-vote/token-vote.component.ts + 191 + + Vote received. + + + Transaction confirmed and funds refunded. + + src/app/components/token/components/token-vote/token-vote.component.ts + 217 + + Transaction confirmed and funds refunded. + + + Token vote executed. + + src/app/components/token/components/token-vote/token-vote.component.ts + 375 + + Token vote executed. + + + Token vote order created. + + src/app/components/token/components/token-vote/token-vote.component.ts + 392 + + Token vote order created. + + + Type + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 13,14 + + Type + + + Date + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 22,23 + + Date + + + Manage addresses + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 3 + + Manage addresses + + + Address + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 21 + + Address + + + Not yet verified + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 59 + + Not yet verified + + + Change + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 66 + + Change + + + Verify + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 67 + + Verify + + + You will be asked to send funds to the new + + src/app/components/wallet-address/verify-address/verify-address.component.html + 33 + + You will be asked to send funds to the new + + + address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/verify-address/verify-address.component.html + 36,37 + + address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/verify-address/verify-address.component.html + 41 + + فضاء + + + profile + + src/app/components/wallet-address/verify-address/verify-address.component.html + 43 + + الملف الشخصي + + + for future transactions. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 44 + + بشأن المعاملات المقبلة. + + + Generate new address + + src/app/components/wallet-address/verify-address/verify-address.component.html + 55,56 + + إنشاء عنوان جديد + + + Send a small + + src/app/components/wallet-address/verify-address/verify-address.component.html + 66 + + ارسال مبلغ + + + amount to validate your address. This expires in + + src/app/components/wallet-address/verify-address/verify-address.component.html + 67 + + صغير للتحقق من صحة العنوان الخاص بك. ينقضي هذا في + + + Expired. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 70 + + انقضت مدة الصلاحية. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/verify-address/verify-address.component.html + 106,107 + + انتظر للتحقق من صحة المعاملة. سنقوم بإعادة مبلغ معاملتك فورا بعدها + + + Validating address... + + src/app/components/wallet-address/verify-address/verify-address.component.html + 136 + + Validating address... + + + Now you can deal with NFTs and participate in token trading. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 174 + + Now you can deal with NFTs and participate in token trading. + + + Your new address has been verified! + + src/app/components/wallet-address/verify-address/verify-address.component.html + 176 + + Your new address has been verified! + + + Finish Verification + + src/app/components/wallet-address/verify-address/verify-address.component.html + 181,182 + + إنهاء التحقق + + + Generate address + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 76 + + إنشاء العنوان + + + Refunding your payment... + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 192 + + Refunding your payment... + + + Address is not verified + + src/app/components/wallet-address/wallet-address.component.html + 4 + + Address is not verified + + + wallet + + src/app/components/wallet-address/wallet-address.component.html + 25 + + wallet + + + Copy address + + src/app/components/wallet-address/wallet-address.component.html + 30 + + Copy address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + تحقق من + + + address + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + عنوانك + + + This network is currently not enabled. + + src/app/components/wallet-address/wallet-address.component.ts + 82 + + This network is currently not enabled. + + + Award Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Award Info + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 20 + + مالك + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 13 + + الشارات المستخدمة / المتوفرة + + + Badge lock period (months) + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 15 + + Badge lock period (months) + + + Award info + + src/app/pages/award/pages/award/award.page.html + 3 + + + src/app/pages/award/pages/new/new.page.html + 17 + + معلومات على الجوائز + + + Minted on: + + src/app/pages/award/pages/award/award.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 47 + + Minted on: + + + Fund Award + + src/app/pages/award/pages/award/award.page.html + 121,122 + + Fund Award + + + Minting in Progress + + src/app/pages/award/pages/award/award.page.html + 129,130 + + Minting in Progress + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 136 + + + src/app/pages/award/pages/award/award.page.html + 210 + + تحقق من الجائزة + + + Reject Award + + src/app/pages/award/pages/award/award.page.html + 157 + + Reject Award + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 166 + + قم بتأكيد مشاركتك + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 174,176 + + يتم الآن التعامل مع كل الاتصالات خارج المنصة، اسمح لمنشئ الجائزة بمعرفة كيفية الاتصال بك. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 180 + + قدم وصفاً أو رابط لعملك. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 188 + + Submit + + + Cancel + + src/app/pages/award/pages/award/award.page.html + 189 + + + src/app/pages/token/pages/trade/trade.page.html + 245 + + + src/app/pages/token/pages/trade/trade.page.html + 333 + + Cancel + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 35 + + + src/app/pages/token/pages/new/new.page.ts + 34 + + + src/app/pages/token/pages/token/token.page.ts + 36 + + نظرة عامة + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 99 + + المشاركون + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2 + + جائزة جديدة + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14 + + + src/app/pages/award/pages/new/new.page.html + 77 + + + src/app/pages/proposal/pages/new/new.page.html + 24 + + العنوان مطلوب. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19 + + سيدرج العنوان والوصف في الجائزة، يحدد تاريخ النهاية مدة توفر الجائزة. + + + Title + + src/app/pages/award/pages/new/new.page.html + 23 + + + src/app/pages/award/pages/new/new.page.html + 29,28 + + + src/app/pages/award/pages/new/new.page.html + 76 + + + src/app/pages/award/pages/new/new.page.html + 83,82 + + + src/app/pages/proposal/pages/new/new.page.html + 23 + + + src/app/pages/proposal/pages/new/new.page.html + 29,28 + + + src/app/pages/proposal/pages/new/new.page.html + 103 + + + src/app/pages/proposal/pages/new/new.page.html + 109,108 + + + src/app/pages/proposal/pages/new/new.page.html + 156 + + + src/app/pages/proposal/pages/new/new.page.html + 162,161 + + + src/app/pages/space/pages/upsert/upsert.page.html + 24 + + + src/app/pages/space/pages/upsert/upsert.page.html + 30,29 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 106 + + + src/app/pages/token/pages/new/overview/overview.component.html + 22 + + + src/app/pages/token/pages/new/overview/overview.component.html + 29,28 + + + src/app/pages/token/pages/new/overview/overview.component.html + 65 + + + src/app/pages/token/pages/new/overview/overview.component.html + 72,71 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 9 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 16,15 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 55 + + العنوان + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 24 + + يجب إدخال اسم. + + + End + + src/app/pages/award/pages/new/new.page.html + 36 + + + src/app/pages/award/pages/new/new.page.html + 47,46 + + + src/app/pages/proposal/pages/new/new.page.html + 56 + + + src/app/pages/proposal/pages/new/new.page.html + 68,67 + + النهاية + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 37 + + + src/app/pages/proposal/pages/new/new.page.html + 57 + + تاريخ النهاية مطلوب. + + + Description + + src/app/pages/award/pages/new/new.page.html + 52 + + + src/app/pages/award/pages/new/new.page.html + 58 + + + src/app/pages/award/pages/new/new.page.html + 91 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 40 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 45 + + + src/app/pages/nft/pages/new/single/single.page.html + 33 + + + src/app/pages/nft/pages/new/single/single.page.html + 38 + + + src/app/pages/proposal/pages/new/new.page.html + 76 + + + src/app/pages/proposal/pages/new/new.page.html + 82 + + + src/app/pages/proposal/pages/new/new.page.html + 119 + + + src/app/pages/proposal/pages/new/new.page.html + 124 + + + src/app/pages/proposal/pages/new/new.page.html + 171 + + + src/app/pages/proposal/pages/new/new.page.html + 176 + + + src/app/pages/space/pages/upsert/upsert.page.html + 36 + + + src/app/pages/space/pages/upsert/upsert.page.html + 41 + + + src/app/pages/token/pages/new/overview/overview.component.html + 37 + + + src/app/pages/token/pages/new/overview/overview.component.html + 43 + + + src/app/pages/token/pages/new/overview/overview.component.html + 80 + + + src/app/pages/token/pages/new/overview/overview.component.html + 86 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 21 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 67 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 21 + + الوصف + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 69 + + تعريف الشارة + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 71 + + سيتم إدراج العنوان والوصف في الشارة. + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 97 + + وصف الشارة + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 115 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 370 + + + src/app/pages/proposal/pages/new/new.page.html + 205 + + معلومات الفضاء + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 117 + + هذا هو الفضاء الذي سيدرج الجائزة. + + + Reward info + + src/app/pages/award/pages/new/new.page.html + 170 + + Reward info + + + You need to fund this award with native token. Select which token will be used as reward. + + src/app/pages/award/pages/new/new.page.html + 172 + + You need to fund this award with native token. Select which token will be used as reward. + + + Token is required. + + src/app/pages/award/pages/new/new.page.html + 176 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 247 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 325 + + Token is required. + + + Select a token + + src/app/pages/award/pages/new/new.page.html + 207 + + Select a token + + + Defines the amount of tokens for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 222,223 + + Defines the amount of tokens for each badge and the number of badges available. + + + Invalid token amount per badge + + src/app/pages/award/pages/new/new.page.html + 226 + + Invalid token amount per badge + + + Tokens per badge + + src/app/pages/award/pages/new/new.page.html + 234 + + Tokens per badge + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 251 + + + src/app/pages/award/pages/new/new.page.html + 338 + + الحد الأدنى 1 والحد الأقصى 10000. + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 273 + + كمية الشارات التي تريد توفيرها لهذه الجائزة. يمكن اعتبار هذا كعدد الجوائز التي تريد منحها. + + + Total to be funded + + src/app/pages/award/pages/new/new.page.html + 284,285 + + Total to be funded + + + Upload image that will be used as a Reward Badge. + + src/app/pages/award/pages/new/new.page.html + 299 + + Upload image that will be used as a Reward Badge. + + + Badge is required. + + src/app/pages/award/pages/new/new.page.html + 328,329 + + Badge is required. + + + Set the duration for which the badge will be locked in the Firefly wallet. + + src/app/pages/award/pages/new/new.page.html + 334,335 + + Set the duration for which the badge will be locked in the Firefly wallet. + + + Create award + + src/app/pages/award/pages/new/new.page.html + 369,370 + + إنشاء جائزة + + + Award - New + + src/app/pages/award/pages/new/new.page.ts + 119 + + + src/app/pages/award/pages/new/new.page.ts + 134 + + Award - New + + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/award/pages/new/new.page.ts + 120 + + + src/app/pages/award/pages/new/new.page.ts + 135 + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + + Member seems to log out during the file upload request. + + src/app/pages/award/pages/new/new.page.ts + 184 + + + src/app/pages/collection/pages/upsert/upsert.page.ts + 361 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 240 + + + src/app/pages/nft/pages/new/single/single.page.ts + 180 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 131 + + + src/app/pages/token/services/new.service.ts + 204 + + يبدو أن العضو خرج من الموقع أثناء تحميل الملف. + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2 + + وصف الجائزة + + + Award - + + src/app/pages/award/pages/overview/overview.page.ts + 17 + + + src/app/pages/award/pages/participants/participants.page.ts + 83 + + Award - + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 49 + + + src/app/pages/award/pages/participants/participants.page.html + 63 + + + src/app/pages/proposal/pages/participants/participants.page.html + 49 + + + src/app/pages/proposal/pages/participants/participants.page.html + 63 + + البحث عن مشارك + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 72 + + + src/app/pages/proposal/pages/participants/participants.page.html + 72 + + + src/app/pages/space/pages/members/members.page.html + 92 + + عرض عدد قليل فقط من أعلى السجلات... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 90,91 + + + src/app/pages/proposal/pages/participants/participants.page.html + 90,91 + + لا يوجد مشاركين + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 118,119 + + جائزة + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 138,139 + + جائزة أخرى + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 50 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 158 + + + src/app/pages/space/pages/awards/awards.page.ts + 30 + + + src/app/pages/space/pages/collections/collections.page.ts + 30 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 30 + + قيد الانتظار + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 51 + + تم اصداره + + + See all participants within the award. + + src/app/pages/award/pages/participants/participants.page.ts + 84 + + + src/app/pages/proposal/pages/overview/overview.page.ts + 60 + + See all participants within the award. + + + applied on + + src/app/pages/award/pages/participants/participants.page.ts + 257 + + applied on + + + Make NFT’s from this collection available on decentralised network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 12,13 + + Make NFT’s from this collection available on decentralised network. + + + Minting + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 29 + + Minting + + + NFTs left + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 32 + + NFTs left + + + Collection is not yet migrated to the decentralized network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 47,48 + + Collection is not yet migrated to the decentralized network. + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 611 + + من يمكنه الشراء؟ + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 63,64 + + بيع علني + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 76,77 + + أعضاء الفضاء فقط + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89,90 + + حراس الفضاء فقط + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 102,103 + + أعضاء الفضاء مع شارة فقط + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 118,119 + + يجب أن يملك على الأقل NFT واحد من كل مجموعة مختارة + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 126,127 + + (NFT واحد لكل عضو) + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 175 + + تخفيضات للأعضاء + + + discount for members with rewards from this space in total value of + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 190 + + discount for members with rewards from this space in total value of + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 5 + + معلومات حول مجموعة + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 22,23 + + إصدار محدود + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 81,82 + + + src/app/pages/collection/pages/collection/collection.page.html + 309,310 + + نشر المجموعة + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 93,94 + + + src/app/pages/collection/pages/collection/collection.page.html + 321,322 + + تعديل المجموعة + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + تذهب الإتاوات إلى + + + Rank + + src/app/pages/collection/pages/collection/collection.page.html + 166,167 + + + src/app/pages/token/pages/token/token.page.html + 69,70 + + Rank + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 185 + + يبدأ في + + + Deposited + + src/app/pages/collection/pages/collection/collection.page.html + 196 + + Deposited + + + Staked + + src/app/pages/collection/pages/collection/collection.page.html + 214 + + Staked + + + Links + + src/app/pages/collection/pages/collection/collection.page.html + 223 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 154,153 + + + src/app/pages/token/pages/new/overview/overview.component.html + 160,159 + + + src/app/pages/token/pages/new/summary/summary.component.html + 307,306 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 79 + + روابط + + + Sale in progress + + src/app/pages/collection/pages/collection/collection.page.html + 269 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 64 + + جار البيع + + + remaining + + src/app/pages/collection/pages/collection/collection.page.html + 271 + + + src/app/pages/nft/pages/nft/nft.page.html + 155 + + متبقية + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 338 + + + src/app/pages/collection/pages/collection/collection.page.html + 384 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 354 + + + src/app/pages/collection/pages/collection/collection.page.html + 400 + + Cancel Collection + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 421 + + + src/app/pages/nft/pages/new/new.page.html + 2 + + إنشاء NFT + + + Rank amount must be between + + src/app/pages/collection/pages/collection/collection.page.ts + 277 + + + src/app/pages/token/pages/token/token.page.ts + 195 + + Rank amount must be between + + + records + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 13 + + + src/app/pages/discover/pages/awards/awards.page.html + 13 + + + src/app/pages/discover/pages/members/members.page.html + 13 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 13 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 13 + + + src/app/pages/market/pages/collections/collections.page.html + 13 + + + src/app/pages/member/pages/nfts/nfts.page.html + 13 + + records + + + Filters&Sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 30 + + + src/app/pages/discover/pages/awards/awards.page.html + 30 + + + src/app/pages/discover/pages/members/members.page.html + 30 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 30 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 30 + + + src/app/pages/market/pages/collections/collections.page.html + 30 + + Filters&Sort + + + Filters&sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 71 + + + src/app/pages/discover/pages/awards/awards.page.html + 78 + + + src/app/pages/discover/pages/members/members.page.html + 78 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 78 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 79 + + + src/app/pages/market/pages/collections/collections.page.html + 79 + + Filters&sort + + + Sort by + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 93,92 + + + src/app/pages/discover/pages/awards/awards.page.html + 94,93 + + + src/app/pages/discover/pages/members/members.page.html + 94,93 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 94,93 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 95,94 + + + src/app/pages/market/pages/collections/collections.page.html + 95,94 + + ترتيب حسب + + + Price range + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 131 + + Price range + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2 + + إنشاء مجموعة جديدة + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3 + + تعديل المجموعة + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18 + + معلومات المجموعة + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20 + + سيدرج الاسم والوصف في المجموعة. + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 58 + + + src/app/pages/nft/pages/new/single/single.page.html + 51 + + بيانات المبيعات + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 60 + + تظهر جميع الأوقات في المنطقة الزمنية للمستخدم. بالنسبة ل NFT و SFT التي تم إنشاؤها يتم تعيين السعر هنا ولا يمكن تغييره على NFT. سعر مجموعة NFT الكلاسيكية هو فقط مؤشر ويمكن تغييره على NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 90 + + إتاوة + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 93,95 + + وستطبق هذه النسبة المئوية من الإتاوات على الإصدار الأول للNFT وجميع المبيعات الثانوية. ويجب أن يكون عنوان IOTA الذي سيحصل على الإتاوات رصيد 1Mi على الأقل بسبب آلية الحماية من الغبار عليها في بروتوكول IOTA. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 106 + + الإتاوات - النسبة المئوية + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 116 + + على سبيل المثال: 10 ٪ ، 20 ٪ ، إلخ.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 124 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 131 + + الإتاوات تذهب إلى فضاء مختلف + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 155 + + سيتم تضمين الروابط في تفاصيل NFT. استخدم أسماء الحساب لتويتر و ديسكورد (name#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 160 + + الرابط غير صالح. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 167,166 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 312,311 + + + src/app/pages/token/pages/new/overview/overview.component.html + 175,174 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 91,90 + + الرابط + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 183 + + ربط حساب تويتر الخاص بك + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + اسم مستخدم ديسكورد غير صالح. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 200 + + رابط إلى حساب ديسكورد الخاص بك + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 215 + + تخفيضات + + + The discount applies only to members who have earned tokens from awards issued by this space. + + src/app/pages/collection/pages/upsert/upsert.page.html + 217 + + The discount applies only to members who have earned tokens from awards issued by this space. + + + Token amount higher than + + src/app/pages/collection/pages/upsert/upsert.page.html + 231 + + Token amount higher than + + + Select awarded token + + src/app/pages/collection/pages/upsert/upsert.page.html + 257 + + Select awarded token + + + Discount % + + src/app/pages/collection/pages/upsert/upsert.page.html + 271 + + Discount % + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 299 + + تخفيض + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 310 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 331,332 + + قيمة التخفيض + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 357 + + إضافة مستوى الخصم + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 372 + + هذا هو الفضاء الذي سيقوم بإصدار مجموعة NFT. لن تظهر في القائمة المنسدلة إلا الأفضية التي تم التحقق من محفظتها. الرجاء التأكد من اختيار الفضاء الصحيح لأن جميع الأموال من بيع NFT ستذهب إلى محفظة المساحة التي تم التحقق منها. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 390 + + نوع المجموعة + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 392 + + كل نوع له خصائص مختلفة. لا يمكن تغيير هذا بعد الإنشاء. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 424,423 + + + src/app/pages/space/pages/upsert/upsert.page.html + 200 + + لافتة + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 454,455 + + لافتة مطلوبة. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 464 + + لا يوجد شيء هنا + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 494,495 + + يجب وضع شيء هنا. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 504 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 517 + + + src/app/pages/market/pages/collections/collections.page.html + 177 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138 + + الفئة + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 506 + + يتم استخدام الفئة عند تصفية المحتوى. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 510 + + الفئة. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 535 + + إعداد المجموعة + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 537 + + من يمكنه شراء عناصر هذه المجموعة. + + + Open Sale + + src/app/pages/collection/pages/upsert/upsert.page.html + 546 + + البيع مفتوح + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 552 + + يمكن للجميع شراء عناصر هذه المجموعة. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 564 + + الدخول حصري لحراس الفضاء. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 577 + + الدخول حصري لأعضاء الفضاء. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 590 + + الدخول حصري لأعضاء الفضاء الذين لديهم شارة. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 608 + + خيارات المجموعة + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 626 + + One NFT per Member Only + + + Select collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 651 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 147 + + + src/app/pages/nft/pages/new/single/single.page.html + 361 + + حدد المجموعة + + + Select award + + src/app/pages/collection/pages/upsert/upsert.page.html + 670 + + Select award + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 692,693 + + إنشاء مجموعة + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 705,706 + + حفظ المجموعة + + + Check out collection + + src/app/pages/collection/services/helper.service.ts + 68 + + اطلع على المجموعة + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 5 + + طلبات العضوية المعلقة + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 16 + + الأفضية الخاصة بك + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 32,33 + + لا توجد أفضية + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 41,42 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 56 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 68 + + Active proposals + + + Spaces + + src/app/pages/discover/pages/awards/awards.page.html + 115,114 + + + src/app/pages/discover/pages/discover/discover.page.ts + 9 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 115,114 + + + src/app/pages/market/pages/collections/collections.page.html + 146,145 + + + src/app/pages/member/pages/member/member.page.ts + 65 + + أفضية + + + Discover - Awards + + src/app/pages/discover/pages/awards/awards.page.ts + 58 + + Discover - Awards + + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/discover/pages/awards/awards.page.ts + 59 + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + + Awards + + src/app/pages/discover/pages/discover/discover.page.ts + 10 + + + src/app/pages/member/pages/member/member.page.ts + 64 + + + src/app/pages/space/pages/space/space.page.ts + 47 + + جوائز + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 11 + + + src/app/pages/space/pages/space/space.page.ts + 46 + + اقتراحات + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 12 + + + src/app/pages/space/pages/space/space.page.ts + 48 + + اعضاء + + + Discover - Members + + src/app/pages/discover/pages/members/members.page.ts + 51 + + Discover - Members + + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + src/app/pages/discover/pages/members/members.page.ts + 52 + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + + Discover - Proposals + + src/app/pages/discover/pages/proposals/proposals.page.ts + 57 + + Discover - Proposals + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + src/app/pages/discover/pages/proposals/proposals.page.ts + 58 + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + + Discover - Spaces + + src/app/pages/discover/pages/spaces/spaces.page.ts + 54 + + Discover - Spaces + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/discover/pages/spaces/spaces.page.ts + 55 + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + + Sale type + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Sale type + + + Collections - NFT + + src/app/pages/market/pages/collections/collections.page.ts + 68 + + Collections - NFT + + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + src/app/pages/market/pages/collections/collections.page.ts + 69 + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + + NFT Collections + + src/app/pages/market/pages/market/market.page.html + 2 + + NFT Collections + + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/market/pages/market/market.page.html + 11,13 + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + + I understand + + src/app/pages/market/pages/market/market.page.html + 22,23 + + + src/app/pages/member/pages/tokens/tokens.page.html + 43,44 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 22,23 + + I understand + + + Collections + + src/app/pages/market/pages/market/market.page.ts + 13 + + + src/app/pages/market/pages/market/market.page.ts + 34 + + + src/app/pages/space/pages/space/space.page.ts + 45 + + مجموعات + + + Total staked + + src/app/pages/member/pages/activity/activity.page.html + 17,18 + + Total staked + + + Staking Value: + + src/app/pages/member/pages/activity/activity.page.html + 29,39 + + Staking Value: + + + Claimable Reward + + src/app/pages/member/pages/activity/activity.page.html + 47,48 + + Claimable Reward + + + Stake more + + src/app/pages/member/pages/activity/activity.page.html + 104,105 + + Stake more + + + Stake + + src/app/pages/member/pages/activity/activity.page.html + 107,108 + + Stake + + + My Staking + + src/app/pages/member/pages/activity/activity.page.html + 133 + + My Staking + + + until + + src/app/pages/member/pages/activity/activity.page.html + 138 + + until + + + My Favourites + + src/app/pages/member/pages/activity/activity.page.html + 152 + + My Favourites + + + View All + + src/app/pages/member/pages/activity/activity.page.html + 155 + + View All + + + Profile Options + + src/app/pages/member/pages/activity/activity.page.html + 172 + + Profile Options + + + Edit Profile + + src/app/pages/member/pages/activity/activity.page.html + 185 + + Edit Profile + + + Manage Addresses + + src/app/pages/member/pages/activity/activity.page.html + 191 + + + src/app/pages/space/pages/manage/manage.page.html + 27 + + Manage Addresses + + + Export All Transactions + + src/app/pages/member/pages/activity/activity.page.html + 202 + + Export All Transactions + + + Request Verification + + src/app/pages/member/pages/activity/activity.page.html + 227 + + + src/app/pages/space/pages/manage/manage.page.html + 85 + + Request Verification + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + قيد الانتظار + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 18,19 + + تم اصداره + + + No Awards + + src/app/pages/member/pages/awards/awards.page.html + 34,35 + + + src/app/pages/space/pages/awards/awards.page.html + 63,64 + + لا توجد جوائز + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 44,45 + + Discover Awards + + + Reputation + + src/app/pages/member/pages/badges/badges.page.html + 2 + + + src/app/pages/member/pages/member/member.page.ts + 63 + + السمعة + + + Spaces + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Spaces + + + Awards + + src/app/pages/member/pages/badges/badges.page.html + 27,28 + + Awards + + + Total Rewards + + src/app/pages/member/pages/badges/badges.page.html + 33,34 + + Total Rewards + + + My profile + + src/app/pages/member/pages/member/member.page.html + 13 + + ملفي الشخصي + + + Profile + + src/app/pages/member/pages/member/member.page.html + 15 + + الملف الشخصي + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 27,28 + + Profile info + + + Joined + + src/app/pages/member/pages/member/member.page.html + 49 + + انضم + + + Member - + + src/app/pages/member/pages/member/member.page.ts + 83 + + Member - + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 145 + + النشاط + + + Transactions + + src/app/pages/member/pages/member/member.page.ts + 147 + + + src/app/pages/member/pages/transactions/transactions.page.html + 18 + + Transactions + + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + src/app/pages/member/pages/nfts/nfts.page.html + 25,26 + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + + Deposit NFT + + src/app/pages/member/pages/nfts/nfts.page.html + 29,30 + + Deposit NFT + + + No NFTs + + src/app/pages/member/pages/nfts/nfts.page.html + 59,60 + + + src/app/pages/nft/pages/nft/nft.page.html + 744,745 + + لا يوجد NFTs + + + Tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 11,12 + + Tokens + + + Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 20,21 + + Staking + + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + src/app/pages/member/pages/tokens/tokens.page.html + 32,34 + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + + Item + + src/app/pages/member/pages/tokens/tokens.page.html + 57 + + + src/app/pages/member/pages/tokens/tokens.page.html + 324 + + + src/app/pages/member/pages/transactions/transactions.page.html + 23 + + Item + + + Total + + src/app/pages/member/pages/tokens/tokens.page.html + 59 + + + src/app/pages/token/pages/trade/trade.page.html + 204 + + + src/app/pages/token/pages/trade/trade.page.html + 278 + + + src/app/pages/token/pages/trade/trade.page.html + 367 + + + src/app/pages/token/pages/trade/trade.page.html + 668 + + Total + + + Owned + + src/app/pages/member/pages/tokens/tokens.page.html + 87 + + + src/app/pages/member/pages/tokens/tokens.page.html + 170 + + + src/app/pages/nft/pages/nft/nft.page.html + 17 + + مملوك + + + Airdropped + + src/app/pages/member/pages/tokens/tokens.page.html + 118 + + + src/app/pages/member/pages/tokens/tokens.page.html + 172 + + Airdropped + + + from + + src/app/pages/member/pages/tokens/tokens.page.html + 120 + + from + + + Deposit for purchase + + src/app/pages/member/pages/tokens/tokens.page.html + 215 + + Deposit for purchase + + + No tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 258,259 + + No tokens + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 297 + + Active Staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 300 + + Expired Staking + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 307,308 + + Active Staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 310,311 + + Expired Staking + + + Staked From + + src/app/pages/member/pages/tokens/tokens.page.html + 326 + + Staked From + + + Staked Until + + src/app/pages/member/pages/tokens/tokens.page.html + 327 + + Staked Until + + + Multiplier + + src/app/pages/member/pages/tokens/tokens.page.html + 329 + + Multiplier + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 330 + + Staked Value + + + Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 380 + + Stakes + + + No Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 403,404 + + No Stakes + + + Staked from - to + + src/app/pages/member/pages/tokens/tokens.page.html + 432,433 + + Staked from - to + + + Amount (Multiplier) + + src/app/pages/member/pages/tokens/tokens.page.html + 445,446 + + Amount (Multiplier) + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 457,458 + + Staked Value + + + Claim + + src/app/pages/member/pages/tokens/tokens.page.ts + 57 + + Claim + + + Refund + + src/app/pages/member/pages/tokens/tokens.page.ts + 58 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 19 + + Refund + + + Export CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 9 + + Export CSV + + + Exporting CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 13 + + Exporting CSV + + + No transactions + + src/app/pages/member/pages/transactions/transactions.page.html + 120,121 + + No transactions + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 40 + + لم يتم تحميل بعض الملفات + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 51,52 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + تحميل CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 67 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 73 + + اسم الملف + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 101 + + خطأ + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 160 + + تحميل CSV موجود + + + Upload back once you generate below + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 162 + + Upload back once you generate below + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 193,194 + + يجب عليك تحميل الصور أولاً. + + + Generate CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 211 + + Generate CSV + + + Publish NFTs + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 212 + + Publish NFTs + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 224,225 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + واحد + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + متعدد + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14 + + معلومات NFT + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16 + + سيتم إدراج العنوان والوصف في الNFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 22 + + الاسم مطلوب. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 34 + + + src/app/pages/proposal/pages/new/new.page.html + 77 + + الوصف مطلوب. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 53 + + تظهر جميع الأوقات في المنطقة الزمنية للمستخدم. من أجلNFT و SFT يتم تعيين السعر لكل مجموعة ولا يمكن تغييره هنا. + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 92 + + تظهر الخصائص تحت العنصر الخاص بك. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 102 + + اسم الخاصية (مثلاً الشخصية) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 103 + + القيمة (مثلا. سونانوت) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 115 + + + src/app/pages/nft/pages/new/single/single.page.html + 151 + + + src/app/pages/nft/pages/new/single/single.page.html + 158 + + اسم الخاصية + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 126,125 + + + src/app/pages/nft/pages/new/single/single.page.html + 163 + + + src/app/pages/nft/pages/new/single/single.page.html + 171,170 + + + src/app/pages/nft/pages/new/single/single.page.html + 228,227 + + + src/app/pages/nft/pages/new/single/single.page.html + 266 + + + src/app/pages/nft/pages/new/single/single.page.html + 272,271 + + قيمة + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 142 + + خاصية + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 185 + + إضافة خاصية + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 194 + + الخصائص تظهر تحت العنصر الخاص بك. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + اسم الخصائص (مثلا. قدرة التحمل) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 205 + + القيمة (مثلاً 10، 1/10، إلخ) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 217 + + + src/app/pages/nft/pages/new/single/single.page.html + 254 + + + src/app/pages/nft/pages/new/single/single.page.html + 261 + + اسم الخاصية + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 245 + + خاصية + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287 + + إضافة خاصية + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 303 + + تحميل صورة لـ NFT. أنواع الملفات المقبولة: PNG, JPEG, WEBP, MP4. الحجم الأقصى: 100 ميغابايت. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 333 + + المحتوى الإعلامي مطلوب + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 348 + + حدد واحدة من المجموعات الخاصة بك لعرض هذا ال NFT. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 383,384 + + إنشاء NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 393,394 + + معاينة NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 168 + + اسم الملف غير صالح + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 7 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 48 + + + src/app/pages/nft/pages/nft/nft.page.html + 516 + + تحقق من nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 109 + + اعلى عرض حالي + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 165 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 173 + + Sale hasn't started yet + + + NFT is pending other member's transaction + + src/app/pages/nft/pages/nft/nft.page.html + 181 + + NFT is pending other member's transaction + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 190 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 198 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 213 + + بيع NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 218 + + تغيير السعر الثابت + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 223 + + تغيير المزاد + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 240,241 + + اقتراح عرض + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 263,264 + + اشتري الآن + + + Bidding + + src/app/pages/nft/pages/nft/nft.page.html + 281 + + Bidding + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 290 + + العروض الحالية + + + Past bids + + src/app/pages/nft/pages/nft/nft.page.html + 298 + + Past bids + + + My biddings + + src/app/pages/nft/pages/nft/nft.page.html + 307 + + My biddings + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 321 + + عضو + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 322 + + عرض على + + + There are no current bids + + src/app/pages/nft/pages/nft/nft.page.html + 369,370 + + There are no current bids + + + There are no past bids + + src/app/pages/nft/pages/nft/nft.page.html + 419,420 + + There are no past bids + + + There are no records. + + src/app/pages/nft/pages/nft/nft.page.html + 469,470 + + There are no records. + + + Withdraw NFT + + src/app/pages/nft/pages/nft/nft.page.html + 509,510 + + Withdraw NFT + + + History + + src/app/pages/nft/pages/nft/nft.page.html + 522 + + History + + + Minting in Progress + + src/app/pages/nft/pages/nft/nft.page.html + 556 + + Minting in Progress + + + Available for specific Member Only + + src/app/pages/nft/pages/nft/nft.page.html + 619 + + Available for specific Member Only + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 647 + + عرض جميع تفاصيل المعاملة لهذا NFT على Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 685 + + معلومات حول مجموعة + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 694 + + إظهار + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 695 + + مجموعة + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 707,706 + + من طرف + + + Firefly does not support NFTs yet! + + src/app/pages/nft/pages/nft/nft.page.html + 799 + + Firefly does not support NFTs yet! + + + Are you sure you want to withdraw NFT from Soonaverse? + + src/app/pages/nft/pages/nft/nft.page.html + 802 + + Are you sure you want to withdraw NFT from Soonaverse? + + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + src/app/pages/nft/pages/nft/nft.page.html + 804 + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + + Confirm with Metamask + + src/app/pages/nft/pages/nft/nft.page.html + 806 + + Confirm with Metamask + + + View + + src/app/pages/nft/pages/nft/nft.page.ts + 82 + + عرض + + + NFT Withdrawn. + + src/app/pages/nft/pages/nft/nft.page.ts + 686 + + NFT Withdrawn. + + + Oops, it's in another universe + + src/app/pages/nft/pages/not-found/not-found.page.html + 8 + + Oops, it's in another universe + + + NFT you are looking for no longer exists on Soonaverse. + + src/app/pages/nft/pages/not-found/not-found.page.html + 12,14 + + NFT you are looking for no longer exists on Soonaverse. + + + Back to Marketplace + + src/app/pages/nft/pages/not-found/not-found.page.html + 22,24 + + Back to Marketplace + + + Auction Starts + + src/app/pages/nft/services/helper.service.ts + 145 + + يبدأ المزاد + + + Auction Ends + + src/app/pages/nft/services/helper.service.ts + 148 + + ينتهي المزاد + + + Pool by + + src/app/pages/pool/pages/market/pool.page.html + 3,12 + + Pool by + + + What is Pool? + + src/app/pages/pool/pages/market/pool.page.html + 20,21 + + What is Pool? + + + See Pool on iotabee + + src/app/pages/pool/pages/market/pool.page.html + 37,39 + + See Pool on iotabee + + + What is iotabee? + + src/app/pages/pool/pages/market/pool.page.html + 49 + + + src/app/pages/swap/pages/market/swap.page.html + 49 + + What is iotabee? + + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + src/app/pages/pool/pages/market/pool.page.html + 51,54 + + + src/app/pages/swap/pages/market/swap.page.html + 51,54 + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + + iotabee.com + + src/app/pages/pool/pages/market/pool.page.html + 61,62 + + + src/app/pages/swap/pages/market/swap.page.html + 61,62 + + iotabee.com + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2 + + اقتراح جديد + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 3 + + معلومات الاقتراح + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19 + + سيدرج العنوان والوصف في الإقتراح، وتحدد تواريخ البدء والنهاية مدة الاقتراح. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 39 + + + src/app/pages/proposal/pages/new/new.page.html + 50,49 + + إبدأ + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 40 + + تاريخ البدء مطلوب. + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 93 + + معلومات عن السؤال + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 95 + + سيتم عرض العنوان والوصف فقط لهذا السؤال. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 104 + + عنوان السؤال مطلوب. + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 143 + + النص والوصف لكل إجابة. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 157 + + نص الجواب مطلوب. + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 192 + + إضافة خيار + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 207 + + وهذا هو الفضاء الذي سيقدم الاقتراح. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 259 + + إعداد الاقتراح + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 261 + + تحدد من يمكنه الإطلاع على الاقتراح وطريقة التصويت. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 269 + + تحديد المشاركين + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 276 + + جميع الحراس + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 283 + + يمكن للأوصياء فقط التصويت على هذا الاقتراح + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 289 + + جميع الأعضاء + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 296 + + يمكن لجميع الأعضاء التصويت على هذا الاقتراح + + + Space's Native Token + + src/app/pages/proposal/pages/new/new.page.html + 302 + + + src/app/pages/proposal/services/helper.service.ts + 23 + + Space's Native Token + + + You must have minted token linked to your space first! + + src/app/pages/proposal/pages/new/new.page.html + 313 + + You must have minted token linked to your space first! + + + All token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 321 + + All token holders can vote. + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 343,344 + + إنشاء إقتراح + + + Proposal - New + + src/app/pages/proposal/pages/new/new.page.ts + 136 + + + src/app/pages/proposal/pages/new/new.page.ts + 151 + + Proposal - New + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + src/app/pages/proposal/pages/new/new.page.ts + 137 + + + src/app/pages/proposal/pages/new/new.page.ts + 152 + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 321 + + إختيار + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 328 + + شارة + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 332 + + معرف + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 5 + + النتيجة النهائية + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 74 + + وصف الإقتراح + + + Proposal - + + src/app/pages/proposal/pages/overview/overview.page.ts + 59 + + Proposal - + + + Voted + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 21 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 49 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 156 + + صوت + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 32 + + صوّت الآن + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 43 + + بدأ التصويت + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 56 + + أنت لست معني بهذا التصويت + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 60 + + من أجل التصويت، يجب أن تكون عضو في الفضاء قبل إنشاء الاقتراح. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 69 + + تسجيل الدخول للتصويت + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 73 + + يجب عليك الدخول ليمكنك التصويت. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 84 + + في انتظار موافقة الحارس + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 88 + + لم يوافق أي حارس بعد على هذا الاقتراح. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 102 + + الوزن + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 48 + + في انتظار التصويت + + + Proposal - Participants + + src/app/pages/proposal/pages/participants/participants.page.ts + 83 + + Proposal - Participants + + + See all participants within the proposal + + src/app/pages/proposal/pages/participants/participants.page.ts + 84 + + See all participants within the proposal + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 151 + + انضم إلى Soonaverse في + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 12,13 + + موافقة + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 23,24 + + رفض + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 67 + + نوع التصويت على هذا الاقتراح. + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 75 + + الوزن الإجمالي في هذا الاقتراح لجميع المشاركين. + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 22 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 22 + + المعلم الحالي + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 23 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 23 + + تاريخ البداية + + + Voting Type + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 26 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 26 + + نوع التصويت + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 27 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 27 + + الوزن الإجمالي + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 79 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 148 + + تحقق من الاقتراح + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 87 + + النتائج الحالية + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 120 + + الشارات المحددة + + + Votes + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 36 + + Votes + + + Voter + + src/app/pages/proposal/pages/votes/votes.page.html + 14 + + مصوت + + + Option (Weight) + + src/app/pages/proposal/pages/votes/votes.page.html + 16 + + Option (Weight) + + + Expired On + + src/app/pages/proposal/pages/votes/votes.page.html + 18 + + Expired On + + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + src/app/pages/proposal/pages/votes/votes.page.html + 24 + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + + One Member One Vote + + src/app/pages/proposal/services/helper.service.ts + 25 + + One Member One Vote + + + XP Reputation - Space + + src/app/pages/proposal/services/helper.service.ts + 27 + + سمعة XP - الفضاء + + + XP Reputation - Selected Badges + + src/app/pages/proposal/services/helper.service.ts + 29 + + سمعة XP - الشارات المحددة + + + Staking + + src/app/pages/soon-staking/pages/staking/staking.page.html + 3,4 + + Staking + + + How much I earn? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 13 + + How much I earn? + + + How it works? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 135 + + How it works? + + + Stake your tokens to earn rewards and unlock new features. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 137,139 + + Stake your tokens to earn rewards and unlock new features. + + + Unique Perks for stakers + + src/app/pages/soon-staking/pages/staking/staking.page.html + 160 + + Unique Perks for stakers + + + Rewards + + src/app/pages/soon-staking/pages/staking/staking.page.html + 167,168 + + Rewards + + + Trading Bonuses + + src/app/pages/soon-staking/pages/staking/staking.page.html + 180 + + Trading Bonuses + + + Unique Features + + src/app/pages/soon-staking/pages/staking/staking.page.html + 193 + + Unique Features + + + Earn more er than you think + + src/app/pages/soon-staking/pages/staking/staking.page.html + 209 + + Earn more er than you think + + + The more you hold, the more rewards you get. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 214,215 + + The more you hold, the more rewards you get. + + + New + + src/app/pages/space/pages/awards/awards.page.html + 43 + + + src/app/pages/space/pages/collections/collections.page.html + 49 + + + src/app/pages/space/pages/proposals/proposals.page.html + 42 + + جديد + + + award + + src/app/pages/space/pages/awards/awards.page.html + 44 + + جائزة + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 31 + + + src/app/pages/space/pages/members/members.page.html + 45 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 31 + + نشط + + + Space - Awards + + src/app/pages/space/pages/awards/awards.page.ts + 54 + + Space - Awards + + + Space's awards + + src/app/pages/space/pages/awards/awards.page.ts + 55 + + Space's awards + + + No Collections + + src/app/pages/space/pages/collections/collections.page.html + 70,71 + + لا توجد مجموعات + + + Space - Collections + + src/app/pages/space/pages/collections/collections.page.ts + 65 + + Space - Collections + + + Space's collections + + src/app/pages/space/pages/collections/collections.page.ts + 66 + + Space's collections + + + Space Options + + src/app/pages/space/pages/manage/manage.page.html + 2 + + Space Options + + + Token Options + + src/app/pages/space/pages/manage/manage.page.html + 6 + + Token Options + + + Edit Space + + src/app/pages/space/pages/manage/manage.page.html + 21 + + Edit Space + + + Manage Guardians + + src/app/pages/space/pages/manage/manage.page.html + 38 + + Manage Guardians + + + Export Current Members + + src/app/pages/space/pages/manage/manage.page.html + 44 + + Export Current Members + + + Create New Award + + src/app/pages/space/pages/manage/manage.page.html + 57 + + Create New Award + + + Create New Proposal + + src/app/pages/space/pages/manage/manage.page.html + 68 + + Create New Proposal + + + Create New Collection + + src/app/pages/space/pages/manage/manage.page.html + 79 + + Create New Collection + + + Edit Token + + src/app/pages/space/pages/manage/manage.page.html + 105 + + Edit Token + + + Create Airdrop + + src/app/pages/space/pages/manage/manage.page.html + 127 + + Create Airdrop + + + Staking Reward Schedule + + src/app/pages/space/pages/manage/manage.page.html + 135 + + Staking Reward Schedule + + + Export Current Stakers + + src/app/pages/space/pages/manage/manage.page.html + 141 + + Export Current Stakers + + + Active + + src/app/pages/space/pages/members/members.page.html + 18,19 + + نشط + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 35,36 + + محظور + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 52 + + محظور + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 67 + + + src/app/pages/space/pages/members/members.page.html + 82 + + البحث عن عضو + + + No Members + + src/app/pages/space/pages/members/members.page.html + 110,111 + + لا يوجد أعضاء + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 118 + + انضم إلى الفضاء في + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 161,162 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 174,175 + + Make Guardian + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 184,185 + + Block Member + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 187,188 + + Accept Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 190,191 + + Unblock Member + + + Space - Members + + src/app/pages/space/pages/members/members.page.ts + 76 + + Space - Members + + + Space's members + + src/app/pages/space/pages/members/members.page.ts + 77 + + Space's members + + + Upcoming Sale + + src/app/pages/space/pages/overview/overview.page.html + 7 + + Upcoming Sale + + + Live Token Sale + + src/app/pages/space/pages/overview/overview.page.html + 9 + + Live Token Sale + + + Space - + + src/app/pages/space/pages/overview/overview.page.ts + 55 + + Space - + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 43 + + اقتراح + + + No Proposals + + src/app/pages/space/pages/proposals/proposals.page.html + 62,63 + + لا توجد اقتراحات + + + Space - Proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 54 + + Space - Proposals + + + Space's proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 55 + + Space's proposals + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 34 + + تحقق من الفضاء + + + pending + + src/app/pages/space/pages/space/space-about/space-about.component.html + 153 + + pending + + + Export members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 168 + + Export members + + + Exporting members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 172 + + Exporting members + + + Open to join instantly + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Open to join instantly + + + Requires approval to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 183 + + Requires approval to join + + + Requires + + src/app/pages/space/pages/space/space-about/space-about.component.html + 187 + + Requires + + + staked value to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 193 + + staked value to join + + + Related Links + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 92 + + Related Links + + + Claim ownership + + src/app/pages/space/pages/space/space-about/space-about.component.html + 259,260 + + Claim ownership + + + Space's Wallet Addresses + + src/app/pages/space/pages/space/space-about/space-about.component.html + 290 + + Space's Wallet Addresses + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 321 + + مغادرة الفضاء + + + About space + + src/app/pages/space/pages/space/space.page.html + 3 + + معلومات الفضاء + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 55,56 + + + src/app/pages/space/pages/space/space.page.html + 118,119 + + الانضمام إلى الفضاء + + + Pending Request + + src/app/pages/space/pages/space/space.page.html + 68 + + + src/app/pages/space/pages/space/space.page.html + 131 + + Pending Request + + + Ask to join Space + + src/app/pages/space/pages/space/space.page.html + 70 + + + src/app/pages/space/pages/space/space.page.html + 133 + + Ask to join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 82,83 + + + src/app/pages/space/pages/space/space.page.html + 160,161 + + تعديل الفضاء + + + Stake + + src/app/pages/space/pages/space/space.page.html + 144 + + Stake + + + to Join + + src/app/pages/space/pages/space/space.page.html + 147 + + to Join + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2 + + اضافة فضاء جديد + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3 + + تعديل الفضاء + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17 + + معلومات الفضاء + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19 + + سيدرج العنوان والوصف في الفضاء. + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 56 + + سيتم تضمين الروابط في تفاصيل الفضاء. استخدم أسماء الحساب Github و تويتر و ديسكورد (name#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 97 + + تقبل دعوة ديسكورد فقط (مثال RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 104 + + اكتب رمز دعوة Discord + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 125 + + نوع الفضاء + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 127 + + لكل نوع خصائص مختلفة. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 137,138 + + يمكن لأي شخص للانضمام فورا + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 142 + + يتطلب موافقة عضو + + + Requires stake value (in space's token) + + src/app/pages/space/pages/upsert/upsert.page.html + 146 + + Requires stake value (in space's token) + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 174 + + الصورة الرمزية إجبارية + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 243,244 + + انشاء فضاء + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 256,257 + + حفظ الفضاء + + + Space - New + + src/app/pages/space/pages/upsert/upsert.page.ts + 76 + + Space - New + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/space/pages/upsert/upsert.page.ts + 77 + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 210 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 216 + + تحميل جديد للاستعاضة الموجود حاليا. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 211 + + علامتك التجارية مهمة جدا. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 217 + + إجعلها شخصية. + + + Swap by + + src/app/pages/swap/pages/market/swap.page.html + 3,12 + + Swap by + + + What is Swap? + + src/app/pages/swap/pages/market/swap.page.html + 20,21 + + What is Swap? + + + See Swap on iotabee + + src/app/pages/swap/pages/market/swap.page.html + 37,39 + + See Swap on iotabee + + + Create airdrop + + src/app/pages/token/pages/airdrops/airdrops.page.html + 8,9 + + Create airdrop + + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/pages/token/pages/airdrops/airdrops.page.html + 17,19 + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + + Some rows have been removed + + src/app/pages/token/pages/airdrops/airdrops.page.html + 92 + + Some rows have been removed + + + Submit airdrop + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 118,119 + + Submit airdrop + + + + row is not valid + + src/app/pages/token/pages/airdrops/airdrops.page.ts + 73 + + row is not valid + + + Breakdown + + src/app/pages/token/pages/metrics/metrics.page.html + 1 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 284 + + Breakdown + + + Token distribution + + src/app/pages/token/pages/metrics/metrics.page.html + 5 + + Token distribution + + + Total token supply + + src/app/pages/token/pages/metrics/metrics.page.ts + 56 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 96 + + Total token supply + + + Launchpad price per token + + src/app/pages/token/pages/metrics/metrics.page.ts + 67 + + Launchpad price per token + + + Initial Cap + + src/app/pages/token/pages/metrics/metrics.page.ts + 74 + + Initial Cap + + + Total melted tokens + + src/app/pages/token/pages/metrics/metrics.page.ts + 82 + + Total melted tokens + + + You can create only ONE token per space and it can never be changed. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 14,15 + + You can create only ONE token per space and it can never be changed. + + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 23,26 + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + + Continue + + src/app/pages/token/pages/new/introduction/introduction.component.html + 38,39 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 191,192 + + + src/app/pages/token/pages/new/overview/overview.component.html + 104,105 + + Continue + + + Token Sale Requirements + + src/app/pages/token/pages/new/introduction/introduction.component.html + 50 + + Token Sale Requirements + + + To create a public sale or use the Token Exchange you must complete our KYC process. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 52 + + To create a public sale or use the Token Exchange you must complete our KYC process. + + + Begin Process + + src/app/pages/token/pages/new/introduction/introduction.component.html + 58 + + Begin Process + + + Continue + + + src/app/pages/token/pages/new/introduction/introduction.component.html + 73,74 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 330,331 + + + src/app/pages/token/pages/new/overview/overview.component.html + 231,232 + + Continue + + + + Token info + + src/app/pages/token/pages/new/metrics/metrics.component.html + 9 + + + src/app/pages/token/pages/new/summary/summary.component.html + 14 + + + src/app/pages/token/pages/token/token.page.html + 3 + + Token info + + + Name is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 16 + + Name is invalid. + + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + src/app/pages/token/pages/new/metrics/metrics.component.html + 33 + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + + Token supply + + src/app/pages/token/pages/new/metrics/metrics.component.html + 47 + + + src/app/pages/token/pages/new/summary/summary.component.html + 53 + + Token supply + + + Price per token (MIOTA) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 53 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 58 + + Price per token (MIOTA) + + + Price is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 54 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 38 + + Price is invalid. + + + Total token supply (up to 6 decimals are supported) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 68 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 74 + + Total token supply (up to 6 decimals are supported) + + + Total supply is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 69 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 107 + + Total supply is invalid. + + + Allocation title + + src/app/pages/token/pages/new/metrics/metrics.component.html + 111 + + Allocation title + + + % of tokens for sale + + src/app/pages/token/pages/new/metrics/metrics.component.html + 121 + + % of tokens for sale + + + Percentage of tokens is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 122 + + Percentage of tokens is invalid. + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 126 + + % of tokens for sale (Default 100%) + + + Only 1 of the allocations can be public + + src/app/pages/token/pages/new/metrics/metrics.component.html + 149 + + Only 1 of the allocations can be public + + + Sum of the percentages must be 100 + + src/app/pages/token/pages/new/metrics/metrics.component.html + 155 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 166 + + Sum of the percentages must be 100 + + + Invalid sum of percentages + + src/app/pages/token/pages/new/metrics/metrics.component.html + 160 + + Invalid sum of percentages + + + Add allocation + + src/app/pages/token/pages/new/metrics/metrics.component.html + 179 + + Add allocation + + + Token icon + + src/app/pages/token/pages/new/metrics/metrics.component.html + 221 + + + src/app/pages/token/pages/new/summary/summary.component.html + 265 + + Token icon + + + (Recomended size: 400 x 400px) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 223 + + (Recomended size: 400 x 400px) + + + Icon is mandatory + + src/app/pages/token/pages/new/metrics/metrics.component.html + 232 + + Icon is mandatory + + + Token price + + src/app/pages/token/pages/new/metrics/metrics.component.html + 264 + + + src/app/pages/token/pages/new/summary/summary.component.html + 283 + + Token price + + + Distribution of the token happens after the token offering end date. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 266 + + + src/app/pages/token/pages/new/summary/summary.component.html + 285 + + Distribution of the token happens after the token offering end date. + + + Configure the token supply first to see breakdown. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 288 + + Configure the token supply first to see breakdown. + + + Token terms and conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 298 + + + src/app/pages/token/pages/new/summary/summary.component.html + 324 + + Token terms and conditions + + + Provide link for Terms and Conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 300 + + Provide link for Terms and Conditions + + + Terms and Conditions link is invalid. (Start with http:// or https://) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 306 + + Terms and Conditions link is invalid. (Start with http:// or https://) + + + Token allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 75 + + + src/app/pages/token/pages/new/summary/summary.component.html + 165 + + Token allocation + + + Allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 76 + + + src/app/pages/token/pages/new/summary/summary.component.ts + 30 + + Allocation + + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 81,82 + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + + Create token + + src/app/pages/token/pages/new/new.page.html + 2 + + Create token + + + Introduction + + src/app/pages/token/pages/new/new.page.ts + 32 + + Introduction + + + Metrics + + src/app/pages/token/pages/new/new.page.ts + 33 + + + src/app/pages/token/pages/token/token.page.ts + 38 + + Metrics + + + Summary + + src/app/pages/token/pages/new/new.page.ts + 35 + + Summary + + + New Token + + src/app/pages/token/pages/new/new.page.ts + 72 + + New Token + + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + src/app/pages/token/pages/new/new.page.ts + 73 + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + + Token description + + src/app/pages/token/pages/new/overview/overview.component.html + 12 + + + src/app/pages/token/pages/new/summary/summary.component.html + 93 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 6 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 27 + + Token description + + + This text will be displayed on the main token page. + + src/app/pages/token/pages/new/overview/overview.component.html + 14 + + This text will be displayed on the main token page. + + + Title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 23 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 10 + + Title is invalid. + + + Description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 38 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 22 + + Description is invalid. + + + Short description + + src/app/pages/token/pages/new/overview/overview.component.html + 55 + + + src/app/pages/token/pages/new/summary/summary.component.html + 129 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 49 + + Short description + + + Short description of the token which will be displayed on the token trading page. + + src/app/pages/token/pages/new/overview/overview.component.html + 57 + + Short description of the token which will be displayed on the token trading page. + + + Short title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 66 + + Short title is invalid. + + + Short description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 81 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 68 + + Short description is invalid. + + + Overview graphics + + src/app/pages/token/pages/new/overview/overview.component.html + 121 + + Overview graphics + + + Token introductory video / image + + src/app/pages/token/pages/new/overview/overview.component.html + 123 + + Token introductory video / image + + + Introductionary media is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 132 + + Introductionary media is invalid. + + + Invalid URL. (Start with http:// or https://) + + src/app/pages/token/pages/new/overview/overview.component.html + 168 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 84 + + Invalid URL. (Start with http:// or https://) + + + Add link + + src/app/pages/token/pages/new/overview/overview.component.html + 191 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 107 + + Add link + + + Trading Options + + src/app/pages/token/pages/new/overview/overview.component.html + 203 + + Trading Options + + + Enable trading + + src/app/pages/token/pages/new/overview/overview.component.html + 207 + + Enable trading + + + Edit + + src/app/pages/token/pages/new/summary/summary.component.html + 22,23 + + + src/app/pages/token/pages/new/summary/summary.component.html + 61,62 + + + src/app/pages/token/pages/new/summary/summary.component.html + 101,102 + + + src/app/pages/token/pages/new/summary/summary.component.html + 137,138 + + + src/app/pages/token/pages/new/summary/summary.component.html + 173,174 + + Edit + + + Name + + src/app/pages/token/pages/new/summary/summary.component.html + 30,31 + + Name + + + Symbol + + src/app/pages/token/pages/new/summary/summary.component.html + 41,42 + + Symbol + + + Total token supply + + src/app/pages/token/pages/new/summary/summary.component.html + 80,81 + + Total token supply + + + Description title + + src/app/pages/token/pages/new/summary/summary.component.html + 109,110 + + Description title + + + Description + + src/app/pages/token/pages/new/summary/summary.component.html + 120,121 + + Description + + + Short description title + + src/app/pages/token/pages/new/summary/summary.component.html + 145,146 + + Short description title + + + Short description + + src/app/pages/token/pages/new/summary/summary.component.html + 156,157 + + Short description + + + Allocation title + + src/app/pages/token/pages/new/summary/summary.component.html + 187,188 + + Allocation title + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/summary/summary.component.html + 198,199 + + % of tokens for sale (Default 100%) + + + Submit token + + src/app/pages/token/pages/new/summary/summary.component.html + 227,228 + + Submit token + + + (Recommended size: 400 x 400px) + + src/app/pages/token/pages/new/summary/summary.component.html + 267 + + (Recommended size: 400 x 400px) + + + Some description + + src/app/pages/token/pages/new/summary/summary.component.html + 326 + + Some description + + + Terms&conditions + + src/app/pages/token/pages/new/summary/summary.component.html + 340 + + Terms&conditions + + + Submit token + + + src/app/pages/token/pages/new/summary/summary.component.html + 356,357 + + Submit token + + + + Trade token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 15,16 + + Trade token + + + Buy Tokens + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 28,29 + + Buy Tokens + + + Schedule public sale + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 42,43 + + Schedule public sale + + + Allow Trading + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 57,58 + + Allow Trading + + + Edit token info + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 86 + + Edit token info + + + Check out token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 100 + + Check out token + + + Mint Token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 132,133 + + Mint Token + + + Minting in progress + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 144,145 + + Minting in progress + + + Token was not made available on decentralised network yet. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 150 + + Token was not made available on decentralised network yet. + + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 153,154 + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + + Trading enabled. + + src/app/pages/token/pages/token/token-buy/token-buy.component.ts + 86 + + Trading enabled. + + + Short description title is invalid. + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 56 + + Short description title is invalid. + + + Short description title + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 61 + + Short description title + + + Short token description + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 73 + + Short token description + + + Sale Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 4 + + Sale Info + + + Sale schedule + + src/app/pages/token/pages/token/token-info/token-info.component.html + 10 + + Sale schedule + + + During cooldown period you are able to trigger refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 41 + + During cooldown period you are able to trigger refund. + + + No Cooldown. Participants can't refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 75,76 + + No Cooldown. Participants can't refund. + + + Token Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 80 + + + src/app/pages/token/pages/trade/trade.page.html + 57 + + + src/app/pages/token/pages/trade/trade.page.html + 624 + + Token Info + + + My purchased tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 4 + + My purchased tokens + + + + + + + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 78,80 + + + + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 90,92 + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + + Your Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 21 + + Your Deposit + + + Potential Tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 22 + + Potential Tokens + + + Token Owned + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 23 + + Token Owned + + + Total Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 24 + + Total Deposit + + + Total Participants + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 25 + + Total Participants + + + Sale ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 45 + + Sale ends in + + + Cooldown in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 62 + + Cooldown in progress + + + Sale starts in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 69 + + Sale starts in + + + Cooldown ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 73 + + Cooldown ends in + + + + + + + src/app/pages/token/pages/token/token.page.html + 47,48 + + + + + Airdrops + + src/app/pages/token/pages/token/token.page.ts + 41 + + Airdrops + + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + src/app/pages/token/pages/token/token.page.ts + 100 + + + src/app/pages/token/pages/trade/trade.page.ts + 275 + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + + Ongoing Sale + + src/app/pages/token/pages/token/token.page.ts + 248 + + Ongoing Sale + + + Scheduled + + src/app/pages/token/pages/token/token.page.ts + 250 + + Scheduled + + + Cooldown + + src/app/pages/token/pages/token/token.page.ts + 252 + + Cooldown + + + Processing + + src/app/pages/token/pages/token/token.page.ts + 254 + + Processing + + + Order book + + src/app/pages/token/pages/trade/trade.page.html + 94 + + + src/app/pages/token/pages/trade/trade.page.html + 644 + + Order book + + + Token chart + + src/app/pages/token/pages/trade/trade.page.html + 102 + + + src/app/pages/token/pages/trade/trade.page.html + 795 + + Token chart + + + My trading + + src/app/pages/token/pages/trade/trade.page.html + 158 + + My trading + + + Open buy orders + + src/app/pages/token/pages/trade/trade.page.html + 166 + + Open buy orders + + + Open sell orders + + src/app/pages/token/pages/trade/trade.page.html + 174 + + Open sell orders + + + Order history + + src/app/pages/token/pages/trade/trade.page.html + 182 + + Order history + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 213 + + + src/app/pages/token/pages/trade/trade.page.html + 287 + + Fulfilled + + + There are no buys + + src/app/pages/token/pages/trade/trade.page.html + 257,258 + + There are no buys + + + Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 321,322 + + + src/app/pages/token/pages/trade/trade.page.html + 416,417 + + Cancelled + + + Expired + + src/app/pages/token/pages/trade/trade.page.html + 324,325 + + + src/app/pages/token/pages/trade/trade.page.html + 422,423 + + Expired + + + There are no sells + + src/app/pages/token/pages/trade/trade.page.html + 345,346 + + There are no sells + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 388 + + + src/app/pages/token/pages/trade/trade.page.html + 1213 + + Sell + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 404,405 + + Fulfilled + + + Partially Fulfilled / Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 410,411 + + Partially Fulfilled / Cancelled + + + Fulfilled / Cancelled (unfulfillable) + + src/app/pages/token/pages/trade/trade.page.html + 419,420 + + Fulfilled / Cancelled (unfulfillable) + + + There is no order history + + src/app/pages/token/pages/trade/trade.page.html + 434,435 + + There is no order history + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 477,478 + + + src/app/pages/token/pages/trade/trade.page.html + 488,489 + + + src/app/pages/token/pages/trade/trade.page.html + 919,920 + + Sell + + + Available + + src/app/pages/token/pages/trade/trade.page.html + 530,531 + + Available + + + Current Price + + src/app/pages/token/pages/trade/trade.page.html + 542 + + Current Price + + + Change 24h + + src/app/pages/token/pages/trade/trade.page.html + 564,565 + + Change 24h + + + ( ~ ) + + src/app/pages/token/pages/trade/trade.page.html + 729,732 + + ( ~ ) + + + current price + + src/app/pages/token/pages/trade/trade.page.html + 737,738 + + current price + + + There is no activity yet + + src/app/pages/token/pages/trade/trade.page.html + 788,789 + + There is no activity yet + + + Trade history + + src/app/pages/token/pages/trade/trade.page.html + 829,830 + + سجل التجارة + + + There is no trade history + + src/app/pages/token/pages/trade/trade.page.html + 894,895 + + There is no trade history + + + You don’t have enough tokens + + src/app/pages/token/pages/trade/trade.page.html + 928 + + You don’t have enough tokens + + + Amount to + + src/app/pages/token/pages/trade/trade.page.html + 935,936 + + Amount to + + + Balance + + src/app/pages/token/pages/trade/trade.page.html + 979 + + Balance + + + Set your price per 1 + + src/app/pages/token/pages/trade/trade.page.html + 998,1000 + + Set your price per 1 + + + LIMIT PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1009,1010 + + LIMIT PRICE + + + MARKET PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1017,1018 + + MARKET PRICE + + + ~ + + src/app/pages/token/pages/trade/trade.page.html + 1038,1041 + + + src/app/pages/token/pages/trade/trade.page.html + 1145,1148 + + ~ + + + Set Current Price + + src/app/pages/token/pages/trade/trade.page.html + 1069 + + Set Current Price + + + Set BID + + src/app/pages/token/pages/trade/trade.page.html + 1093,1104 + + Set BID + + + The bid price is the highest price that a particular buyer is willing to pay. + + src/app/pages/token/pages/trade/trade.page.html + 1100 + + The bid price is the highest price that a particular buyer is willing to pay. + + + Set ASK + + src/app/pages/token/pages/trade/trade.page.html + 1109,1120 + + Set ASK + + + The asking price is the minimum price that an individual would be willing to sell their asset. + + src/app/pages/token/pages/trade/trade.page.html + 1116 + + The asking price is the minimum price that an individual would be willing to sell their asset. + + + You will spend + + src/app/pages/token/pages/trade/trade.page.html + 1129,1130 + + You will spend + + + Minimum total has to be at least + + src/app/pages/token/pages/trade/trade.page.html + 1163 + + Minimum total has to be at least + + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + src/app/pages/token/pages/trade/trade.page.html + 1179 + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + + 1h + + src/app/pages/token/pages/trade/trade.page.ts + 118 + + 1h + + + 4h + + src/app/pages/token/pages/trade/trade.page.ts + 119 + + 4h + + + 1d + + src/app/pages/token/pages/trade/trade.page.ts + 120 + + 1d + + + 1w + + src/app/pages/token/pages/trade/trade.page.ts + 121 + + 1w + + + Bids + + src/app/pages/token/pages/trade/trade.page.ts + 563 + + Bids + + + Asks + + src/app/pages/token/pages/trade/trade.page.ts + 567 + + Asks + + + Cancelled + + src/app/pages/token/services/helper.service.ts + 201 + + Cancelled + + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 42 + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + + Go to trading pairs to add your favourite tokens. + + src/app/pages/tokens/pages/favourites/favourites.page.html + 47,48 + + Go to trading pairs to add your favourite tokens. + + + Add favourites + + src/app/pages/tokens/pages/favourites/favourites.page.html + 56,57 + + Add favourites + + + Tokens - Favourite + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 52 + + Tokens - Favourite + + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 53 + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + + Tokens - Launchpad + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 41 + + Tokens - Launchpad + + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 42 + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/tokens/pages/tokens/tokens.page.html + 11,13 + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + + Highlighted Token + + src/app/pages/tokens/pages/tokens/tokens.page.html + 49 + + Highlighted Token + + + Favorites + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 17 + + Favorites + + + All tokens + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 20 + + All tokens + + + Trading pairs + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 21 + + Trading pairs + + + Launchpad + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 22 + + Launchpad + + + Tokens - Trading Pairs + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 43 + + Tokens - Trading Pairs + + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 44 + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + + AuditOne Validation + + src/app/service-modules/audit-one/components/modal/modal.component.html + 3 + + AuditOne Validation + + + Requested On + + src/app/service-modules/audit-one/components/modal/modal.component.html + 22 + + Requested On + + + Last Update + + src/app/service-modules/audit-one/components/modal/modal.component.html + 23 + + Last Update + + + There are no records. + + src/app/service-modules/audit-one/components/modal/modal.component.html + 52 + + There are no records. + + + AuditOne + + src/app/service-modules/audit-one/components/widget/widget.component.html + 11 + + AuditOne + + + Verified + + src/app/service-modules/audit-one/components/widget/widget.component.html + 47 + + Verified + + + See more + + src/app/service-modules/audit-one/components/widget/widget.component.html + 52 + + See more + + + + diff --git a/src/locale/messages.cs-CZ.xlf b/src/locale/messages.cs-CZ.xlf new file mode 100644 index 0000000..72fd3bf --- /dev/null +++ b/src/locale/messages.cs-CZ.xlf @@ -0,0 +1,6844 @@ + + + + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 69 + + Back + + + Discover + + src/app/@shell/ui/header/header.component.html + 56,57 + + + src/app/pages/home/home.page.html + 18,19 + + Scoprire + + + Create new + + src/app/@shell/ui/header/header.component.html + 62 + + Crea nuovo + + + Space + + src/app/@shell/ui/header/header.component.html + 68,69 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 83,84 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 6,7 + + + src/app/pages/collection/pages/collection/collection.page.html + 54,55 + + + src/app/pages/market/pages/collections/collections.page.html + 122,123 + + + src/app/pages/market/pages/nfts/nfts.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 69,70 + + Spazio + + + Proposal + + src/app/@shell/ui/header/header.component.html + 71,72 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 23,24 + + Proposta + + + Award + + src/app/@shell/ui/header/header.component.html + 74,75 + + + src/app/pages/award/pages/award/award.page.html + 26,27 + + Premio + + + Collection + + src/app/@shell/ui/header/header.component.html + 77,78 + + + src/app/pages/collection/pages/collection/collection.page.html + 19,20 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 114,115 + + + src/app/pages/nft/pages/new/single/single.page.html + 336,337 + + + src/app/pages/space/pages/collections/collections.page.html + 26 + + Collezione + + + None. + + src/app/@shell/ui/header/header.component.html + 128,129 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 52 + + None. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 137,138 + + + src/app/components/auth/services/auth.service.ts + 315 + + Il mio profilo + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 152,153 + + L'acquisto non è stato completato + + + You have + + src/app/@shell/ui/header/header.component.html + 154 + + Tu hai + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 154,155 + + per finire la tua transazione + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 156,157 + + Aprire cassa + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 272 + + You won the NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 273 + + You are a proud owner of a new NFT. Congratulations! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 280 + + You lost your bid! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 281 + + Your bid on + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 282 + + was outbid. Try again! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 289 + + just offered + + + for + + src/app/@shell/ui/header/header.component.ts + 290 + + + src/app/components/timeline-nft/timeline-nft.component.html + 60 + + for + + + Your + + src/app/@shell/ui/header/header.component.ts + 291 + + Your + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 292 + + has received a new bid for + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 300,299 + + Unsupported + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 301 + + This notification is not yet supported in your language + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 12 + + Spazio + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 17 + + Proposta + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 22 + + Premio + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27 + + Collezione + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 34,35 + + Connect to your MetaMask wallet + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 52,53 + + Disconnettersi + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 56,57 + + Alimentato da + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8,10 + + La pagina che stavi cercando non è stata trovata + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 11,13 + + Scoprire Soonaverse + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 28,29 + + Vedi Docs + + + Coming SOON + + src/app/@shell/ui/sider/sider.component.html + 35,36 + + + src/app/pages/award/pages/new/new.page.html + 271,272 + + + src/app/pages/award/pages/new/new.page.html + 281,282 + + + src/app/pages/award/pages/new/new.page.html + 291,292 + + Prossimamente + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 8,9 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 9,10 + + Collegati al tuo portafoglio Metamask + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 20,21 + + Assicurati di selezionare la catena pubblica IOTA EVM in MetaMask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 22,23 + + Nome della rete: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23,24 + + RPC URL: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 24,25 + + Catena ID: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 31,32 + + + src/app/pages/award/pages/award/award.page.html + 154 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 152 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 184 + + Cancella + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 1,3 + + Collegare + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Scollegare + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 111 + + Unable to sign transaction. Please try to reload page. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 156 + + You must unlock your MetaMask first! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 167 + + You must enable access to read your account address. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 189 + + Please make sure you select address in MetaMask! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 196 + + Unable to get nonce to authenticate! + + + You have to open Soonaverse in MetaMask app. + + src/app/components/auth/services/auth.service.ts + 239 + + You have to open Soonaverse in MetaMask app. + + + Failed to initialize MetaMask, try to reload page. + + src/app/components/auth/services/auth.service.ts + 241 + + Failed to initialize MetaMask, try to reload page. + + + Pending + + + src/app/components/award/components/award-status/award-status.component.html + 1,2 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 1,2 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 1,2 + + In sospeso + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 3,4 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 3,4 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 3,4 + + Rifiutata + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 5 + + + src/app/pages/space/pages/awards/awards.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 25 + + Completato + + + Available + + src/app/components/award/components/award-status/award-status.component.html + 6 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 62 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 150,149 + + + src/app/pages/collection/pages/collection/collection.page.html + 91,92 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 39,37 + + + src/app/pages/space/pages/collections/collections.page.ts + 24 + + Disponibile + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 4 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 553,554 + + Space Members Only + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 542,543 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 14 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 564,565 + + Space Members with Badge Only + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 574,575 + + At least one NFT from Collections + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 19 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 43,44 + + Starts in + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 21 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 46,47 + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26,27 + + days + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 24 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 50,51 + + Starts today + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 42 + + Limited Edition + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 57 + + In attesa dell'approvazione + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 67 + + + src/app/pages/space/pages/awards/awards.page.ts + 26 + + + src/app/pages/space/pages/collections/collections.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 26 + + Rifiutata + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 2,3 + + + src/app/pages/nft/pages/new/single/single.page.html + 342,343 + + La raccolta è necessaria. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 11,12 + + Collezione selezionata + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 65,67 + + Seleziona una collezione + + + Search + + src/app/components/collection/components/select-collection/select-collection.component.html + 74 + + + src/app/components/space/components/select-space/select-space.component.html + 74 + + + src/app/pages/discover/pages/discover/discover.page.html + 22,23 + + + src/app/pages/market/pages/market/market.page.html + 22,23 + + Cerca + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 84 + + + src/app/components/space/components/select-space/select-space.component.html + 84 + + Nessun risultato per + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 14,13 + + All Collections + + + Wallet details + + src/app/components/member/components/member-about/member-about.component.html + 42,43 + + Wallet details + + + Member's Wallet Address. + + src/app/components/member/components/member-about/member-about.component.html + 44,45 + + Member's Wallet Address. + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 55,56 + + Recently joined spaces + + + All + + src/app/components/member/components/member-about/member-about.component.html + 58,59 + + + src/app/pages/discover/pages/spaces/spaces.page.ts + 28,27 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 38,37 + + All + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 78,79 + + No Contribution Yet. + + + Latest Badges + + src/app/components/member/components/member-about/member-about.component.html + 84,85 + + Latest Badges + + + No badges + + src/app/components/member/components/member-about/member-about.component.html + 93,94 + + No badges + + + See all + + src/app/components/member/components/member-about/member-about.component.html + 97,98 + + See all + + + Connections + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 5 + + + src/app/pages/member/pages/activity/activity.page.html + 68 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 50,51 + + Connections + + + Awards + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 6 + + + src/app/pages/discover/pages/discover/discover.page.ts + 23 + + + src/app/pages/member/pages/member/member.page.ts + 27 + + + src/app/pages/space/pages/space/space.page.ts + 33 + + Awards + + + XP + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 7 + + + src/app/components/member/components/member-card/member-card.component.html + 31,32 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 16,17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 25,26 + + XP + + + Total reputation + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 29 + + Total reputation + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 38,39 + + awards + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 6,7 + + Display Name + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 7,8 + + Set a display name. This does not change your username. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 11 + + Display name (optional) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 18,19 + + About + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19,20 + + A brief description of yourself shown on your profile. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 22 + + Your description (optional) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 29,30 + + + src/app/pages/space/pages/upsert/upsert.page.html + 154 + + Avatar + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 30,31 + + Customise your Soonaverse identity. + + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 34,37 + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 43,44 + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 49,50 + + + src/app/pages/space/pages/upsert/upsert.page.html + 52,53 + + Networking + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 51,52 + + + src/app/pages/space/pages/upsert/upsert.page.html + 60,61 + + Invalid Github username. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 53,54 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67,68 + + Type your Github account username + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 63,64 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 206,207 + + + src/app/pages/space/pages/upsert/upsert.page.html + 80,81 + + Invalid Twitter username. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 65,66 + + + src/app/pages/space/pages/upsert/upsert.page.html + 87,88 + + Type your Twitter account username + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,76 + + Only username#1234 format supported. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 77,78 + + Type your Discord account username + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 89,90 + + Settings + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 91,92 + + Save changes + + + reputation + + src/app/components/member/components/member-reputation-drawer/member-reputation-drawer.component.html + 15 + + + src/app/components/member/components/member-reputation-modal/member-reputation-modal.component.html + 17 + + reputation + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 15,16 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 29,30 + + Make a bid + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 44,45 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 9,10 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 44,45 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46,47 + + NFT image + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 61 + + Ends + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 66 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 63 + + Royalties + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 72,73 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 116,117 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 66,67 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 69,70 + + Royalties are automatically deducted and paid to artists. + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 91 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 94 + + Current highest bid + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 92 + + + src/app/pages/nft/pages/nft/nft.page.html + 59 + + Min bid + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 95 + + + src/app/pages/nft/pages/nft/nft.page.html + 61 + + Your bid is the highest + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Current price is refreshing in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 152,153 + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 156,157 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 196,197 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 277,278 + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + + By checking this box, you agree with + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 162,163 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 108,109 + + By checking this box, you agree with + + + Terms and Conditions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 165,166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 111,112 + + Terms and Conditions + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 171 + + Make a bid + + + Send IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 180,181 + + Send IOTA to following address (please restake after!): + + + Copied + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 189 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 240 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150 + + + src/app/components/share/share.component.html + 11 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 139 + + + src/app/components/wallet-address/wallet-address.component.html + 24 + + Copied + + + Copy + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 190 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 241 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 151 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 140 + + + src/app/components/wallet-address/wallet-address.component.html + 25 + + Copy + + + Do not send funds from an exchange, always use wallets you fully control. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 201 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + Do not send funds from an exchange, always use wallets you fully control. + + + Firefly + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 210 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 166 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 151 + + Firefly + + + Tanglepay + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 219 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 300 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 175 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 160 + + Tanglepay + + + Send + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130 + + Send + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231,232 + + IOTA to following address (please restake after!): + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 247 + + Your transactions + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 253,254 + + Sent Date + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 254,255 + + Time + + + Action + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,256 + + Action + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 256,257 + + + src/app/pages/nft/pages/nft/nft.page.html + 170,171 + + + src/app/pages/nft/pages/nft/nft.page.html + 204,205 + + Amount + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 258,259 + + Detail + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 270,271 + + + src/app/pages/nft/pages/nft/nft.page.html + 171,172 + + + src/app/pages/nft/pages/nft/nft.page.html + 190,191 + + + src/app/pages/nft/pages/nft/nft.page.html + 205,206 + + + src/app/pages/nft/pages/nft/nft.page.html + 219,220 + + Link + + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 282 + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 314,315 + + Congratulations you won the NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 320 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 238 + + Close checkout + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 325 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 243 + + Show my NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 337,338 + + Bidding is expired. Good luck next time :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 227 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 368 + + Generated NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 229 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 370 + + SFT + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 47,48 + + day + + + Price + + src/app/components/nft/components/nft-card/nft-card.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 12 + + + src/app/pages/collection/pages/collection/collection.page.html + 190 + + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 65 + + + src/app/pages/market/pages/collections/collections.page.html + 162 + + + src/app/pages/market/pages/nfts/nfts.page.html + 50 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 71,72 + + + src/app/pages/nft/pages/new/single/single.page.html + 62 + + Price + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 73 + + Current bid + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 88,89 + + Owned by + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 100,101 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 155,154 + + New NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 15,16 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 29,30 + + Checkout + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 71,72 + + Total price + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 117 + + Confirm and Lock + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121 + + Your NFT will be locked for purchase for + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121,122 + + minutes + + + remaining to make the transfer. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 132,133 + + remaining to make the transfer. + + + Expired + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 133,134 + + Expired + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 137 + + We received invalid amount. Try again. + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141,142 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130,131 + + IOTA to following address (please restake after!): + + + Transaction history + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 214 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 177 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 204 + + Transaction history + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 204 + + Validating your transaction... + + + Transaction complete. Congratulations. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 232,233 + + Transaction complete. Congratulations. + + + + + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 10,11 + + + src/app/pages/collection/pages/collection/collection.page.html + 55,56 + + + src/app/pages/collection/pages/collection/collection.page.html + 70,71 + + + + + d + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26 + + d + + + h + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34 + + h + + + hours + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34,35 + + hours + + + m + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42 + + m + + + min + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42,43 + + min + + + s + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50 + + s + + + sec + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50,51 + + sec + + + Sale Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 34 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 50,51 + + Sale Starts + + + Auction Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 37 + + Auction Starts + + + Auction Ends + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 40 + + Auction Ends + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 16,17 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 31,32 + + Preview + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 59,60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 74,75 + + + src/app/pages/nft/pages/nft/nft.page.html + 43,44 + + Current price + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68,69 + + Author + + + Migrate + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100,101 + + + src/app/pages/nft/pages/nft/nft.page.html + 291,292 + + Migrate + + + Shimmer/Mainnet (Tokenization)...SOON. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 102,104 + + + src/app/pages/nft/pages/nft/nft.page.html + 293,295 + + Shimmer/Mainnet (Tokenization)...SOON. + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 108,109 + + + src/app/pages/nft/pages/nft/nft.page.html + 299,300 + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 114,115 + + + src/app/pages/nft/pages/nft/nft.page.html + 305,306 + + IPFS Metadata + + + Preparing... + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 116 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 122 + + Preparing... + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 120,121 + + + src/app/pages/nft/pages/nft/nft.page.html + 312,313 + + IPFS Image + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149,150 + + + src/app/pages/nft/pages/new/single/single.page.html + 297,298 + + + src/app/pages/nft/pages/nft/nft.page.html + 15 + + NFT Image + + + Trade info + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 3,5 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 3,4 + + Trade info + + + Floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 12 + + Floor price + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 41 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 40,41 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 101,102 + + + src/app/pages/nft/pages/new/single/single.page.html + 90,91 + + Available On is required. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 50 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 49,50 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 112,113 + + + src/app/pages/nft/pages/new/single/single.page.html + 100,101 + + Available on + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 57 + + Various auction length coming next sprint once community have a vote! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + Duration of auction is 3 days + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 158 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 91,92 + + Once your listing is complete, you will get a confirmation message. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 159 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Confirm listing + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 62,63 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 532,533 + + Open Sale + + + Specific member(s) only (Transfer) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Specific member(s) only (Transfer) + + + Reserve for specific buyer + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 82,83 + + Reserve for specific buyer + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2,4 + + Trade history + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 6,8 + + Item is yours and yours only + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 11 + + This will make your item unavailable for sale. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 12 + + Stop sale! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 16,17 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 31,32 + + List Item for sale + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 86,87 + + Not for sale + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 90,91 + + Fixed price + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 94,95 + + Auction + + + Donut graph coming SOON. + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 40,41 + + Donut graph coming SOON. + + + Commencing + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 5,6 + + Commencing + + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 7,8 + + In-Progress + + + Completed + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 9,10 + + Completed + + + + Share + + src/app/components/share/share.component.html + 5,6 + + + src/app/components/share/share.component.html + 18,19 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 14,15 + + Share + + + Copy to clipboard + + src/app/components/share/share.component.html + 12 + + Copy to clipboard + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 2,3 + + + src/app/pages/award/pages/new/new.page.html + 109,110 + + + src/app/pages/proposal/pages/new/new.page.html + 248,249 + + Space is required. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 11,12 + + Select Space + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 65,67 + + + src/app/pages/award/pages/new/new.page.html + 138,139 + + + src/app/pages/proposal/pages/new/new.page.html + 277,278 + + Select a space + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 14,13 + + All Spaces + + + No Connections + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 2,3 + + No Connections + + + Rep. weight + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 7,8 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 68,69 + + Rep. weight + + + Status + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 8,9 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 72,73 + + Status + + + Established + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 33 + + Established + + + Recognised + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 34 + + Recognised + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 11,12 + + + src/app/pages/member/pages/member/member.page.html + 30 + + Joined + + + members + + src/app/components/space/components/space-card/space-card.component.html + 28 + + + src/app/pages/discover/pages/members/members.page.html + 55,56 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 10,11 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 35,36 + + members + + + Value range is 0-1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 8 + + Value range is 0-1000 + + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 30,31 + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + + Equal + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 39 + + Equal + + + Half + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 40 + + Half + + + Double + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 41 + + Double + + + Earned Badge + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + Earned Badge + + + with + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + with + + + Show less + + src/app/components/timeline-badges/timeline-badges.component.html + 38 + + + src/app/components/timeline-nft/timeline-nft.component.html + 114 + + Show less + + + Show more + + src/app/components/timeline-badges/timeline-badges.component.html + 39 + + + src/app/components/timeline-nft/timeline-nft.component.html + 115 + + Show more + + + Timeline + + src/app/components/timeline-nft/timeline-nft.component.html + 1 + + Timeline + + + Listed by + + src/app/components/timeline-nft/timeline-nft.component.html + 20 + + Listed by + + + Made available for auction by + + src/app/components/timeline-nft/timeline-nft.component.html + 23 + + Made available for auction by + + + Purchased by + + src/app/components/timeline-nft/timeline-nft.component.html + 59 + + Purchased by + + + details + + src/app/components/timeline-nft/timeline-nft.component.html + 61 + + details + + + Invalid + + src/app/components/timeline-nft/timeline-nft.component.html + 73,74 + + Invalid + + + Listed by space + + src/app/components/timeline-nft/timeline-nft.component.html + 104 + + Listed by space + + + Bill (owner) + + src/app/components/timeline-nft/timeline-nft.component.ts + 46 + + Bill (owner) + + + Bill (royalty) + + src/app/components/timeline-nft/timeline-nft.component.ts + 48 + + Bill (royalty) + + + Credit + + src/app/components/timeline-nft/timeline-nft.component.ts + 51 + + Credit + + + Payment + + src/app/components/timeline-nft/timeline-nft.component.ts + 53 + + Payment + + + Order + + src/app/components/timeline-nft/timeline-nft.component.ts + 55 + + Order + + + Generate address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 12,13 + + Generate address + + + Make transaction + + src/app/components/wallet-address/iota-address/iota-address.component.html + 33,34 + + Make transaction + + + Wait for confirmation + + src/app/components/wallet-address/iota-address/iota-address.component.html + 55,56 + + Wait for confirmation + + + Confirmed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 78,79 + + Confirmed + + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/iota-address/iota-address.component.html + 104,105 + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/iota-address/iota-address.component.html + 105 + + space + + + profile + + src/app/components/wallet-address/iota-address/iota-address.component.html + 106 + + profile + + + for future transactions. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 107,108 + + for future transactions. + + + Generate new address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 111 + + Generate new address + + + Send a small + + src/app/components/wallet-address/iota-address/iota-address.component.html + 120 + + Send a small + + + amount to validate your address. This expires in + + src/app/components/wallet-address/iota-address/iota-address.component.html + 121 + + amount to validate your address. This expires in + + + Expired. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 123,124 + + Expired. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 172 + + Wait for transaction to be validated. We will send back your transaction once completed + + + Validating address... + + src/app/components/wallet-address/iota-address/iota-address.component.html + 194 + + Validating address... + + + Now you can deal with NFT`s + + src/app/components/wallet-address/iota-address/iota-address.component.html + 221,222 + + Now you can deal with NFT`s + + + Finish Verification + + src/app/components/wallet-address/iota-address/iota-address.component.html + 225 + + Finish Verification + + + Not verified + + src/app/components/wallet-address/wallet-address.component.html + 4,5 + + Not verified + + + Verify wallet + + src/app/components/wallet-address/wallet-address.component.html + 9,10 + + Verify wallet + + + Verified + + src/app/components/wallet-address/wallet-address.component.html + 18,19 + + Verified + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 43 + + Verify your + + + address + + src/app/components/wallet-address/wallet-address.component.html + 43 + + + src/app/components/wallet-address/wallet-address.component.html + 59 + + address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 59 + + Verify your + + + Detailed Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Detailed Info + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.html + 3,4 + + Badges used / available + + + End Date + + src/app/pages/award/pages/award/award-info/award-info.component.html + 9,10 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 50 + + End Date + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 16 + + Owner + + + Award info + + src/app/pages/award/pages/award/award.page.html + 5,6 + + + src/app/pages/award/pages/new/new.page.html + 17,18 + + Award info + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 81,82 + + + src/app/pages/award/pages/award/award.page.html + 176,177 + + Check out award + + + Approve Award + + src/app/pages/award/pages/award/award.page.html + 91,92 + + Approve Award + + + Approve + + src/app/pages/award/pages/award/award.page.html + 103 + + Approve + + + Decline + + src/app/pages/award/pages/award/award.page.html + 114 + + Decline + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 128,129 + + Confirm your participation + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 136,137 + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 142,143 + + Provide description or link to your work. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 151 + + Submit + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 35 + + + src/app/pages/space/pages/space/space.page.ts + 30 + + Overview + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 94 + + Participants + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2,4 + + New Award + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14,15 + + + src/app/pages/proposal/pages/new/new.page.html + 23,24 + + Title is required. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19,20 + + Title and description will be included on the Award. End date determines the duration of the Award. + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 23,24 + + You must enter name. + + + Title + + src/app/pages/award/pages/new/new.page.html + 28 + + + src/app/pages/proposal/pages/new/new.page.html + 28 + + + src/app/pages/space/pages/upsert/upsert.page.html + 29 + + Title + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 35,36 + + + src/app/pages/proposal/pages/new/new.page.html + 51,52 + + End Date is required. + + + End + + src/app/pages/award/pages/new/new.page.html + 45 + + + src/app/pages/proposal/pages/new/new.page.html + 62 + + End + + + Award description + + src/app/pages/award/pages/new/new.page.html + 55,56 + + Award description + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 66,67 + + Badge definition + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 68,69 + + Title and description will be included on the badge. + + + Badge Title is required. + + src/app/pages/award/pages/new/new.page.html + 73,74 + + Badge Title is required. + + + Badge Title + + src/app/pages/award/pages/new/new.page.html + 78,79 + + Badge Title + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 89,90 + + Badge description + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 103,104 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 363,364 + + + src/app/pages/proposal/pages/new/new.page.html + 242,243 + + Space Info + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 105,106 + + This is the space that will list the award. + + + Reward Info + + src/app/pages/award/pages/new/new.page.html + 155,156 + + Reward Info + + + Defines the amount of XP for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 157,158 + + Defines the amount of XP for each badge and the number of badges available. + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 162,163 + + + src/app/pages/award/pages/new/new.page.html + 182,183 + + Minimum 1 and maximum 10000. + + + Total XP (Max 10000) + + src/app/pages/award/pages/new/new.page.html + 167,168 + + Total XP (Max 10000) + + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + src/app/pages/award/pages/new/new.page.html + 177,178 + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + + Number of Badges + + src/app/pages/award/pages/new/new.page.html + 187,188 + + Number of Badges + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 197,198 + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + + Badge + + src/app/pages/award/pages/new/new.page.html + 206 + + Badge + + + What the badge looks like. + + src/app/pages/award/pages/new/new.page.html + 207,208 + + What the badge looks like. + + + Mint an unique NTT badge. + + src/app/pages/award/pages/new/new.page.html + 216,217 + + Mint an unique NTT badge. + + + Mint Avatar + + src/app/pages/award/pages/new/new.page.html + 225 + + Mint Avatar + + + WOW! Now reward your members with it! + + src/app/pages/award/pages/new/new.page.html + 238,239 + + WOW! Now reward your members with it! + + + Award Setup + + src/app/pages/award/pages/new/new.page.html + 245,246 + + Award Setup + + + Defines who and how can get a badge. + + src/app/pages/award/pages/new/new.page.html + 247,248 + + Defines who and how can get a badge. + + + Guardian approval + + src/app/pages/award/pages/new/new.page.html + 254,255 + + Guardian approval + + + The award must be approved by the guardians of the space before it's active or distributed + + src/app/pages/award/pages/new/new.page.html + 260,261 + + The award must be approved by the guardians of the space before it's active or distributed + + + Discord Activity + + src/app/pages/award/pages/new/new.page.html + 265,266 + + Discord Activity + + + Github Activity + + src/app/pages/award/pages/new/new.page.html + 275,276 + + Github Activity + + + Custom and more + + src/app/pages/award/pages/new/new.page.html + 285,286 + + Custom and more + + + Create award + + src/app/pages/award/pages/new/new.page.html + 310,311 + + Create award + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2,3 + + Award Description + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 39 + + + src/app/pages/award/pages/participants/participants.page.html + 46,47 + + + src/app/pages/proposal/pages/participants/participants.page.html + 24 + + + src/app/pages/proposal/pages/participants/participants.page.html + 31,32 + + Find Participant + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 51 + + + src/app/pages/proposal/pages/participants/participants.page.html + 36 + + + src/app/pages/space/pages/members/members.page.html + 49,50 + + Showing only few top records... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 59 + + + src/app/pages/proposal/pages/participants/participants.page.html + 44 + + No Participants + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 71 + + Reward + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 82 + + Reward again + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 39 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 131 + + + src/app/pages/space/pages/awards/awards.page.ts + 23 + + + src/app/pages/space/pages/collections/collections.page.ts + 23 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 23 + + Pending + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 40 + + Issued + + + Visit website + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 7,8 + + Visit website + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 18,19 + + Who can buy? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 22,23 + + Open sale + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 28,29 + + Space Members Only + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 34,35 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 40,41 + + Space Members with Badge Only + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 46,47 + + Must hold at least one NFT from each selected Collections + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51,52 + + (One NFT per member) + + + The badges you need + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 78 + + The badges you need + + + Resources + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89 + + Resources + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 114 + + Member discounts + + + Discount for members with XP + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 119 + + Discount for members with XP + + + Guardians of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 47 + + Guardians of Space Only + + + Members of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 49 + + Members of Space Only + + + Members With Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 51 + + Members With Badge Only + + + Check out collection + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 72 + + Check out collection + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 3 + + About collection + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 11 + + Limited edition + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 26 + + + src/app/pages/collection/pages/collection/collection.page.html + 118 + + Publish Collection + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 30 + + + src/app/pages/collection/pages/collection/collection.page.html + 122 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 36 + + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Cancel Collection + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 132 + + Edit Collection + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 69,70 + + Royalties goes to + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 79,80 + + Starts at + + + Items + + src/app/pages/collection/pages/collection/collection.page.html + 86,87 + + Items + + + Price starts at + + src/app/pages/collection/pages/collection/collection.page.html + 96,97 + + Price starts at + + + Sale in progress + + src/app/pages/collection/pages/collection/collection.page.html + 104,105 + + Sale in progress + + + remaining + + src/app/pages/collection/pages/collection/collection.page.html + 106,107 + + + src/app/pages/nft/pages/nft/nft.page.html + 86,87 + + remaining + + + Find item + + src/app/pages/collection/pages/collection/collection.page.html + 156 + + + src/app/pages/member/pages/nfts/nfts.page.html + 12 + + Find item + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 166,167 + + + src/app/pages/nft/pages/new/new.page.html + 2,3 + + Create NFT + + + Recent + + src/app/pages/collection/pages/collection/collection.page.html + 192 + + + src/app/pages/collection/pages/collection/collection.page.html + 209 + + + src/app/pages/discover/pages/awards/awards.page.html + 20 + + + src/app/pages/discover/pages/awards/awards.page.html + 31 + + + src/app/pages/discover/pages/collections/collections.page.html + 40 + + + src/app/pages/discover/pages/collections/collections.page.html + 51 + + + src/app/pages/discover/pages/members/members.page.html + 31 + + + src/app/pages/discover/pages/members/members.page.html + 42 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 20 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 31 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 20 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 33 + + + src/app/pages/market/pages/collections/collections.page.html + 154 + + + src/app/pages/market/pages/collections/collections.page.html + 171 + + + src/app/pages/market/pages/nfts/nfts.page.html + 42 + + + src/app/pages/market/pages/nfts/nfts.page.html + 59 + + Recent + + + Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 193 + + + src/app/pages/market/pages/collections/collections.page.html + 155 + + + src/app/pages/market/pages/nfts/nfts.page.html + 43 + + + src/app/pages/market/pages/nfts/nfts.page.html + 60 + + Low to High + + + High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 194 + + + src/app/pages/market/pages/collections/collections.page.html + 156 + + + src/app/pages/market/pages/nfts/nfts.page.html + 44 + + + src/app/pages/market/pages/nfts/nfts.page.html + 61 + + High to Low + + + Sort by + + src/app/pages/collection/pages/collection/collection.page.html + 199 + + + src/app/pages/discover/pages/awards/awards.page.html + 18 + + + src/app/pages/discover/pages/awards/awards.page.html + 24,25 + + + src/app/pages/discover/pages/collections/collections.page.html + 37,38 + + + src/app/pages/discover/pages/collections/collections.page.html + 44,45 + + + src/app/pages/discover/pages/members/members.page.html + 29 + + + src/app/pages/discover/pages/members/members.page.html + 35,36 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 18 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 24,25 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 18 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 24,25 + + + src/app/pages/market/pages/collections/collections.page.html + 152 + + + src/app/pages/market/pages/collections/collections.page.html + 161 + + + src/app/pages/market/pages/nfts/nfts.page.html + 40 + + + src/app/pages/market/pages/nfts/nfts.page.html + 49 + + Sort by + + + Price: Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 210 + + + src/app/pages/market/pages/collections/collections.page.html + 172 + + Price: Low to High + + + Price: High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 211 + + + src/app/pages/market/pages/collections/collections.page.html + 173 + + Price: High to Low + + + No NFTs + + src/app/pages/collection/pages/collection/collection.page.html + 233 + + + src/app/pages/market/pages/nfts/nfts.page.html + 84 + + + src/app/pages/member/pages/nfts/nfts.page.html + 32 + + + src/app/pages/nft/pages/nft/nft.page.html + 375 + + No NFTs + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2,3 + + Create new collection + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3,5 + + Edit collection + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18,19 + + Collection info + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20,21 + + Name and description will be included on the Collection. + + + Name + + src/app/pages/collection/pages/upsert/upsert.page.html + 30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 70,71 + + + src/app/pages/nft/pages/new/single/single.page.html + 26 + + Name + + + Description + + src/app/pages/collection/pages/upsert/upsert.page.html + 40,41 + + + src/app/pages/nft/pages/new/single/single.page.html + 36,37 + + Description + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 53,54 + + + src/app/pages/nft/pages/new/single/single.page.html + 49,50 + + Sales info + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 55,56 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 118 + + Royalty + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 120 + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 131,132 + + Royalties - Percentage fee + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 141,142 + + Example: 10 % , 20 % , etc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 150 + + Royalties goes to a different space + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 158,159 + + Royalties goes to a different space + + + Links + + src/app/pages/collection/pages/upsert/upsert.page.html + 181 + + Links + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 182,183 + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 187,188 + + Invalid URL. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 213,214 + + Link to your Twitter account + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 226,227 + + Invalid Discord username. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 233,234 + + Link to your Discord account + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 248,249 + + Discounts + + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + src/app/pages/collection/pages/upsert/upsert.page.html + 250,251 + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 298 + + Discount + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 311 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + Discount Amount + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 350,351 + + Add discount level + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 365,366 + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 383,384 + + Collection Type + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 385,386 + + Each type has different characteristics. This cannot be changed after creation. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 417 + + + src/app/pages/space/pages/upsert/upsert.page.html + 192 + + Banner + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 443 + + Banner is required. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + Placeholder + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 478 + + Placeholder is required. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 488,489 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 501,502 + + + src/app/pages/market/pages/collections/collections.page.html + 132,133 + + + src/app/pages/market/pages/collections/collections.page.html + 137,138 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 116,117 + + Category + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 490,491 + + Category is used when filtering content. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 494,495 + + Category. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 519,520 + + Collection Setup + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 521,522 + + Who has access to a given collection. + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 537,538 + + Everyone has access to this collection. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 547,548 + + Only Space Guardians can access. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 558,559 + + Only Space Members can access. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 569,570 + + Only Space Members with badge can access. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 585,586 + + Collection Options + + + Limited Edition + + src/app/pages/collection/pages/upsert/upsert.page.html + 590 + + Limited Edition + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 606 + + One NFT per Member Only + + + Select Collections + + src/app/pages/collection/pages/upsert/upsert.page.html + 629,630 + + Select Collections + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 677,678 + + Create collection + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 690,691 + + Save collection + + + Member seems to log out during the file upload request. + + src/app/pages/collection/pages/upsert/upsert.page.ts + 317 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 195 + + + src/app/pages/nft/pages/new/single/single.page.ts + 154 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 107 + + Member seems to log out during the file upload request. + + + My Overview + + src/app/pages/dashboard/dashboard.page.html + 2,3 + + My Overview + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 6,7 + + Pending Membership Requests + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 14,15 + + Your spaces + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 23 + + No Spaces yet + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 25,26 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 36,37 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 48,49 + + Active proposals + + + Oldest + + src/app/pages/discover/pages/awards/awards.page.html + 21 + + + src/app/pages/discover/pages/awards/awards.page.html + 32 + + + src/app/pages/discover/pages/collections/collections.page.html + 41 + + + src/app/pages/discover/pages/collections/collections.page.html + 52 + + + src/app/pages/discover/pages/members/members.page.html + 32 + + + src/app/pages/discover/pages/members/members.page.html + 43 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 21 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 32 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 21 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 34 + + Oldest + + + No Awards + + src/app/pages/discover/pages/awards/awards.page.html + 54 + + + src/app/pages/member/pages/awards/awards.page.html + 19 + + + src/app/pages/space/pages/awards/awards.page.html + 35 + + No Awards + + + collections + + src/app/pages/discover/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 185,186 + + collections + + + No Collections + + src/app/pages/discover/pages/collections/collections.page.html + 75 + + + src/app/pages/space/pages/collections/collections.page.html + 38 + + No Collections + + + Discover Soonaverse + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Discover Soonaverse + + + Enter the first few letters to search... + + src/app/pages/discover/pages/discover/discover.page.html + 7 + + Enter the first few letters to search... + + + Spaces + + src/app/pages/discover/pages/discover/discover.page.ts + 21 + + + src/app/pages/member/pages/member/member.page.ts + 29 + + Spaces + + + Collections + + src/app/pages/discover/pages/discover/discover.page.ts + 22 + + + src/app/pages/market/pages/market/market.page.ts + 23 + + + src/app/pages/space/pages/space/space.page.ts + 31 + + Collections + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 24 + + + src/app/pages/space/pages/space/space.page.ts + 32 + + Proposals + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 25 + + + src/app/pages/space/pages/space/space.page.ts + 34 + + Members + + + Include connections + + src/app/pages/discover/pages/members/members.page.html + 23,24 + + + src/app/pages/member/pages/activity/activity.page.html + 28,29 + + + src/app/pages/member/pages/spaces/member-spaces.component.html + 5,6 + + Include connections + + + (Select some space) + + src/app/pages/discover/pages/members/members.page.html + 24 + + + src/app/pages/member/pages/activity/activity.page.html + 29 + + (Select some space) + + + No Members + + src/app/pages/discover/pages/members/members.page.html + 66 + + + src/app/pages/space/pages/members/members.page.html + 58 + + No Members + + + proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 43,44 + + proposals + + + No Proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 55 + + + src/app/pages/space/pages/proposals/proposals.page.html + 35 + + No Proposals + + + No Spaces + + src/app/pages/discover/pages/spaces/spaces.page.html + 56 + + No Spaces + + + Open + + src/app/pages/discover/pages/spaces/spaces.page.ts + 29 + + Open + + + Welcome to The Soonaverse + + src/app/pages/home/home.page.html + 5,6 + + Welcome to The Soonaverse + + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + src/app/pages/home/home.page.html + 8,9 + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + + Join Us + + src/app/pages/home/home.page.html + 19,20 + + Join Us + + + Marketplace + + src/app/pages/home/home.page.html + 31 + + Marketplace + + + See Docs + + src/app/pages/home/home.page.html + 43,44 + + See Docs + + + Get started with the Soonaverse + + src/app/pages/home/home.page.html + 52,53 + + Get started with the Soonaverse + + + Not sure where to start? Find featured spaces and NFT Collections below. + + src/app/pages/home/home.page.html + 54 + + Not sure where to start? Find featured spaces and NFT Collections below. + + + Trending Collections + + src/app/pages/home/home.page.html + 60,61 + + Trending Collections + + + Go to Marketplace + + src/app/pages/home/home.page.html + 70 + + Go to Marketplace + + + Discover more + + src/app/pages/home/home.page.html + 86 + + + src/app/pages/home/home.page.html + 102 + + + src/app/pages/home/home.page.html + 122 + + Discover more + + + Popular spaces + + src/app/pages/home/home.page.html + 92,93 + + Popular spaces + + + Creating your community is easy as 1-2-3 + + src/app/pages/home/home.page.html + 130,131 + + Creating your community is easy as 1-2-3 + + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + src/app/pages/home/home.page.html + 132,133 + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + + StepArticle image + + src/app/pages/home/home.page.html + 143,144 + + StepArticle image + + + Voting is essential and it needs to be on-chain and FREE. + + src/app/pages/home/home.page.html + 162 + + Voting is essential and it needs to be on-chain and FREE. + + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + src/app/pages/home/home.page.html + 165,167 + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + + Go there now + + src/app/pages/home/home.page.html + 177 + + Go there now + + + Want to learn more about SoonLabs? + + src/app/pages/home/home.page.html + 202,203 + + Want to learn more about SoonLabs? + + + Visit YouTube + + src/app/pages/home/home.page.html + 213 + + Visit YouTube + + + Who’s using the Soonaverse? + + src/app/pages/home/home.page.html + 222,224 + + Who’s using the Soonaverse? + + + Investors + + src/app/pages/home/home.page.html + 275,276 + + Investors + + + Privacy + + src/app/pages/home/home.page.html + 285,286 + + Privacy + + + Terms + + src/app/pages/home/home.page.html + 295,296 + + Terms + + + Powered by SoonLabs + + src/app/pages/home/home.page.html + 306,307 + + + src/app/pages/home/home.page.html + 318,319 + + Powered by SoonLabs + + + Create your community + + src/app/pages/home/home.page.ts + 33,31 + + Create your community + + + Feeless, secure, on-chain voting, and “one click” creation tools. + + src/app/pages/home/home.page.ts + 34 + + Feeless, secure, on-chain voting, and “one click” creation tools. + + + Build reputation and rewards + + src/app/pages/home/home.page.ts + 38,36 + + Build reputation and rewards + + + Create incentives and build reputation, trust and community engagement. + + src/app/pages/home/home.page.ts + 39 + + Create incentives and build reputation, trust and community engagement. + + + Manage, Maintain, Grow + + src/app/pages/home/home.page.ts + 43,41 + + Manage, Maintain, Grow + + + Governance, voting, for both public and private communities. + + src/app/pages/home/home.page.ts + 44 + + Governance, voting, for both public and private communities. + + + NFTs + + src/app/pages/market/pages/collections/collections.page.html + 12,13 + + + src/app/pages/market/pages/nfts/nfts.page.html + 13,14 + + + src/app/pages/member/pages/member/member.page.ts + 30 + + NFTs + + + Select Access type + + src/app/pages/market/pages/collections/collections.page.html + 20,21 + + Select Access type + + + All accesses + + src/app/pages/market/pages/collections/collections.page.html + 25,26 + + + src/app/pages/market/pages/collections/collections.page.html + 32,33 + + + src/app/pages/market/pages/collections/collections.page.html + 111 + + All accesses + + + Open sale + + src/app/pages/market/pages/collections/collections.page.html + 38,39 + + + src/app/pages/market/pages/collections/collections.page.html + 45,46 + + + src/app/pages/market/pages/collections/collections.page.html + 112 + + Open sale + + + Space members only + + src/app/pages/market/pages/collections/collections.page.html + 51,52 + + + src/app/pages/market/pages/collections/collections.page.html + 58,59 + + + src/app/pages/market/pages/collections/collections.page.html + 113 + + Space members only + + + Space guardians only + + src/app/pages/market/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 71,72 + + + src/app/pages/market/pages/collections/collections.page.html + 114 + + Space guardians only + + + Space members with badge only + + src/app/pages/market/pages/collections/collections.page.html + 77,78 + + + src/app/pages/market/pages/collections/collections.page.html + 84,85 + + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Space members with badge only + + + At least one NFT from collections + + src/app/pages/market/pages/collections/collections.page.html + 90,91 + + + src/app/pages/market/pages/collections/collections.page.html + 97,98 + + + src/app/pages/market/pages/collections/collections.page.html + 116 + + At least one NFT from collections + + + No collections + + src/app/pages/market/pages/collections/collections.page.html + 196 + + No collections + + + Marketplace + + src/app/pages/market/pages/market/market.page.html + 2,4 + + Marketplace + + + Spaces, awards, proposals or members... + + src/app/pages/market/pages/market/market.page.html + 7 + + Spaces, awards, proposals or members... + + + NFT's + + src/app/pages/market/pages/market/market.page.ts + 24 + + NFT's + + + On Auction + + src/app/pages/market/pages/nfts/nfts.page.ts + 40,37 + + On Auction + + + Owned + + src/app/pages/market/pages/nfts/nfts.page.ts + 41 + + + src/app/pages/nft/pages/nft/nft.page.html + 6,7 + + Owned + + + View space + + src/app/pages/member/pages/activity/activity.page.html + 20,21 + + View space + + + Awards Completed + + src/app/pages/member/pages/activity/activity.page.html + 37 + + Awards Completed + + + Total Reputation + + src/app/pages/member/pages/activity/activity.page.html + 39 + + Total Reputation + + + Earned badges + + src/app/pages/member/pages/activity/activity.page.html + 47 + + Earned badges + + + More + + src/app/pages/member/pages/activity/activity.page.html + 51,52 + + More + + + Reputation + + src/app/pages/member/pages/activity/activity.page.html + 72,73 + + Reputation + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 6,7 + + Pending + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + Issued + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 21,22 + + Discover Awards + + + No Badges yet + + src/app/pages/member/pages/badges/badges.page.html + 19,20 + + No Badges yet + + + Discover Badges + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Discover Badges + + + My profile + + src/app/pages/member/pages/member/member.page.html + 9 + + My profile + + + Profile + + src/app/pages/member/pages/member/member.page.html + 10 + + Profile + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 15,16 + + Profile info + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 26 + + Activity + + + Badges + + src/app/pages/member/pages/member/member.page.ts + 28 + + Badges + + + (Join space with alliance) + + src/app/pages/member/pages/spaces/member-spaces.component.html + 6 + + (Join space with alliance) + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 44,45 + + Some files have not been uploaded + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 48,49 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 57 + + Uploaded CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 69,70 + + Filename + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 92,93 + + Error + + + Select collection + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 123,124 + + + src/app/pages/nft/pages/new/single/single.page.html + 349,350 + + Select collection + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136,137 + + Upload existing CSV + + + Upload back once you generate bellow + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138,139 + + Upload back once you generate bellow + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 166 + + You have to upload images first. + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 191,192 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Single + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Multiple + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14,15 + + NFT info + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16,17 + + Name and description will be included on the NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 21,22 + + Name is required. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 32,33 + + Description is required. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 51,52 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + + Properties + + src/app/pages/nft/pages/new/single/single.page.html + 111,112 + + Properties + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 113,114 + + Properties show up underneath your item. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 120,121 + + Property name (E.g. Character) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 121,122 + + Value (E.g. Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 133,134 + + + src/app/pages/nft/pages/new/single/single.page.html + 166,168 + + + src/app/pages/nft/pages/new/single/single.page.html + 173,174 + + Property name + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 144 + + + src/app/pages/nft/pages/new/single/single.page.html + 178,180 + + + src/app/pages/nft/pages/new/single/single.page.html + 186 + + + src/app/pages/nft/pages/new/single/single.page.html + 236 + + + src/app/pages/nft/pages/new/single/single.page.html + 270,272 + + + src/app/pages/nft/pages/new/single/single.page.html + 276 + + Value + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 159 + + Property + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 196,197 + + Add property + + + Stats + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Stats + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 205,206 + + Stats show up underneath your item. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 212,213 + + Stats name (E.g. Stamina) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 213,214 + + Value (E.g. 10, 1/10 , etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 225,226 + + + src/app/pages/nft/pages/new/single/single.page.html + 258,260 + + + src/app/pages/nft/pages/new/single/single.page.html + 265,266 + + Stat name + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 251 + + Stat + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287,288 + + Add stat + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 299,300 + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 324 + + Media is required + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 338,339 + + Select one of your collections to display this NFT. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 371,372 + + Create NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 381,382 + + Preview NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 142 + + File name is not valid + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 4,5 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 248,249 + + Check out nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 58 + + Current highest bid + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 94 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 102 + + Sale hasn't started yet + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 110 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 118 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 123,124 + + Sell NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 124,125 + + Change Fixed Price + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 125,126 + + Change Auction + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + Place bid + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 138 + + Buy now + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 151,152 + + Current Bids + + + My Bids + + src/app/pages/nft/pages/nft/nft.page.html + 155,156 + + My Bids + + + My Transactions + + src/app/pages/nft/pages/nft/nft.page.html + 159,160 + + My Transactions + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 168,169 + + Member + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 169,170 + + Bidded on + + + Date + + src/app/pages/nft/pages/nft/nft.page.html + 202,203 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 8,9 + + Date + + + Type + + src/app/pages/nft/pages/nft/nft.page.html + 203,204 + + Type + + + On-Chain Record + + src/app/pages/nft/pages/nft/nft.page.html + 276,277 + + On-Chain Record + + + Preparing... + + src/app/pages/nft/pages/nft/nft.page.html + 277,278 + + Preparing... + + + View + + src/app/pages/nft/pages/nft/nft.page.html + 280,281 + + + src/app/pages/nft/pages/nft/nft.page.html + 308,309 + + + src/app/pages/nft/pages/nft/nft.page.html + 315,316 + + View + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 285,286 + + View all of the transaction details of this NFT on the Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 340,341 + + About the collection + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 343,344 + + Show + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 344 + + collection + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 353,355 + + by + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2,4 + + New Proposal + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17,18 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 5,6 + + Proposal info + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19,20 + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 35,36 + + Start Date is required. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 45 + + Start + + + Commencing milestone. + + src/app/pages/proposal/pages/new/new.page.html + 69,70 + + Commencing milestone. + + + Commencing milestone + + src/app/pages/proposal/pages/new/new.page.html + 76,77 + + Commencing milestone + + + Start milestone. + + src/app/pages/proposal/pages/new/new.page.html + 83,84 + + Start milestone. + + + Start milestone + + src/app/pages/proposal/pages/new/new.page.html + 90,91 + + Start milestone + + + End milestone. + + src/app/pages/proposal/pages/new/new.page.html + 97,98 + + End milestone. + + + End milestone + + src/app/pages/proposal/pages/new/new.page.html + 104,105 + + End milestone + + + Proposal description is required. + + src/app/pages/proposal/pages/new/new.page.html + 112,113 + + Proposal description is required. + + + Proposal description + + src/app/pages/proposal/pages/new/new.page.html + 117,118 + + Proposal description + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 127,128 + + Question Info + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 129,130 + + Title and description will only be displayed for this question. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 136,137 + + Question Title is required. + + + Question Title + + src/app/pages/proposal/pages/new/new.page.html + 140,141 + + Question Title + + + Question description + + src/app/pages/proposal/pages/new/new.page.html + 152,153 + + Question description + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 178,179 + + Text and description for each individual answer. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 183,184 + + Answer Text is required. + + + Answer Text + + src/app/pages/proposal/pages/new/new.page.html + 187,188 + + Answer Text + + + Answer description + + src/app/pages/proposal/pages/new/new.page.html + 198,199 + + Answer description + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 233,234 + + Add Choice + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 244,245 + + This is the space that will list the proposal. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 292,293 + + Proposal Setup + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 294,295 + + Defines who has access to the proposal and what is the voting method. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 299 + + Target Participants + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 306,307 + + All Guardians + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 312,313 + + Only guardians can vote on this proposal + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 316,317 + + All Members + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 322,323 + + All members can vote on this proposal + + + IOTA Token Holders + + src/app/pages/proposal/pages/new/new.page.html + 327,328 + + IOTA Token Holders + + + All IOTA token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 333,334 + + All IOTA token holders can vote. + + + Voting Type + + src/app/pages/proposal/pages/new/new.page.html + 341 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 55 + + Voting Type + + + Member - One Vote + + src/app/pages/proposal/pages/new/new.page.html + 348,349 + + Member - One Vote + + + Each member of the space gets one vote + + src/app/pages/proposal/pages/new/new.page.html + 354,355 + + Each member of the space gets one vote + + + XP Reputation - Space + + src/app/pages/proposal/pages/new/new.page.html + 362,363 + + XP Reputation - Space + + + Votes are weighted based on total amount of XP a member has in the space + + src/app/pages/proposal/pages/new/new.page.html + 368,369 + + Votes are weighted based on total amount of XP a member has in the space + + + XP Reputation - Space + Connection + + src/app/pages/proposal/pages/new/new.page.html + 378,379 + + XP Reputation - Space + Connection + + + Votes are weighted based on total amount of XP a member has in the space & connections + + src/app/pages/proposal/pages/new/new.page.html + 384,385 + + Votes are weighted based on total amount of XP a member has in the space & connections + + + XP Reputation - Selected Badges + + src/app/pages/proposal/pages/new/new.page.html + 394,395 + + XP Reputation - Selected Badges + + + Votes are weighted based on total amount of XP a member has for selected badges + + src/app/pages/proposal/pages/new/new.page.html + 400,401 + + Votes are weighted based on total amount of XP a member has for selected badges + + + Reputation Options + + src/app/pages/proposal/pages/new/new.page.html + 412,413 + + Reputation Options + + + Set Minimum Weight + + src/app/pages/proposal/pages/new/new.page.html + 423,424 + + Set Minimum Weight + + + Select Badge + + src/app/pages/proposal/pages/new/new.page.html + 438,439 + + Select Badge + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 465,466 + + Create Proposal + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 322 + + Choice + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + badge + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 2,3 + + Final Results + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 58,59 + + Proposal Description + + + Voted + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 3,4 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 38 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 129 + + Voted + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 4,5 + + Vote Now + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 5 + + Voting starts + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 9 + + You are not part of the vote + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 12 + + In order to vote, you must be part of the space before proposal was created. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 18 + + Log in to vote + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 21 + + In order to vote, you must login first. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 27 + + Pending Guardian Approval + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 30 + + This proposal has not been approved by any Guardian yet. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 52 + + Weight + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 37 + + Pending Vote + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 124 + + joined soonaverse on + + + Voter + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 7,8 + + Voter + + + Option + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 9,10 + + Option + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 26 + + Approve + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 28 + + Decline + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 34,35 + + Current Milestone + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 39 + + Commence Date + + + Start Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 45 + + Start Date + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 56 + + Voting Type of this proposal. + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 60 + + Total Weight + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 61 + + Total weight within this proposal for all participants. + + + Export to JSON + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 65,67 + + Export to JSON + + + Cast your vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 50,51 + + Cast your vote + + + Open Firefly to Vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 53 + + Open Firefly to Vote + + + Voting instructions + + src/app/pages/proposal/pages/proposal/proposal.page.html + 55 + + Voting instructions + + + You will select your options and execute the vote within Firefly. + + src/app/pages/proposal/pages/proposal/proposal.page.html + 57,58 + + You will select your options and execute the vote within Firefly. + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 64,65 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 117,118 + + Check out proposal + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 70,71 + + Current Results + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 91 + + Selected Badges + + + New + + src/app/pages/space/pages/awards/awards.page.html + 23,24 + + + src/app/pages/space/pages/collections/collections.page.html + 25,26 + + + src/app/pages/space/pages/proposals/proposals.page.html + 23,24 + + New + + + award + + src/app/pages/space/pages/awards/awards.page.html + 24 + + award + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 24 + + + src/app/pages/space/pages/members/members.page.html + 24 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 24 + + Active + + + Active + + src/app/pages/space/pages/members/members.page.html + 9 + + Active + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 18 + + Blocked + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 28 + + Blocked + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 35 + + + src/app/pages/space/pages/members/members.page.html + 43,44 + + Find Member + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 63 + + joined space on + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 78,79 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 81,82 + + Make Guardian + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 84,86 + + Accept Member + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 89,91 + + Block Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 91,93 + + Unblock Member + + + Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 3,5 + + Active Proposals + + + No Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 11 + + No Active Proposals + + + Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 24,26 + + Active Awards + + + No Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 32 + + No Active Awards + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 24 + + proposal + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 21,22 + + Check out space + + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 53,54 + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + + Show All + + src/app/pages/space/pages/space/space-about/space-about.component.html + 59,60 + + Show All + + + Connected spaces that you recognize + + src/app/pages/space/pages/space/space-about/space-about.component.html + 65,66 + + Connected spaces that you recognize + + + New connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 76,77 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 88 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 117 + + New connection + + + connections + + src/app/pages/space/pages/space/space-about/space-about.component.html + 104 + + connections + + + Close + + src/app/pages/space/pages/space/space-about/space-about.component.html + 120 + + Close + + + New + + src/app/pages/space/pages/space/space-about/space-about.component.html + 132 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 169 + + New + + + Edit + + src/app/pages/space/pages/space/space-about/space-about.component.html + 133 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 170 + + Edit + + + connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 134,135 + + connection + + + Form a connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 148 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Form a connection + + + Save + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 181 + + Save + + + Terminate alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 159,160 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 190,191 + + Terminate alliance + + + alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 171,172 + + alliance + + + Space's Wallet Address + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201,202 + + Space's Wallet Address + + + Wallet to hold funds for the Space. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 203,204 + + Wallet to hold funds for the Space. + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 252,253 + + Leave Space + + + About space + + src/app/pages/space/pages/space/space.page.html + 5,6 + + About space + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 53 + + + src/app/pages/space/pages/space/space.page.html + 113,114 + + Join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 77 + + + src/app/pages/space/pages/space/space.page.html + 139 + + Edit Space + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2,3 + + Add new space + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3,4 + + Edit space + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17,18 + + Space info + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19,20 + + Title and description will be included on the Space. + + + Space description + + src/app/pages/space/pages/upsert/upsert.page.html + 39,40 + + Space description + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 54,55 + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 100,101 + + Only discord invite code supported (i.e. RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 107,108 + + Type your Discord invite code + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 128,129 + + Space Type + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 130,131 + + Each type has different characteristics. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 139,140 + + Open for anyone to join instantly + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 143,144 + + Requires a member approval + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 163,164 + + Avatar is mandatory + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 236,237 + + Create space + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 249,250 + + Save space + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Upload new to replace existing. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + Your brand is key. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Make it personal. + + + + diff --git a/src/locale/messages.de-DE.xlf b/src/locale/messages.de-DE.xlf new file mode 100644 index 0000000..1e5fa5b --- /dev/null +++ b/src/locale/messages.de-DE.xlf @@ -0,0 +1,13271 @@ + + + + + + Top Members + + src/app/@core/services/filter-storage/filter-storage.service.ts + 97 + + Top-Mitglieder + + + Recent + + src/app/@core/services/filter-storage/filter-storage.service.ts + 98 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 116 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 133 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 147 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 165 + + Zuletzt + + + Oldest + + src/app/@core/services/filter-storage/filter-storage.service.ts + 99 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 117 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 134 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 148 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 166 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 188 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 209 + + Älteste + + + Ending Soon + + src/app/@core/services/filter-storage/filter-storage.service.ts + 115 + + Endet Soon + + + Ending SOON + + src/app/@core/services/filter-storage/filter-storage.service.ts + 164 + + Ending SOON + + + Available Date + + src/app/@core/services/filter-storage/filter-storage.service.ts + 182 + + Verfügbares Datum + + + Recently Created + + src/app/@core/services/filter-storage/filter-storage.service.ts + 183 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 208 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 57 + + Kürzlich erstellt + + + Price: Low to High + + src/app/@core/services/filter-storage/filter-storage.service.ts + 184 + + Preis: aufsteigend + + + Price: High to Low + + src/app/@core/services/filter-storage/filter-storage.service.ts + 185 + + Preis: absteigend + + + Top Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 186 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 206 + + Top gehandelt + + + Recently Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 187 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 207 + + Kürzlich gehandelt + + + Public Vote + + src/app/@core/services/filter-storage/filter-storage.service.ts + 202 + + Öffentlicher Vote + + + Community Rank + + src/app/@core/services/filter-storage/filter-storage.service.ts + 203 + + Community-Rang + + + SOON on Sale + + src/app/@core/services/filter-storage/filter-storage.service.ts + 204 + + SOON on Sale + + + Recently Minted + + src/app/@core/services/filter-storage/filter-storage.service.ts + 205 + + Kürzlich geprägt + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 74 + + Zurück + + + Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products. + + src/app/@core/services/seo/seo.service.ts + 7 + + Soonaverse ist eine Plattform für Community's zur Schaffung und Verwaltung dezentraler autonomer Organisationen (DAOs), NFTs, Projekte, Unternehmen und Märkte auf der gebührenfreien Infrastruktur des IOTA-Netzwerks. Jede Organisation kann liquide Vermögenswerte über unseren Marktplatz, Launchpad und die Token Exchange einführen und handeln. + + + Bill Payment + + src/app/@core/services/transaction/transaction.service.ts + 18 + + Rechnungszahlung + + + Bill (royalty) + + src/app/@core/services/transaction/transaction.service.ts + 20 + + Rechnung (Lizenzgebühr) + + + Credit + + src/app/@core/services/transaction/transaction.service.ts + 26 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 336 + + Kredit + + + Payment + + src/app/@core/services/transaction/transaction.service.ts + 28 + + Zahlung + + + Credit NFT + + src/app/@core/services/transaction/transaction.service.ts + 30 + + Guthaben NFT + + + Mint Collection + + src/app/@core/services/transaction/transaction.service.ts + 32 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 36 + + Kollektion prägen ("mint") + + + Mint Token + + src/app/@core/services/transaction/transaction.service.ts + 34 + + + src/app/pages/space/pages/manage/manage.page.html + 116 + + Präge (Mint) Token + + + Withdraw Asset + + src/app/@core/services/transaction/transaction.service.ts + 36 + + Asset abheben + + + Unlock + + src/app/@core/services/transaction/transaction.service.ts + 38 + + Entsperren + + + Vote + + src/app/@core/services/transaction/transaction.service.ts + 40 + + Vote + + + Order + + src/app/@core/services/transaction/transaction.service.ts + 42 + + Bestellung + + + (Mint Alias) + + src/app/@core/services/transaction/transaction.service.ts + 49 + + (Präge (Mint) Alias) + + + (Mint NFTs) + + src/app/@core/services/transaction/transaction.service.ts + 51 + + (Präge (Mint) NFT's) + + + (Mint Foundry) + + src/app/@core/services/transaction/transaction.service.ts + 53 + + (Prägen (Mint) Foundry) + + + (Send Alias to Guardian) + + src/app/@core/services/transaction/transaction.service.ts + 55 + + (Sende Alias an den Wächter.) + + + (Lock Collection) + + src/app/@core/services/transaction/transaction.service.ts + 57 + + (Sammlung sperren) + + + Discover + + src/app/@shell/ui/header/header.component.html + 76 + + + src/app/components/auth/services/auth.service.ts + 83 + + Entdecken + + + Create new + + src/app/@shell/ui/header/header.component.html + 91 + + Neu erstellen + + + Space + + src/app/@shell/ui/header/header.component.html + 97 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100 + + + src/app/pages/collection/pages/collection/collection.page.html + 110 + + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 206,205 + + + src/app/pages/token/pages/new/summary/summary.component.html + 242,241 + + Raum + + + Proposal + + src/app/@shell/ui/header/header.component.html + 103 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 29 + + Vorschlag + + + Award + + src/app/@shell/ui/header/header.component.html + 106 + + + src/app/pages/award/pages/award/award.page.html + 29 + + + src/app/pages/award/pages/award/award.page.ts + 100 + + Auszeichnung + + + Collection + + src/app/@shell/ui/header/header.component.html + 110 + + + src/app/@shell/ui/header/header.component.html + 129 + + + src/app/pages/collection/pages/collection/collection.page.html + 37 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136 + + + src/app/pages/nft/pages/new/single/single.page.html + 346 + + + src/app/pages/space/pages/collections/collections.page.html + 49 + + Kollektion + + + Token + + src/app/@shell/ui/header/header.component.html + 113 + + + src/app/@shell/ui/header/header.component.html + 132 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 321 + + + src/app/pages/token/pages/token/token.page.html + 29 + + + src/app/pages/token/pages/token/token.page.ts + 99 + + + src/app/pages/token/pages/trade/trade.page.ts + 274 + + Token + + + To unlock more features you have to stake SOON token. + + src/app/@shell/ui/header/header.component.html + 124,126 + + Um mehr Funktionen freizuschalten, musst du SOON-Token staken. + + + VIP LEVEL + + src/app/@shell/ui/header/header.component.html + 197,198 + + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 37,38 + + + src/app/pages/member/pages/activity/activity.page.html + 146,147 + + VIP LEVEL + + + None. + + src/app/@shell/ui/header/header.component.html + 232 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 77 + + Kein Ergebnis. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 240 + + + src/app/components/auth/services/auth.service.ts + 551 + + Mein Profil + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 265,266 + + Der Kaufprozess wurde nicht abgeschlossen + + + You have + + src/app/@shell/ui/header/header.component.html + 270 + + Du musst + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 272 + + deine Transaktion abschließen + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 282,283 + + Zur Transaktionsabwicklung + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 334 + + Du hast ein NFT gewonnen + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 335 + + Du bist stolzer Besitzer eines neuen NFT. Herzlichen Glückwunsch! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 342 + + Du wurdest überboten! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 343 + + Dein Gebot auf + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 344 + + wurde überboten. Versuche es noch einmal! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 351 + + gerade angeboten + + + for + + src/app/@shell/ui/header/header.component.ts + 352 + + + src/app/components/timeline/timeline.component.html + 171 + + für + + + Your + + src/app/@shell/ui/header/header.component.ts + 353 + + Dein + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 354 + + hat ein neues Gebot erhalten für + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 377 + + Nicht unterstützt + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 378 + + Diese Benachrichtigung wird in deiner Sprache noch nicht unterstützt + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27,28 + + Raum + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 38,39 + + Vorschlag + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 49,50 + + Auszeichnung + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 60,61 + + Kollektion + + + Token + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 70,71 + + Token + + + Stake more SOON to create tokens and collections. + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 81,84 + + Stake mehr SOON , um Token und Sammlungen zu erstellen. + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 57,58 + + Mit deinem Metamask Wallet verbinden + + + Connect via TanglePay + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 73 + + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 47 + + Mit TanglePay verbinden + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 97 + + Abmelden + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 103 + + Unterstützt von + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8 + + Deine Suche erbrachte leider keine Treffer + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 9,11 + + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Entdecke Soonaverse + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 19 + + Netzwerkstatus + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 30,31 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 84,85 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 140,141 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 197,198 + + Netzwerkstatus + + + Operational + + src/app/@shell/ui/sider/network-status/network-status.component.html + 36 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 90 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 146 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 203 + + Operativ + + + Degraded Performance + + src/app/@shell/ui/sider/network-status/network-status.component.html + 43 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 97 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 153 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 210 + + Verminderte Leistung + + + Down + + src/app/@shell/ui/sider/network-status/network-status.component.html + 50 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 104 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 160 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 217 + + Außer Betrieb + + + Last milestone + + src/app/@shell/ui/sider/network-status/network-status.component.html + 57,58 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 111,112 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 170,171 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 224,225 + + Letzter Meilenstein + + + Devnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 78,79 + + + src/app/components/network/components/select-network/select-network.component.html + 61,63 + + Devnet + + + Shimmer Mainnet Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 132,133 + + Shimmer Mainnet Coming SOON + + + Testnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 191,192 + + + src/app/components/network/components/select-network/select-network.component.html + 33,35 + + Testnet + + + Assembly + + src/app/@shell/ui/sider/network-status/network-status.component.html + 237 + + Assembly + + + Assembly Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 244,245 + + Assembly Coming SOON + + + Shimmer EVM Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 266,267 + + Shimmer EVM Coming SOON + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 48 + + Dokumentation ansehen + + + Show more + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 47 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 27 + + + src/app/components/timeline/timeline.component.html + 304 + + Mehr anzeigen + + + Show less + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 48 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 28 + + + src/app/components/timeline/timeline.component.html + 303 + + Weniger anzeigen + + + Search here... + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 50 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 30 + + Suche hier... + + + Reset + + + src/app/components/algolia/algolia-clear/algolia-clear.component.html + 5,7 + + Neustart + + + + Search + + src/app/components/algolia/search/search.component.html + 20,19 + + + src/app/components/collection/components/select-collection/select-collection.component.html + 95,94 + + + src/app/components/space/components/select-space/select-space.component.html + 95,94 + + Suchen + + + Start typing... + + src/app/components/algolia/search/search.component.html + 36 + + Tippe etwas... + + + Open + + src/app/components/algolia/services/algolia.service.ts + 32 + + Offen + + + Guardians of Space Only + + src/app/components/algolia/services/algolia.service.ts + 34 + + Titel erforderlich: Wächter + + + Members of Space Only + + src/app/components/algolia/services/algolia.service.ts + 36 + + Nur für Gruppenmitglieder + + + Members With Badge Only + + src/app/components/algolia/services/algolia.service.ts + 38 + + Nur Raummitglieder mit Abzeichen + + + Members With NFT only + + src/app/components/algolia/services/algolia.service.ts + 40 + + Nur Raummitglieder mit Abzeichen + + + Unavailable for sale + + src/app/components/algolia/services/algolia.service.ts + 53 + + Nicht zum Verkauf verfügbar + + + On Auction + + src/app/components/algolia/services/algolia.service.ts + 55 + + Auktion + + + Available + + src/app/components/algolia/services/algolia.service.ts + 57 + + + src/app/components/award/components/award-status/award-status.component.html + 23 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 61 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 162 + + + src/app/pages/space/pages/collections/collections.page.ts + 31 + + + src/app/pages/token/pages/token/token.page.ts + 256 + + Verfügbar + + + On Sale + + src/app/components/algolia/services/algolia.service.ts + 59 + + Im Verkauf + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 19 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23 + + Mit deinem Metamask-Wallet verbinden + + + TanglePay + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 43 + + TanglePay + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 67 + + Stelle sicher, dass ein EVM-kompatibles IOTA-Netzwerk in MetaMask ausgewählt wird. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 69 + + Netzwerk Name: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 70 + + RPC URL: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 71 + + Chain ID: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 89,90 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 120,121 + + Abbrechen + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 8,10 + + Verbinden + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Trennen + + + Staking + + src/app/components/auth/services/auth.service.ts + 90 + + Staking + + + Tokens + + src/app/components/auth/services/auth.service.ts + 97 + + + src/app/pages/discover/pages/awards/awards.page.html + 145,144 + + + src/app/pages/member/pages/member/member.page.ts + 66 + + + src/app/pages/member/pages/tokens/tokens.page.html + 49 + + + src/app/pages/member/pages/tokens/tokens.page.html + 235 + + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 41 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 2 + + Tokens + + + Swap + + src/app/components/auth/services/auth.service.ts + 104 + + Swap + + + Pool + + src/app/components/auth/services/auth.service.ts + 111 + + Pool + + + Marketplace + + src/app/components/auth/services/auth.service.ts + 118 + + Marktplatz + + + My Overview + + src/app/components/auth/services/auth.service.ts + 125 + + + src/app/pages/dashboard/dashboard.page.html + 2 + + Meine Übersicht + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 232 + + Transaktion kann nicht unterschrieben werden. Bitte lade die Seite erneut. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 278 + + Du musst zuerst dein MetaMask entsperren! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 290 + + Du musst den Zugriff aktivieren, um deine Accountadresse lesen zu können. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 298 + + Stelle sicher, dass du die Adresse in MetaMask ausgewählt hast! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 307 + + + src/app/components/auth/services/auth.service.ts + 378 + + Nonce kann nicht authentifiziert werden! + + + Unable to connect your TanglePay wallet. + + src/app/components/auth/services/auth.service.ts + 343 + + + src/app/components/auth/services/auth.service.ts + 482 + + Die TanglePay-Wallet konnte nicht verbunden werden. + + + Unable to detect address in TanglePay! + + src/app/components/auth/services/auth.service.ts + 349 + + Adresse kann in TanglePay nicht erkannt werden! + + + You have to open Soonaverse in wallet app. + + src/app/components/auth/services/auth.service.ts + 443 + + Du musst Soonaverse in der Wallet-App öffnen. + + + Failed to initialize wallet, try to reload page. + + src/app/components/auth/services/auth.service.ts + 445 + + Fehler beim Initialisieren der Wallet, Seite neu laden. + + + Give badges + + src/app/components/award/components/award-awards/award-awards.component.html + 11 + + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 16 + + Abzeichen vergeben + + + Once issued, this badge is sent to the rewarded participant's wallet. + + src/app/components/award/components/award-awards/award-awards.component.html + 36 + + Sobald dieses Abzeichen ausgestellt ist, wird es an die Wallet der zu belohnenden Teilnehmern gesendet. + + + Upload CSV + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 31,32 + + CSV-Datei hochladen + + + Download CSV template + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 34 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 85 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 10 + + CSV-Vorlage herunterladen + + + You can create badge airdrops for any user. You can upload CSV with users addresses and they will be properly reward. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 42,44 + + Du kannst Abzeichen Airdrops für jeden Benutzer erstellen. Lade eine CSV mit den Adressen der Benutzer hoch und sie werden korrekt belohnt. + + + If you don’t know how to prepare CSV file, you can download our template made for you. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 50,51 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 101,102 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 25,26 + + Wenn du nicht weißt, wie du eine CSV-Datei vorbereitest, kannst du unsere Vorlage herunterladen. + + + Confirm schedule + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 77 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 128 + + Zeitplan bestätigen + + + Address + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 97 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 21 + + Adresse + + + Action + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 98 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 288 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 153 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 22 + + + src/app/pages/token/pages/trade/trade.page.html + 214 + + + src/app/pages/token/pages/trade/trade.page.html + 288 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 24 + + Aktion + + + Badge + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 104 + + + src/app/pages/award/pages/new/new.page.html + 298,297 + + Abzeichen + + + Submitted. + + src/app/components/award/components/award-give-badges/award-give-badges.component.ts + 103 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 137 + + Übermittelt. + + + Fund Award & Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 3 + + Award finanzieren & Mint ("Prägen") + + + Reward Token + + src/app/components/award/components/award-mint/award-mint.component.html + 21 + + Belohnungs-Token + + + Reward to be funded + + src/app/components/award/components/award-mint/award-mint.component.html + 43 + + Zu finanzierende Belohnung + + + Confirm & Start + + src/app/components/award/components/award-mint/award-mint.component.html + 98,99 + + Bestätige & Start + + + Once you agree with the terms, the generated address will remain active during the whole process. + + src/app/components/award/components/award-mint/award-mint.component.html + 105,107 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 181,183 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 93,95 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 146,148 + + Sobald Sie den Bedingungen zustimmen, bleibt die generierte Adresse während des gesamten Prozesses aktiv. + + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + src/app/components/award/components/award-mint/award-mint.component.html + 120,121 + + Benutze deeplink um den Transfer durchzuführen. Leider gibt es keinen manuellen Eintrag, der von Firefly unterstützt wird. + + + Transaction history + + src/app/components/award/components/award-mint/award-mint.component.html + 159 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 252 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 246 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 134 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 176 + + + src/app/components/space/components/space-claim/space-claim.component.html + 113 + + + src/app/components/space/components/space-claim/space-claim.component.html + 135 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 122 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 144 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 207 + + + src/app/components/token/components/token-bid/token-bid.component.html + 212 + + + src/app/components/token/components/token-bid/token-bid.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 256 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 249 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 254 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 276 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 209 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 269 + + + src/app/components/token/components/token-stake/token-stake.component.html + 319 + + + src/app/components/token/components/token-stake/token-stake.component.html + 341 + + + src/app/components/token/components/token-vote/token-vote.component.html + 271 + + + src/app/components/token/components/token-vote/token-vote.component.html + 293 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 110 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 146 + + Transaktionshistorie + + + Transaction complete. Congratulations. + + src/app/components/award/components/award-mint/award-mint.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 271 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 235 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 277 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 294 + + Transaktion abgeschlossen. Herzlichen Glückwunsch. + + + Finish Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 191,192 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 289,290 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 281,282 + + Prägen (Minting) abgeschlossen + + + Funding info + + src/app/components/award/components/award-mint/award-mint.component.ts + 83 + + Finanzierungsinfo + + + Make transaction + + src/app/components/award/components/award-mint/award-mint.component.ts + 84 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 92 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 87 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 101 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 77 + + Transaktion durchführen + + + Wait for confirmation + + src/app/components/award/components/award-mint/award-mint.component.ts + 85 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 93 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 87 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 109 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 88 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 102 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 78 + + Auf Bestätigung warten + + + Confirmed + + src/app/components/award/components/award-mint/award-mint.component.ts + 86 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 94 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 88 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 110 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 89 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 103 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 79 + + Bestätigt + + + Payment received. + + src/app/components/award/components/award-mint/award-mint.component.ts + 141 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 150 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 196 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 136 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 136 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 145 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 155 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 140 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 159 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 157 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 131 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 224 + + Zahlung erhalten. + + + Confirming transaction. + + src/app/components/award/components/award-mint/award-mint.component.ts + 158 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 167 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 213 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 164 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 189 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 153 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 153 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 162 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 172 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 157 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 176 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 174 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 148 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 241 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 208 + + Transaktion wird bestätigt. + + + Transaction confirmed. + + src/app/components/award/components/award-mint/award-mint.component.ts + 167 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 176 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 222 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 173 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 198 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 162 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 162 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 171 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 181 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 166 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 185 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 183 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 157 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 250 + + Transaktion bestätigt. + + + Invalid amount received. Refunding transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 186 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 203 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 258 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 182 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 190 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 210 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 186 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 204 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 212 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 190 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 270 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 247 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 159 + + Ungültiger Betrag empfangen. Erstattungsvorgang läuft... + + + Invalid transaction.You must gift storage deposit. + + src/app/components/award/components/award-mint/award-mint.component.ts + 209 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 218 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 281 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 206 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 205 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 213 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 225 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 209 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 227 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 227 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 206 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 293 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 262 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 175 + + Ungültige Transaktion erhalten. Es ist erforderlich die "Storage deposit" zu spenden. + + + Invalid payment refunded. + + src/app/components/award/components/award-mint/award-mint.component.ts + 224 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 233 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 296 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 220 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 228 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 241 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 224 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 242 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 243 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 221 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 308 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 279 + + Ungültige Zahlung zurückerstattet. + + + Waiting for transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 300 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 321 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 442 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 290 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 317 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 311 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 316 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 306 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 348 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 327 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 319 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 350 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 336 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 415 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 398 + + Warte auf Transaktion... + + + Pending Funding + + + src/app/components/award/components/award-status/award-status.component.html + 5,6 + + Ausstehende Finanzierung + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 11,12 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 11,12 + + Abgelehnt + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 17 + + + src/app/pages/space/pages/awards/awards.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 32 + + Abgeschlossen + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 570 + + Nur Raummitglieder + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 557 + + Nur Wächter des Raumes + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 29 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 583 + + Nur Raummitglieder mit Abzeichen + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 39 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 595 + + Mindestens ein NFT aus Kollektionen + + + Specific members only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 53 + + Nur bestimmte Mitglieder + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 28 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 95 + + + src/app/components/token/components/token-card/token-card.component.html + 70 + + Beginnt in + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 30 + + + src/app/components/countdown/countdown.component.html + 56 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 109 + + tage + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 33 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 122 + + Beginnt heute + + + Collection is not yet migrated to the decentralized network. + + src/app/components/collection/components/collection-card/collection-card.component.html + 59 + + Die Sammlung wurde noch nicht in das dezentrale Netzwerk migriert. + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 76 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 611 + + Limitierte Edition + + + Floor Price + + src/app/components/collection/components/collection-card/collection-card.component.html + 104 + + + src/app/pages/collection/pages/collection/collection.page.html + 207 + + Aktueller Marktpreis (Floor Price) + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 56 + + Warten auf Freigabe + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 66 + + + src/app/pages/space/pages/awards/awards.page.ts + 33 + + + src/app/pages/space/pages/collections/collections.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 33 + + Abgelehnt + + + Remaining + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 42 + + Verbleibend + + + NFTs + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 49 + + + src/app/pages/market/pages/market/market.page.ts + 13 + + + src/app/pages/market/pages/market/market.page.ts + 34 + + + src/app/pages/member/pages/member/member.page.ts + 67 + + NFTs + + + Mint collection on network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 3 + + Sammlung im Netzwerk prägen (Mint) + + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 43,45 + + Nach der Prägung (Mint) stehen alle NFTs aus dieser Sammlung zum Wechsel in das ausgewählten Netzwerk zur Verfügung. + + + Unsold NFT's + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 60,61 + + Unverkaufte NFTs + + + Decide what should happen with all NFTs that were not sold yet. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 67 + + Entscheide, was mit allen noch nicht verkauften NFTs passieren soll. + + + Keep the same price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 76 + + Den gleichen Preis beibehalten + + + Take Ownership + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 86 + + In Besitz nehmen + + + Set new price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 96 + + Neuen Preis festlegen + + + Burn all unsold + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 103 + + Alle unverkauften Verbrennen + + + Note that the collection ownership will be granted only to your profile. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 130,131 + + Bitte beachten, dass die Ausübung von Eigentumsrechten über Kollektionen Bedingungen unterliegt, die nur auf Ihr Profil übertragen werden dürfen. + + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 141,143 + + Einmal geprägt (minted), kann eine Sammlung nicht bearbeitet werden und eine neues NFT kann dieser Sammlung nicht hinzugefügt werden + + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 150 + + Durch Ankreuzen dieses Kästchens bestätigen Sie, dass alle aktiven Verkäufe der NFTs dieser Sammlung annulliert werden. + + + Confirm & Start minting + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 174,175 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 139,140 + + Bestätige & Beginn Prägung (Minting) + + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 196,198 + + Sobald die Transaktion registriert wurde, werden wir alle laufenden Verkäufe der Kollektion-NFTs abbrechen und alle unverkauften NFTs verbrennen ("burn"). + + + remaining to make the transfer. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 171 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 90 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 132 + + + src/app/components/space/components/space-claim/space-claim.component.html + 78 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 87 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 140 + + + src/app/components/token/components/token-bid/token-bid.component.html + 170 + + + src/app/components/token/components/token-claim/token-claim.component.html + 199 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 194 + + + src/app/components/token/components/token-stake/token-stake.component.html + 279 + + + src/app/components/token/components/token-vote/token-vote.component.html + 209 + + verbleibend, um die Bezahlung durchzuführen. + + + Expired + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 213 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 174 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 93 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 135 + + + src/app/components/space/components/space-claim/space-claim.component.html + 81 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 90 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 143 + + + src/app/components/token/components/token-bid/token-bid.component.html + 173 + + + src/app/components/token/components/token-claim/token-claim.component.html + 202 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 197 + + + src/app/components/token/components/token-stake/token-stake.component.html + 282 + + + src/app/components/token/components/token-vote/token-vote.component.html + 212 + + + src/app/pages/token/services/helper.service.ts + 204 + + Abgelaufen + + + NFT's from this collection are now being migrated. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 284,285 + + Der Transfer dieser NFT-Sammlerstücke ist gerade durchgeführt worden. + + + NFT's in collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 308,309 + + NFTs in der Sammlung + + + Total Storage Fee + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 318 + + Gesamte Speichergebühr + + + (NFTs Storage Fee + Collection Storage Fee) + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 319 + + (Speichergebühr für NFTs + Speichergebühr für Sammlung) + + + Select network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 91 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 86 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 100 + + Netzwerk auswählen + + + Pending + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5,6 + + Ausstehend + + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 4 + + + src/app/pages/nft/pages/new/single/single.page.html + 352 + + Kollektion erforderlich. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 13 + + Kollektion auswählen + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 83 + + Eine Kollektion auswählen + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 114 + + + src/app/components/space/components/select-space/select-space.component.html + 114 + + Keine Treffer für + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 20 + + Alle Kollektionen + + + + + + + src/app/components/confirm-modal/confirm-modal.component.html + 48,50 + + + src/app/components/confirm-modal/confirm-modal.component.html + 51,53 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 246,251 + + + src/app/components/token/components/token-vote/token-vote.component.html + 46,47 + + + src/app/pages/collection/pages/collection/collection.page.html + 130,131 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 55,56 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 71,72 + + + + + Are you sure? + + src/app/components/confirm-modal/confirm-modal.component.ts + 30 + + Sind Sie sicher? + + + Close + + src/app/components/confirm-modal/confirm-modal.component.ts + 33 + + Schließen + + + Confirm + + src/app/components/confirm-modal/confirm-modal.component.ts + 34 + + + src/app/components/token/components/token-bid/token-bid.component.html + 146 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 170 + + + src/app/components/token/components/token-vote/token-vote.component.html + 181 + + Bestätigen + + + Connect wallet + + src/app/components/connect-wallet/connect-wallet.component.html + 7 + + Wallet verbinden + + + d + + src/app/components/countdown/countdown.component.html + 55 + + d + + + h + + src/app/components/countdown/countdown.component.html + 68 + + h + + + hours + + src/app/components/countdown/countdown.component.html + 69 + + Stunden + + + m + + src/app/components/countdown/countdown.component.html + 81 + + m + + + min + + src/app/components/countdown/countdown.component.html + 82 + + Min + + + s + + src/app/components/countdown/countdown.component.html + 94 + + s + + + sec + + src/app/components/countdown/countdown.component.html + 95 + + Sek + + + Ends + + src/app/components/date-tag/date-tag.component.ts + 11 + + Endet + + + Price + + src/app/components/iota-input/iota-input.component.html + 3 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 139 + + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 81 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 19 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 124 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 49 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 75 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 37 + + + src/app/pages/token/pages/trade/trade.page.html + 209 + + + src/app/pages/token/pages/trade/trade.page.html + 283 + + + src/app/pages/token/pages/trade/trade.page.html + 372 + + + src/app/pages/token/pages/trade/trade.page.html + 659 + + + src/app/pages/token/pages/trade/trade.page.html + 846 + + Preis + + + Verified addresses + + src/app/components/member/components/member-about/member-about.component.html + 90 + + Verifizierte Adressen + + + Manage + + src/app/components/member/components/member-about/member-about.component.html + 96 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 297 + + + src/app/pages/space/pages/space/space.page.ts + 53 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 18 + + Verwalten + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 119 + + Zuletzt beigetretene Räume + + + All + + src/app/components/member/components/member-about/member-about.component.html + 124 + + Alle + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 155 + + Keine Beiträge bisher. + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 74 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 22 + + Auszeichnungen + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 14 + + Anzeigename + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19 + + Lege einen Anzeigenamen fest. Dies ändert nicht deinen Nutzernamen. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 26 + + Anzeigename (optional) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 36 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 208 + + + src/app/pages/space/pages/space/space.page.ts + 44 + + Über + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 41 + + Eine kurze Beschreibung von dir, die auf deinem Profil angezeigt wird. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 48 + + Deine Beschreibung (optional) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 57 + + + src/app/pages/space/pages/upsert/upsert.page.html + 166 + + Avatar + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 62 + + Passe deine Soonaverse Identität an. + + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,78 + + Generieren einen kostenlosen Avatar für dein Profilbild. Neue ( superseltene) Avatararten und Avatar-Sammelobjekte & Accessoires, die alle gehandelt werden können, kommen SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 92 + + WOW! Sieht aus, als hättest du den schönsten Avatar von allen. Herzlichen Glückwunsch. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 97 + + + src/app/pages/space/pages/upsert/upsert.page.html + 54 + + Mit anderen vernetzen + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 99 + + + src/app/pages/space/pages/upsert/upsert.page.html + 61 + + Ungültiger Github Nutzername. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 105 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67 + + Gib deinen Github-Account Nutzernamen ein + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 117 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 177 + + + src/app/pages/space/pages/upsert/upsert.page.html + 78 + + Ungültiger Twitter Nutzername. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 123 + + + src/app/pages/space/pages/upsert/upsert.page.html + 84 + + Gib deinen Twitter-Account Nutzernamen ein + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 135 + + Nur folgendes Format wird unterstützt: nutzername#1234. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 141 + + Gib deinen Discord-Account Nutzernamen ein + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 155 + + Einstellungen + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 157,158 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 123,124 + + Änderungen speichern + + + + + + + src/app/components/network/components/select-network/select-network.component.html + 4,6 + + + + + + Shimmer + + src/app/components/network/components/select-network/select-network.component.html + 17 + + + src/app/components/network/components/select-network/select-network.component.html + 28 + + + src/app/components/network/components/selected-network/selected-network.component.html + 11 + + + src/app/pages/award/pages/award/award.page.html + 44 + + + src/app/pages/collection/pages/collection/collection.page.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 575 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 169 + + Shimmer + + + IOTA + + src/app/components/network/components/select-network/select-network.component.html + 45 + + + src/app/components/network/components/select-network/select-network.component.html + 56 + + + src/app/components/network/components/selected-network/selected-network.component.html + 19 + + + src/app/pages/award/pages/award/award.page.html + 52 + + + src/app/pages/collection/pages/collection/collection.page.html + 59 + + + src/app/pages/nft/pages/nft/nft.page.html + 583 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 177 + + IOTA + + + Selected Network + + src/app/components/network/components/selected-network/selected-network.component.html + 4,6 + + Ausgewähltes Netzwerk + + + Shimmer Testnet + + src/app/components/network/components/selected-network/selected-network.component.html + 15 + + + src/app/pages/award/pages/award/award.page.html + 48 + + + src/app/pages/collection/pages/collection/collection.page.html + 55 + + + src/app/pages/nft/pages/nft/nft.page.html + 579 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 173 + + Shimmer Testnet + + + IOTA Devnet + + src/app/components/network/components/selected-network/selected-network.component.html + 23 + + + src/app/pages/award/pages/award/award.page.html + 56 + + + src/app/pages/collection/pages/collection/collection.page.html + 63 + + + src/app/pages/nft/pages/nft/nft.page.html + 587 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 181 + + IOTA Devnet + + + Send + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + Sende + + + to following address: + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + an folgende Adresse: + + + Copied + + src/app/components/network/components/send-funds/send-funds.component.html + 25 + + + src/app/components/share/share.component.html + 27 + + + src/app/components/wallet-address/wallet-address.component.html + 29 + + Kopiert + + + Copy + + src/app/components/network/components/send-funds/send-funds.component.html + 26 + + Kopieren + + + Do not send funds from an exchange, always use wallets you fully control. + + + src/app/components/network/components/send-funds/send-funds.component.html + 34,36 + + Der Geldtransfer sollte nicht über Krypto-Exchanges erfolgen, verwende immer Portfolios, die Du vollständig kontrollierst. + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 3 + + Ein Gebot abgeben + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 15 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 16 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 25 + + NFT Bild + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 38 + + Endet + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 48 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 36 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46 + + Lizenzgebühren + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 55 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 43 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 53 + + Lizenzgebühren werden automatisch abgezogen und an den Künstler gezahlt. + + + Royalties goes to + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 73,74 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 61,62 + + Lizenzgebühren gehen an + + + + + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 75,76 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 63,64 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 262,263 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 188,189 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 264,265 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 306,307 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 344,345 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 45 + + + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 109 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Aktuelles Höchstgebot + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 111 + + + src/app/pages/nft/pages/nft/nft.page.html + 111 + + Mindestgebot + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 127 + + + src/app/pages/nft/pages/nft/nft.page.html + 116 + + Dein Gebot ist das höchste + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 172,173 + + Der aktuelle Preis wird in Echtzeit aktualisiert + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 208,209 + + Die Adresse des gewünschten NFT wird für die gesamte Auktion gesperrt. Nach der Zahlung wird dein Gebot gesperrt, sollte jemand ein höheres Gebot abgeben wird deine Zahlung wieder zurückerstattet. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 216,218 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,257 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 321,323 + + Wenn ein höheres Gebot vorliegt, wird dir dein Gebot sofort zurückerstattet. Wenn du ein anderes Angebot machen möchtest, sende einen höheren Betrag direkt an die gleiche Adresse. + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 237,238 + + Ein Gebot abgeben + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 278 + + Meine Transaktionen + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 286 + + Sendedatum + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 287 + + + src/app/pages/token/pages/trade/trade.page.html + 854 + + Zeit + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 289 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 33 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 110 + + + src/app/pages/member/pages/tokens/tokens.page.html + 328 + + + src/app/pages/member/pages/transactions/transactions.page.html + 25 + + + src/app/pages/nft/pages/nft/nft.page.html + 323 + + + src/app/pages/nft/pages/nft/nft.page.html + 385 + + + src/app/pages/nft/pages/nft/nft.page.html + 435 + + + src/app/pages/token/pages/trade/trade.page.html + 200 + + + src/app/pages/token/pages/trade/trade.page.html + 274 + + + src/app/pages/token/pages/trade/trade.page.html + 363 + + + src/app/pages/token/pages/trade/trade.page.html + 664 + + + src/app/pages/token/pages/trade/trade.page.html + 851 + + Anzahl + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 55 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 96 + + Detail + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 311,310 + + + src/app/pages/nft/pages/nft/nft.page.html + 324 + + + src/app/pages/nft/pages/nft/nft.page.html + 360,359 + + + src/app/pages/nft/pages/nft/nft.page.html + 386 + + + src/app/pages/nft/pages/nft/nft.page.html + 410,409 + + + src/app/pages/nft/pages/nft/nft.page.html + 436 + + + src/app/pages/nft/pages/nft/nft.page.html + 460,459 + + Link + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 345 + + Glückwunsch, du hast ein NFT gewonnen. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 357,358 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 283,284 + + + src/app/components/token/components/token-bid/token-bid.component.html + 271,272 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 313,314 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 306,307 + + + src/app/components/token/components/token-vote/token-vote.component.html + 330,331 + + Checkout beenden + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 368,369 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 294,295 + + Mein NFT anzeigen + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 384 + + Die Angebotsfrist ist abgelaufen. Viel Glück beim nächsten Mal:) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 272 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 459 + + NFT erzeugt + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 274 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 461 + + SFT + + + NFT is not yet migrated to the decentralized network. + + src/app/components/nft/components/nft-card/nft-card.component.html + 65 + + NFT wurde noch nicht in das dezentrale Netzwerk migriert. + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 118 + + tag(e) + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 156 + + Aktuelles Gebot + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 191 + + + src/app/pages/nft/pages/nft/nft.page.html + 594 + + Besitzer + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 229,231 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 167 + + Neues NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 3 + + Zahlen + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 74,75 + + Gesamtpreis + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150,151 + + Bestätigen und für dich reservieren + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 156 + + Dein NFT wird für den Kauf gesperrt für + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + Minuten + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 185 + + Wir haben einen ungültigen Betrag erhalten. Versuche es erneut. + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 237,238 + + Deine Transaktion wird überprüft... + + + Order created. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 437 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 332 + + Auftrag erstellt. + + + Deposit NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 215 + + NFT einlagern (Deposit) + + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 46,48 + + Du kannst NFTs wieder in Soonaverse hinterlegen, um den Handel zu ermöglichen. Sobald das NFT bearbeitet ist, wird dein NFT in Soonaverse gesperrt. Du kannst es jederzeit versenden (withdraw). + + + Confirm & Start deposit + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 76,77 + + Bestätige & Start der Einlagerung (Deposit) + + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 113,115 + + Wenn NFT innerhalb von Soonaverse nicht erkannt wird, erstellen wir eine neue Kollektion und den dazugehörigen Raum. Vergesse nicht, diesen Platz zu beanspruchen, wenn du der Originalautor bist. + + + NFT has been deposited. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 165 + + NFT wurde hinterlegt. + + + See NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 169,170 + + NFT anzeigen + + + Terms & Conditions + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 85 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 107 + + Allgemeine Bedigungen & Conditionen + + + Send NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 86 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 108 + + NFT senden + + + NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 147 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 172 + + NFT erhalten. + + + Invalid NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 191 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 216 + + Ungültiges NFT erhalten. + + + Invalid NFT refunded. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 205 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 230 + + Ungültiges NFT zurückerstattet. + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 19 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 37 + + Vorschau + + + Sale Starts + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 57 + + + src/app/pages/nft/services/helper.service.ts + 142 + + Verkauf startet + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 60 + + + src/app/pages/nft/pages/nft/nft.page.html + 70 + + Aktueller Preis + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 80 + + Autor + + + System info + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 119 + + + src/app/pages/nft/pages/nft/nft.page.html + 634 + + System-Info + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 130 + + + src/app/pages/nft/pages/nft/nft.page.html + 654 + + Die aktuelle Adresse ist nicht mit einem Live-Mainnet verbunden. Sobald die Funktionalität auf IOTA/Shimmer unterstützt wird, wirst du die Möglichkeit haben dieses NFT mit einem Klick in das Netzwerk deiner Wahl zu migrieren. + + + Properties + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 135 + + + src/app/pages/nft/pages/new/single/single.page.html + 90 + + Eigenschaften + + + Stats + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 139 + + + src/app/pages/nft/pages/new/single/single.page.html + 193,192 + + Attribute + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149 + + + src/app/pages/nft/pages/new/single/single.page.html + 301 + + + src/app/pages/nft/pages/nft/nft.page.html + 27 + + NFT Bild + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + IPFS-Metadaten + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + IPFS Bild + + + Available once minted... + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 64 + + + src/app/pages/nft/pages/nft/nft.page.ts + 81 + + Erhältlich sobald geprägt ("minted")... + + + Set your floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 6,7 + + Setze den "Floor"-Preis + + + Available time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 42,43 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 42,43 + + Verfügbare Zeit + + + NOW + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 54,55 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 54,55 + + JETZT + + + Select Date/Time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Datum & Uhrzeit auswählen + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 71 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 71 + + + src/app/pages/nft/pages/new/single/single.page.html + 69 + + "Verfügbar ab" erforderlich. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 80 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 80 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 70 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 81 + + + src/app/pages/nft/pages/new/single/single.page.html + 68 + + + src/app/pages/nft/pages/new/single/single.page.html + 79 + + Verfügbar ab + + + Auction length + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 91,92 + + Auktionslänge + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 98 + + Variable Auktionslängen kommen beim nächsten Update, sobald die Community darüber abgestimmt hat! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 115 + + Dauer der Auktion ist 3 Tage + + + Auction can't be canceled after start date + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 125 + + Auktion kann nach dem Startdatum nicht abgebrochen werden + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 129 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 145 + + Sobald dein Angebot akzeptiert wurde, erhältst du eine Bestätigungsnachricht. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 138,139 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 154,155 + + Listung bestätigen + + + Set your price + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 6,7 + + Lege einen Preis fest + + + Sale type + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Verkaufsart + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 103,104 + + Offener Verkauf + + + Specific member(s) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 113,114 + + Bestimmte Mitglieder + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2 + + + src/app/pages/token/pages/trade/trade.page.html + 110 + + Handelshistorie + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 8,10 + + Artikel ist dein und gehört nur dir + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 16 + + Dadurch wird dein Artikel nicht mehr zum Verkauf freigegeben. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 17 + + Verkauf abbrechen! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 15 + + Artikel zum Verkauf anbieten + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 80 + + Nicht zum Verkauf bestimmt + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 88 + + + src/app/pages/token/services/new.service.ts + 29 + + Festpreis + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 96 + + Auktion + + + Stake NFT + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 221 + + Stake NFT + + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 46,48 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 147,149 + + Dein NFT wird mit Zeitsperre an dich zurückgeschickt. Bitte beachte, dass du genügend "storage deposit" für den "Timelock" zur Verfügung stellen musst. Setze den Tag auf "soonaverse" in deiner Wallet. + + + For how long you want to stake? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 56,57 + + + src/app/components/token/components/token-stake/token-stake.component.html + 174,175 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 57,58 + + Wie lange möchtest du Staken? + + + Stake type? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 77,78 + + Stake type? + + + Confirm & Start Stake + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 118,119 + + Bestätige & Beginn Staking + + + NFT has been staked. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 207 + + NFT wurde gestaked. + + + See Collection + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 218,219 + + Kollektion ansehen + + + Dynamic + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 76 + + Dynamisch + + + Static + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 80 + + Statisch + + + More + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 97,98 + + Mehr + + + Pending + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 6,7 + + + src/app/pages/token/pages/token/token.page.html + 36 + + + src/app/pages/token/pages/trade/trade.page.html + 524 + + Ausstehend + + + Rejected + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 12,13 + + + src/app/pages/token/pages/token/token.page.html + 42 + + Abgelehnt + + + Commencing + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 18,19 + + Wird gestartet + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 24,25 + + In Bearbeitung + + + Completed + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 31,32 + + Abgeschlossen + + + Share + + src/app/components/share/share.component.html + 16 + + + src/app/components/share/share.component.html + 39 + + + src/app/pages/token/pages/trade/trade.page.html + 64 + + + src/app/pages/token/pages/trade/trade.page.html + 635,634 + + Teilen + + + Copy to clipboard + + src/app/components/share/share.component.html + 28 + + In Zwischenablage kopieren + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 4 + + + src/app/pages/award/pages/new/new.page.html + 121 + + + src/app/pages/proposal/pages/new/new.page.html + 211 + + Erstelle zuerst einen Raum. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 13 + + Raum auswählen + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 83 + + + src/app/pages/award/pages/new/new.page.html + 152 + + + src/app/pages/proposal/pages/new/new.page.html + 242 + + Einen Raum auswählen + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 20 + + Alle Räume + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 19,20 + + Beigetreten am + + + members + + src/app/components/space/components/space-card/space-card.component.html + 44 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 23 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + Mitglieder + + + Space Claim + + src/app/components/space/components/space-claim/space-claim.component.html + 3 + + Raum beanspruchen + + + Confirm and generate address + + src/app/components/space/components/space-claim/space-claim.component.html + 54,55 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 52,53 + + + src/app/components/token/components/token-claim/token-claim.component.html + 138,139 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 96,97 + + + src/app/components/token/components/token-stake/token-stake.component.html + 251,252 + + Bestätige und erstelle eine Adresse + + + Claim complete. Congratulations. + + src/app/components/space/components/space-claim/space-claim.component.html + 160 + + + src/app/components/token/components/token-claim/token-claim.component.html + 281 + + Claim abgeschlossen. Herzlichen Glückwunsch. + + + Close + + src/app/components/space/components/space-claim/space-claim.component.html + 172,173 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 181,182 + + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 29,30 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 79,80 + + + src/app/components/token/components/token-claim/token-claim.component.html + 293,294 + + + src/app/components/token/components/token-stake/token-stake.component.html + 378,379 + + Schließen + + + Invalid amount or invalid senders address. Refunding transaction... + + src/app/components/space/components/space-claim/space-claim.component.ts + 183 + + Ungültiger Betrag oder ungültige Absender-Adresse. Erstattung der Transaktion... + + + Funds refunded. + + src/app/components/space/components/space-claim/space-claim.component.ts + 222 + + Betrag rückerstattet. + + + Space claim submitted. + + src/app/components/space/components/space-claim/space-claim.component.ts + 306 + + Raum beanspruchung übermittelt. + + + Token Reward Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 16 + + Token Belohnung Zeitplan + + + Existing Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 29 + + Aktuelles Programm + + + Upload New + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 37 + + Neu hochladen + + + Vault address: + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 55,64 + + "Vault"-Adresse: + + + Schedule a new Reward + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 82,83 + + Plane eine neue Belohnung + + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 93,95 + + Du kannst eine neue Staking-Belohnung planen. Dazu lade eine .csv-Datei mit Benutzeradressen und den Zuweisungsdetails hoch. + + + Start Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 148 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 24 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 24 + + Startdatum + + + End Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 149 + + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 19 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 25 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 25 + + Enddatum + + + Vesting Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 150 + + "Vesting" Datum + + + Tokens to Distribute + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 151 + + Zu verteilende Token + + + Status + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 152 + + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 110,109 + + + src/app/pages/token/pages/trade/trade.page.html + 376 + + Status + + + Proposal created to remove the reward. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 154 + + Vorschlag erstellt, um die Belohnung zu entfernen. + + + By checking this box, you agree with + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 12 + + Ich stimme zu (durch anklicken) + + + Terms and Conditions + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 13 + + Geschäftsbedingungen + + + Timeline + + src/app/components/timeline/timeline.component.html + 2 + + + src/app/components/timeline/timeline.component.html + 8 + + Zeitleiste + + + Earned Badge + + src/app/components/timeline/timeline.component.html + 66 + + Abzeichen erhalten + + + with + + src/app/components/timeline/timeline.component.html + 66 + + mit + + + Listed by + + src/app/components/timeline/timeline.component.html + 109 + + Gelistet von + + + Made available for auction by + + src/app/components/timeline/timeline.component.html + 112 + + Zur Verfügung gestellt zur Versteigerung durch + + + Purchased by + + src/app/components/timeline/timeline.component.html + 170 + + Gekauft von + + + See + + src/app/components/timeline/timeline.component.html + 181 + + Ansehen + + + Hide + + src/app/components/timeline/timeline.component.html + 182 + + Ausblenden + + + Listed by space + + src/app/components/timeline/timeline.component.html + 287 + + Aufgelistet nach Raum + + + Refund blocked funds + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 3 + + Blockiertes Guthaben erstatten + + + Total available tokens to refund + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 29 + + Insgesamt verfügbare Token zur Rückerstattung + + + Refund complete. Congratulations. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 169 + + Rückerstattung abgeschlossen. Herzlichen Glückwunsch. + + + Credit refund submitted. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 309 + + Rückforderung des Guthabens gestellt. + + + Airdrop tokens on the network + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 3 + + Airdrop-Token im Netzwerk + + + Tokens to airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 56,57 + + Tokens für den Airdrop + + + Confirm & Start Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 86,87 + + Bestätige & Beginn Airdrop + + + Tokens to Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 120,121 + + Tokens für den Airdrop + + + Finish Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 239,240 + + Airdrop beenden + + + Detail + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 60,61 + + Detail + + + Trade + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 70,71 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 201,202 + + Handel + + + Price (USD) + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 101 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 145 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 86 + + Preis (USD) + + + 24h Change + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 126,127 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 115,116 + + 24h Änderung + + + 24h Volume + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 154 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 146 + + 24h Volumen + + + M. Cap + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 172 + + MCAP + + + Open buy order + + src/app/components/token/components/token-bid/token-bid.component.html + 3 + + Kaufauftrag öffnen + + + Summary + + src/app/components/token/components/token-bid/token-bid.component.html + 29,30 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 39,40 + + + src/app/components/token/components/token-offer/token-offer.component.html + 46,47 + + Zusammenfassung + + + Token amount to buy + + src/app/components/token/components/token-bid/token-bid.component.html + 34,35 + + Token-Betrag zum Kaufen + + + Offered price per token + + src/app/components/token/components/token-bid/token-bid.component.html + 44,45 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 44,45 + + + src/app/components/token/components/token-offer/token-offer.component.html + 51,52 + + Angebotener Preis pro Token + + + Token amount to send + + src/app/components/token/components/token-bid/token-bid.component.html + 73,74 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 117,118 + + Zu sendender Token-Betrag + + + ~ + + src/app/components/token/components/token-bid/token-bid.component.html + 89,98 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 60,69 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 90,99 + + + src/app/pages/token/pages/trade/trade.page.html + 553,556 + + + + + I agree with + + src/app/components/token/components/token-bid/token-bid.component.html + 129 + + + src/app/components/token/components/token-claim/token-claim.component.html + 115 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 153 + + + src/app/components/token/components/token-offer/token-offer.component.html + 133 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 78 + + + src/app/components/token/components/token-refund/token-refund.component.html + 65 + + Ich stimme zu + + + Token terms and Conditions + + src/app/components/token/components/token-bid/token-bid.component.html + 131 + + + src/app/components/token/components/token-claim/token-claim.component.html + 117 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 155 + + + src/app/components/token/components/token-offer/token-offer.component.html + 135 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 80 + + + src/app/components/token/components/token-refund/token-refund.component.html + 67 + + Token Bedingungen und Konditionen + + + and generate address + + src/app/components/token/components/token-bid/token-bid.component.html + 147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 171 + + + src/app/components/token/components/token-vote/token-vote.component.html + 182 + + und generiere Adresse + + + Once you agree with the terms, the generated address will remain active during the whole sale. + + src/app/components/token/components/token-bid/token-bid.component.html + 154,155 + + + src/app/components/token/components/token-claim/token-claim.component.html + 146,147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 178,179 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 103,104 + + Sobald du den Bedingungen zustimmst, bleibt die generierte Adresse während des gesamten Verkaufs aktiv. + + + Buy complete. Congratulations. + + src/app/components/token/components/token-bid/token-bid.component.html + 259 + + Kaufen abgeschlossen. Gratulation. + + + Bid created. + + src/app/components/token/components/token-bid/token-bid.component.ts + 344 + + Gebot (Bid) erstellt. + + + Are you sure you want to cancel the sale? + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 17 + + Bist du dir sicher, dass du den Verkauf abbrechen möchtest? + + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 23,25 + + Sobald der Verkauf storniert wird, wird automatisch ein Prozess in Gang gesetzt, der das Investment der Anleger sofort zurückerstattet. + + + Cancel sale + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 32,33 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 74,75 + + Verkauf abbrechen + + + Canceled public sale. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts + 56 + + Öffentlicher Verkauf abgebrochen. + + + Total () + + src/app/components/token/components/token-cancel/token-cancel.component.html + 51,52 + + Gesamtsumme () + + + Are you sure you want to cancel your buy order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 66 + + Bist du dir sicher, dass du den Kauf abbrechen möchtest? + + + Are you sure you want to cancel your sell order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 69 + + Bist du dir sicher, dass du den Verkauf abbrechen möchtest? + + + Confirm + + src/app/components/token/components/token-cancel/token-cancel.component.html + 76,77 + + Bestätigen + + + Cancelled. + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 48 + + + src/app/pages/token/pages/trade/trade.page.ts + 589 + + Abgebrochen. + + + Cancel your buy + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 80 + + Deinen Kauf abbrechen + + + Cancel your sell + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 81 + + Deinen Verkauf abbrechen + + + Ongoing sale + + src/app/components/token/components/token-card/token-card.component.html + 22 + + Aktueller Verkauf + + + Sale ends soon + + src/app/components/token/components/token-card/token-card.component.html + 23 + + Verkauf endet bald + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 24 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 21 + + Cooldown endet + + + Sale starts + + src/app/components/token/components/token-card/token-card.component.html + 55,57 + + Verkauf startet + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 115,117 + + + src/app/components/token/components/token-card/token-card.component.html + 175,177 + + Verkauf endet + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 130 + + + src/app/components/token/components/token-card/token-card.component.html + 190 + + + src/app/components/token/components/token-card/token-card.component.html + 250 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 176 + + + src/app/components/token/components/token-row/token-row.component.html + 79 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 20 + + Verkauf endet + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 235,237 + + Cooldown endet + + + Token Claim + + src/app/components/token/components/token-claim/token-claim.component.html + 3 + + Token beanspruchen + + + Total available tokens to claim as of today + + src/app/components/token/components/token-claim/token-claim.component.html + 42 + + + src/app/components/token/components/token-claim/token-claim.component.html + 56 + + Insgesamt verfügbare Token, die ab heute beansprucht werden können + + + Tokens available from + + src/app/components/token/components/token-claim/token-claim.component.html + 76 + + Token verfügbar ab + + + Total tokens to claim + + src/app/components/token/components/token-claim/token-claim.component.html + 84 + + Gesamte zu beanspruchende Tokens + + + Token claim submitted. + + src/app/components/token/components/token-claim/token-claim.component.ts + 320 + + Token-Claim übermittelt. + + + Guardian's of the space will be able to decide where this token will be minted. + + src/app/components/token/components/token-info/token-info-description.component.html + 41 + + Wächter des Raumes können entscheiden, wo dieses Symbol geprägt wird. + + + Icon + + src/app/components/token/components/token-info/token-info-description.component.ts + 25 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 24 + + Symbol + + + Name + + src/app/components/token/components/token-info/token-info-description.component.ts + 26 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 25 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 31,30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 74 + + + src/app/pages/nft/pages/new/single/single.page.html + 21 + + + src/app/pages/nft/pages/new/single/single.page.html + 27,26 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 15 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 21,20 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 25 + + Name + + + Symbol + + src/app/components/token/components/token-info/token-info-description.component.ts + 27 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 30 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 39,38 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 26 + + Symbol + + + Launchpad Price + + src/app/components/token/components/token-info/token-info-description.component.ts + 28 + + Launchpad Preis + + + Network + + src/app/components/token/components/token-info/token-info-description.component.ts + 29 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 20 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 5,4 + + + src/app/pages/nft/pages/nft/nft.page.html + 542 + + + src/app/pages/nft/pages/nft/nft.page.html + 564 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 119 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 160 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 28 + + Netzwerk + + + Total supply + + src/app/components/token/components/token-info/token-info-description.component.ts + 30 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 29 + + Gesamtangebot + + + Current distribution + + src/app/components/token/components/token-info/token-info-description.component.ts + 31 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 30 + + Aktuelle Verteilung + + + Type + + src/app/components/token/components/token-info/token-info-description.component.ts + 32 + + + src/app/pages/member/pages/tokens/tokens.page.html + 58 + + + src/app/pages/member/pages/tokens/tokens.page.html + 325 + + + src/app/pages/member/pages/transactions/transactions.page.html + 24 + + + src/app/pages/nft/pages/nft/nft.page.html + 384 + + + src/app/pages/nft/pages/nft/nft.page.html + 434 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 31 + + + src/app/pages/token/pages/trade/trade.page.html + 361 + + Typ + + + Coming soon + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 91,92 + + Kommt bald (Soon!) + + + In Cooldown + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 98,99 + + + src/app/components/token/components/token-row/token-row.component.html + 245,246 + + In Abklingzeit + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 108,109 + + + src/app/components/token/components/token-row/token-row.component.html + 256,257 + + + src/app/pages/token/pages/trade/trade.page.html + 456 + + + src/app/pages/token/pages/trade/trade.page.html + 467 + + + src/app/pages/token/pages/trade/trade.page.html + 909,910 + + Kaufen + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 116 + + + src/app/pages/token/pages/trade/trade.page.html + 387 + + + src/app/pages/token/pages/trade/trade.page.html + 1210 + + Kaufen + + + Sale starts + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 167 + + + src/app/components/token/components/token-row/token-row.component.html + 70 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 19 + + Verkauf startet + + + Cooldown period ends + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 187,188 + + + src/app/components/token/components/token-row/token-row.component.html + 90,91 + + Abklingzeit endet + + + Mint token on network + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 3 + + Token im Netzwerk prägen (Mint) + + + Public sale will no longer be available after bringing token to a network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 45,46 + + Der öffentliche Verkauf wird nicht mehr verfügbar sein, nachdem man Token in ein Netzwerk gebracht hat. + + + Once minted all owners will have the option to migrate their tokens to the selected network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 56,58 + + Einmal geprägt haben alle Besitzer die Möglichkeit, ihre Token in das ausgewählte Netzwerk zu migrieren. + + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 68,70 + + Beachten Sie, dass das Eigentum und alle noch nicht zugewiesenen Token in deinem Mitgliedsprofil hinterlegt werden. + + + Tokens to migrate + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 92,93 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 173,174 + + Token zum Transfer + + + Locked public tokens + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 107,108 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 189,190 + + Gesperrte öffentliche Token + + + Open sale order + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 3 + + Offener Verkaufsauftrag + + + Token ID + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 30,31 + + + src/app/components/token/components/token-offer/token-offer.component.html + 27,28 + + ID-Token + + + You will receive + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 74,75 + + + src/app/components/token/components/token-offer/token-offer.component.html + 73,74 + + + src/app/pages/token/pages/trade/trade.page.html + 1132,1133 + + Du erhältst + + + Fee + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 103 + + + src/app/components/token/components/token-offer/token-offer.component.html + 101 + + + src/app/pages/token/pages/trade/trade.page.html + 1172 + + Gebühr + + + No FEES! + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 110,111 + + + src/app/components/token/components/token-offer/token-offer.component.html + 108,109 + + + src/app/pages/token/pages/trade/trade.page.html + 1188,1189 + + Keine FEES! + + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 232,234 + + + src/app/components/token/components/token-vote/token-vote.component.html + 249,251 + + Vergewisser dich, dass die Option "Gift-Deposit" in deinem Firefly Wallet beim Senden von Token ausgwählt ist. + + + Sell complete. Congratulations. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 301 + + + src/app/components/token/components/token-vote/token-vote.component.html + 318 + + Verkauf abgeschlossen. Gratulation. + + + Offer order created. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 346 + + Angebot erstellt. + + + Open Token Sell + + src/app/components/token/components/token-offer/token-offer.component.html + 3 + + Token-Verkauf öffnen + + + Your Balance + + src/app/components/token/components/token-offer/token-offer.component.html + 35,36 + + Dein Guthaben + + + Offered amount of tokens + + src/app/components/token/components/token-offer/token-offer.component.html + 64,65 + + Angebotene Anzahl an Token + + + Create a Sell Order + + src/app/components/token/components/token-offer/token-offer.component.html + 151,152 + + Verkaufsauftrag erstellen + + + Offer created. + + src/app/components/token/components/token-offer/token-offer.component.ts + 102 + + Angebot erstellt. + + + Public sale info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 4 + + Öffentliche Auktion: Infos + + + Start date is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 7 + + Startdatum erforderlich. + + + Start date for the token offering + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 16 + + Startdatum für das Tokenangebot + + + Offering length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 23 + + Angebotsdauer ist erforderlich. + + + Select token offering length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 48 + + Wähle die Länge des Angebots (Standard 2 Tage) + + + Token allocation info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 63 + + Token-Zuweisung: Infos + + + Sale Setup + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 81 + + Verkaufseinstellungen + + + Enable Cooldown period + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 87,88 + + Abkühlungszeit aktivieren + + + Enable Cooldown with refund option. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 98,99 + + Abkühlungszeit mit Rückerstattungsoption aktivieren. + + + Cooldown period length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 103 + + Länge der Abklingzeit ist erforderlich. + + + Select token cooldown length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 129 + + Wähle die Token Abklingzeit Länge (Standard 2 Tage) + + + No Cooldown. Participants can’t refund. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 149,150 + + Keine Abkühlungszeit. Teilnehmer können keine Rückerstattung beantragen. + + + Enable Oversale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 160,161 + + Überverkauf aktivieren + + + No Oversale. Sale ends with 100% reached. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 171,172 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 54,55 + + Kein "Oversale". Der Verkauf endet wenn 100% erreicht werden. + + + Sale continues after 100% reached + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 179,180 + + Mit 100 % Verkaufsquote wird die Auktion fortgesetzt + + + Confirm and schedule sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 195,196 + + Bestätige und plane den Verkauf + + + Price per token + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 106 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 34 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 42 + + Preis je Token + + + Public sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 135 + + + src/app/pages/token/pages/new/summary/summary.component.html + 214 + + Public Sale + + + Purchase token + + src/app/components/token/components/token-purchase/token-purchase.component.html + 3 + + Token kaufen + + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 113 + + Geben Sie die Anzahl der Tokens ein, die Sie kaufen möchten. Der Preis in IOTA wird berechnet. + + + Enter how much you want to spend. Amount of tokens will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 116 + + Gebe ein, wieviel du ausgeben möchtest. Die Anzahl der Token wird berechnet. + + + Purchased tokens + + src/app/components/token/components/token-purchase/token-purchase.component.html + 243,244 + + Gekaufte Token + + + Price + + src/app/components/token/components/token-purchase/token-purchase.component.html + 260,261 + + Preis + + + Cooldown period ends + + src/app/components/token/components/token-refund/token-refund.component.html + 23 + + Abklingzeit endet + + + Confirm and refund + + src/app/components/token/components/token-refund/token-refund.component.html + 82,83 + + Erstattung bestätigen + + + Refund token + + src/app/components/token/components/token-refund/token-refund.component.ts + 61 + + Token erstatten + + + Initial Price + + src/app/components/token/components/token-row/token-row.component.html + 39 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 27 + + Anfangspreis + + + Avg. Price + + src/app/components/token/components/token-row/token-row.component.html + 47 + + Durchschn. Preis + + + Change (24h) + + src/app/components/token/components/token-row/token-row.component.html + 107,108 + + Änderung (24h) + + + Volume 24h + + src/app/components/token/components/token-row/token-row.component.html + 150 + + Volumen (24h) + + + Market Cap + + src/app/components/token/components/token-row/token-row.component.html + 166 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 169 + + + src/app/pages/token/pages/trade/trade.page.html + 582 + + Marktkap + + + Claim + + src/app/components/token/components/token-row/token-row.component.html + 210,211 + + Beanspruchen + + + Refund + + src/app/components/token/components/token-row/token-row.component.html + 222,223 + + Erstattung + + + Launching soon + + src/app/components/token/components/token-row/token-row.component.html + 238,239 + + Startet bald + + + Buy / Sell + + src/app/components/token/components/token-row/token-row.component.html + 259,260 + + Kaufen / Verkaufen + + + Stake your token + + src/app/components/token/components/token-stake/token-stake.component.html + 3 + + Stake deine Token + + + Select or define the amount you want to stake and the period for how long you want to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 13,15 + + Wähle den Betrag des Stakings und den Zeitraum, wie lang du die Token "locken" willst. + + + Since you are a guardian you can also + + src/app/components/token/components/token-stake/token-stake.component.html + 17 + + Da du ein Wächter bist, kannst du auch + + + - Choose an amount and for how long you’d like to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 50 + + - Wähle einen Betrag aus und lege fest, wie lang zu ihn sperren möchtest. + + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + src/app/components/token/components/token-stake/token-stake.component.html + 52,54 + + - Dein Guthaben bleibt in deiner Wallet, aber du kannst es während des Staking-Zeitraums nicht verwenden. + + + - You will get staked points based on your input. + + src/app/components/token/components/token-stake/token-stake.component.html + 56,57 + + - Du erhältst Staking-Punkte basierend auf deinem Input. + + + See Staking reward page for more info + + src/app/components/token/components/token-stake/token-stake.component.html + 62 + + Siehe Staking-Belohnungseite für weitere Informationen + + + here. + + src/app/components/token/components/token-stake/token-stake.component.html + 63 + + hier. + + + How it works + + src/app/components/token/components/token-stake/token-stake.component.html + 71 + + So funktioniert's + + + How much you want to stake? + + src/app/components/token/components/token-stake/token-stake.component.html + 87,88 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 21,22 + + Wie viel möchtest du Staken? + + + Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 192 + + Multiplikator der Belohnung + + + Staking Value + + src/app/components/token/components/token-stake/token-stake.component.html + 210,219 + + Staking Wert + + + Staked amount * Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 216 + + + src/app/pages/member/pages/activity/activity.page.html + 36 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 107 + + Gestakte Anzahl * Belohnungsmultiplikator + + + You will earn + + src/app/components/token/components/token-stake/token-stake.component.html + 230 + + Du verdienst + + + Stake complete. Congratulations. + + src/app/components/token/components/token-stake/token-stake.component.html + 366 + + Staking abgeschlossen. Gratulation. + + + Token stake submitted. + + src/app/components/token/components/token-stake/token-stake.component.ts + 410 + + Token Stake übermittelt. + + + Trade details + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 3 + + Handelsdetails + + + Traded amount + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 29,30 + + Gehandelter Betrag + + + Price per token + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 48,49 + + + src/app/pages/token/pages/new/summary/summary.component.html + 69,70 + + Preis je Token + + + Date and Time + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 79,80 + + Datum und Zeit + + + Fullfilled + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 94,95 + + Ausgeführt + + + Date + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 109 + + + src/app/pages/member/pages/transactions/transactions.page.html + 22 + + + src/app/pages/nft/pages/nft/nft.page.html + 383 + + + src/app/pages/nft/pages/nft/nft.page.html + 433 + + + src/app/pages/proposal/pages/votes/votes.page.html + 15 + + + src/app/pages/token/pages/trade/trade.page.html + 198 + + + src/app/pages/token/pages/trade/trade.page.html + 272 + + + src/app/pages/token/pages/trade/trade.page.html + 360 + + Datum + + + State + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 111 + + Status + + + Storage deposit fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 144 + + "Storage deposit" - Gebühr + + + Fullfilment + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 171 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 252 + + Vollständige Erfüllung + + + Seller + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 176 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 247 + + Verkäufer + + + Transaction + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 204 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 280 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 314 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 358 + + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 41 + + + src/app/pages/member/pages/transactions/transactions.page.html + 74 + + Transaktion + + + Non Transferable + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 153 + + + src/app/pages/member/pages/transactions/transactions.page.html + 77 + + Nicht übertragbar + + + Processing... + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 155 + + + src/app/pages/member/pages/transactions/transactions.page.html + 87 + + In Bearbeitung... + + + Soonaverse Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 170 + + Soonaverse Gebühr + + + Exchange Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 172 + + Umtauschgebühr + + + 24h change/Price + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 46 + + 24h Änderung/Preis + + + Markets + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 6 + + + src/app/pages/token/pages/trade/trade.page.html + 1242 + + Märkte + + + No Tokens + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 38,39 + + + src/app/pages/tokens/pages/favourites/favourites.page.html + 25,26 + + Keine Tokens + + + Cast Vote + + src/app/components/token/components/token-vote/token-vote.component.html + 3 + + Stimme abgeben + + + Question + + src/app/components/token/components/token-vote/token-vote.component.html + 16,17 + + Frage + + + Selected option + + src/app/components/token/components/token-vote/token-vote.component.html + 23,24 + + Ausgewählte Option + + + How do you set your votes? + + src/app/components/token/components/token-vote/token-vote.component.html + 33,34 + + Wie stimmst du ab? + + + Total native tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 88,89 + + Gesamte native Tokens + + + Total staked tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 105,106 + + Gesamte gestakte Tokens + + + Voting is active on + + src/app/components/token/components/token-vote/token-vote.component.html + 119,120 + + Abstimmung läuft + + + Your total voting weight + + src/app/components/token/components/token-vote/token-vote.component.html + 131,132 + + Dein volles Stimmgewicht + + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + src/app/components/token/components/token-vote/token-vote.component.html + 151,153 + + Beachte, dass gestakte Tokens nur für eine Abstimmung verwendet werden können. Dein Stimmgewicht wird aufgeteilt, wenn du deine gestakten Tokens auf einen anderen Vorschlag splittest. + + + Cast Votes + + src/app/components/token/components/token-vote/token-vote.component.html + 193 + + Stimmen abgeben + + + Send Native Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 124 + + Native Tokens senden + + + Use Staked Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 128 + + Gestakte Tokens benutzen + + + Vote received. + + src/app/components/token/components/token-vote/token-vote.component.ts + 191 + + Stimme erhalten. + + + Transaction confirmed and funds refunded. + + src/app/components/token/components/token-vote/token-vote.component.ts + 217 + + Transaktion bestätigt und Kapital zurückerstattet. + + + Token vote executed. + + src/app/components/token/components/token-vote/token-vote.component.ts + 375 + + Token Abstimmung ausgeführt. + + + Token vote order created. + + src/app/components/token/components/token-vote/token-vote.component.ts + 392 + + Token-Abstimmungsauftrag erstellt. + + + Type + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 13,14 + + Typ + + + Date + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 22,23 + + Datum + + + Manage addresses + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 3 + + Adressen verwalten + + + Not yet verified + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 59 + + Noch nicht verifiziert + + + Change + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 66 + + Ändern + + + Verify + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 67 + + Verifizieren + + + You will be asked to send funds to the new + + src/app/components/wallet-address/verify-address/verify-address.component.html + 33 + + Sende Guthaben an die neue + + + address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/verify-address/verify-address.component.html + 36,37 + + Adresse für den Verifizierungsprozess. Die Adresse, von der du Guthaben überweist, wird mit deinem Konto verknüpft + + + space + + src/app/components/wallet-address/verify-address/verify-address.component.html + 41 + + Raum + + + profile + + src/app/components/wallet-address/verify-address/verify-address.component.html + 43 + + Profil + + + for future transactions. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 44 + + für zukünftige Transaktionen. + + + Generate new address + + src/app/components/wallet-address/verify-address/verify-address.component.html + 55,56 + + Neue Adresse erzeugen + + + Send a small + + src/app/components/wallet-address/verify-address/verify-address.component.html + 66 + + Sende einen kleinen + + + amount to validate your address. This expires in + + src/app/components/wallet-address/verify-address/verify-address.component.html + 67 + + Betrag, um deine Adresse zu bestätigen. Dies läuft ab in + + + Expired. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 70 + + Abgelaufen. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/verify-address/verify-address.component.html + 106,107 + + Warte auf die Bestätigung deiner Transaktion. Wir senden deine Tokens an dich zurück, sobald diese Transaktion abgeschlossen ist + + + Validating address... + + src/app/components/wallet-address/verify-address/verify-address.component.html + 136 + + Adresse wird überprüft... + + + Now you can deal with NFTs and participate in token trading. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 174 + + Jetzt kannst du am NFT- und Tokenhandel teilnehmen. + + + Your new address has been verified! + + src/app/components/wallet-address/verify-address/verify-address.component.html + 176 + + Deine neue Adresse wurde verifiziert! + + + Finish Verification + + src/app/components/wallet-address/verify-address/verify-address.component.html + 181,182 + + Verifizierung fertigstellen + + + Generate address + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 76 + + Adresse generieren + + + Refunding your payment... + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 192 + + Erstattung deiner Zahlung... + + + Address is not verified + + src/app/components/wallet-address/wallet-address.component.html + 4 + + Adresse ist nicht verifiziert + + + wallet + + src/app/components/wallet-address/wallet-address.component.html + 25 + + wallet + + + Copy address + + src/app/components/wallet-address/wallet-address.component.html + 30 + + Adresse kopieren + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + Verifiziere deine + + + address + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + Adresse + + + This network is currently not enabled. + + src/app/components/wallet-address/wallet-address.component.ts + 82 + + Dieses Netzwerk ist derzeit deaktiviert. + + + Award Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Belohnungs-Info + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 20 + + Besitzer + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 18 + + Verwendete / verfügbare Abzeichen + + + Badge lock period + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 20 + + Abzeichen Sperrfrist + + + Award info + + src/app/pages/award/pages/award/award.page.html + 3 + + + src/app/pages/award/pages/new/new.page.html + 17 + + Informationen zur Auszeichnung + + + Minted on: + + src/app/pages/award/pages/award/award.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 47 + + Minted ("geprägt") auf: + + + Fund Award + + src/app/pages/award/pages/award/award.page.html + 121,122 + + Award finanzieren + + + Minting in Progress + + src/app/pages/award/pages/award/award.page.html + 129,130 + + Prägen ("Mint") im Gang + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 136 + + + src/app/pages/award/pages/award/award.page.html + 210 + + Auszeichnung prüfen + + + Reject Award + + src/app/pages/award/pages/award/award.page.html + 157 + + Auszeichnung ablehnen + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 166 + + Teilnahme bestätigen + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 174,176 + + Die gesamte Kommunikation wird nun außerhalb der Plattform abgewickelt, teile dem Ersteller der Auszeichnung mit, wie er dich kontaktieren kann. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 180 + + Gib eine Beschreibung oder einen Link zu deiner Arbeit an. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 188 + + Auszeichnung einreichen + + + Cancel + + src/app/pages/award/pages/award/award.page.html + 189 + + + src/app/pages/token/pages/trade/trade.page.html + 245 + + + src/app/pages/token/pages/trade/trade.page.html + 333 + + Abbrechen + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 41 + + + src/app/pages/token/pages/new/new.page.ts + 34 + + + src/app/pages/token/pages/token/token.page.ts + 36 + + Übersicht + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 105 + + Teilnehmer + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2 + + Neue Auszeichnung + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14 + + + src/app/pages/award/pages/new/new.page.html + 77 + + + src/app/pages/proposal/pages/new/new.page.html + 24 + + Titel erforderlich. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19 + + Titel und Beschreibung werden in der Auszeichnung angezeigt. Das Enddatum bestimmt die Gültigkeitsdauer der Auszeichnung. + + + Title + + src/app/pages/award/pages/new/new.page.html + 23 + + + src/app/pages/award/pages/new/new.page.html + 29,28 + + + src/app/pages/award/pages/new/new.page.html + 76 + + + src/app/pages/award/pages/new/new.page.html + 83,82 + + + src/app/pages/proposal/pages/new/new.page.html + 23 + + + src/app/pages/proposal/pages/new/new.page.html + 29,28 + + + src/app/pages/proposal/pages/new/new.page.html + 103 + + + src/app/pages/proposal/pages/new/new.page.html + 109,108 + + + src/app/pages/proposal/pages/new/new.page.html + 156 + + + src/app/pages/proposal/pages/new/new.page.html + 162,161 + + + src/app/pages/space/pages/upsert/upsert.page.html + 24 + + + src/app/pages/space/pages/upsert/upsert.page.html + 30,29 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 106 + + + src/app/pages/token/pages/new/overview/overview.component.html + 22 + + + src/app/pages/token/pages/new/overview/overview.component.html + 29,28 + + + src/app/pages/token/pages/new/overview/overview.component.html + 65 + + + src/app/pages/token/pages/new/overview/overview.component.html + 72,71 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 9 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 16,15 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 55 + + Titel + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 24 + + Du musst einen Namen eingeben. + + + End + + src/app/pages/award/pages/new/new.page.html + 36 + + + src/app/pages/award/pages/new/new.page.html + 47,46 + + + src/app/pages/proposal/pages/new/new.page.html + 56 + + + src/app/pages/proposal/pages/new/new.page.html + 68,67 + + Ende + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 37 + + + src/app/pages/proposal/pages/new/new.page.html + 57 + + Enddatum erforderlich. + + + Description + + src/app/pages/award/pages/new/new.page.html + 52 + + + src/app/pages/award/pages/new/new.page.html + 58 + + + src/app/pages/award/pages/new/new.page.html + 91 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 40 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 45 + + + src/app/pages/nft/pages/new/single/single.page.html + 33 + + + src/app/pages/nft/pages/new/single/single.page.html + 38 + + + src/app/pages/proposal/pages/new/new.page.html + 76 + + + src/app/pages/proposal/pages/new/new.page.html + 82 + + + src/app/pages/proposal/pages/new/new.page.html + 119 + + + src/app/pages/proposal/pages/new/new.page.html + 124 + + + src/app/pages/proposal/pages/new/new.page.html + 171 + + + src/app/pages/proposal/pages/new/new.page.html + 176 + + + src/app/pages/space/pages/upsert/upsert.page.html + 36 + + + src/app/pages/space/pages/upsert/upsert.page.html + 41 + + + src/app/pages/token/pages/new/overview/overview.component.html + 37 + + + src/app/pages/token/pages/new/overview/overview.component.html + 43 + + + src/app/pages/token/pages/new/overview/overview.component.html + 80 + + + src/app/pages/token/pages/new/overview/overview.component.html + 86 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 21 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 67 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 21 + + Beschreibung + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 69 + + Definition des Badges + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 71 + + Titel und Beschreibung werden in dem Abzeichen aufgeführt. + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 97 + + Beschreibung des Abzeichens + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 115 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 369 + + + src/app/pages/proposal/pages/new/new.page.html + 205 + + Gruppeninfo + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 117 + + Das ist die Gruppe, welche die Auszeichnung veröffentlichen wird. + + + Reward info + + src/app/pages/award/pages/new/new.page.html + 170 + + Belohnungs-Info + + + You need to fund this award with native token. Select which token will be used as reward. + + src/app/pages/award/pages/new/new.page.html + 172 + + Du musst diese Auszeichnung mit nativem Token finanzieren. Wähle, welcher Token als Belohnung verwendet wird. + + + Token is required. + + src/app/pages/award/pages/new/new.page.html + 176 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 247 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + Ein Token ist erforderlich. + + + Select a token + + src/app/pages/award/pages/new/new.page.html + 207 + + Wähle einen Token + + + Defines the amount of tokens for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 222,223 + + Legt die Anzahl der Tokens für jedes Abzeichen und die Anzahl der verfügbaren Abzeichen fest. + + + Invalid token amount per badge + + src/app/pages/award/pages/new/new.page.html + 226 + + Ungültiger Tokenbetrag pro Abzeichen + + + Tokens per badge + + src/app/pages/award/pages/new/new.page.html + 234 + + Token pro Abzeichen + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 251 + + + src/app/pages/award/pages/new/new.page.html + 338 + + Mindestens 1 und maximal 10000. + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 273 + + Die Anzahl der Abzeichen, die du für diese Auszeichnung zur Verfügung stellen willst. Dies kann auch als die Anzahl der Auszeichnungen, die du vergeben willst, verstanden werden. + + + Total to be funded + + src/app/pages/award/pages/new/new.page.html + 284,285 + + Insgesamt zu finanzieren + + + Upload image that will be used as a Reward Badge. + + src/app/pages/award/pages/new/new.page.html + 299 + + Bild hochladen, das als Belohnungsabzeichen benutzt wird. + + + Badge is required. + + src/app/pages/award/pages/new/new.page.html + 328,329 + + Abzeichen ist erforderlich. + + + Set the duration for which the badge will be locked in the Firefly wallet. + + src/app/pages/award/pages/new/new.page.html + 334,335 + + Lege die Dauer fest, für die das Abzeichen in der Firefly Wallet gesperrt wird. + + + Create award + + src/app/pages/award/pages/new/new.page.html + 369,370 + + Auszeichnung erstellen + + + Award - New + + src/app/pages/award/pages/new/new.page.ts + 119 + + + src/app/pages/award/pages/new/new.page.ts + 134 + + Auszeichnung - Neu + + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/award/pages/new/new.page.ts + 120 + + + src/app/pages/award/pages/new/new.page.ts + 135 + + Erzeuge Beteiligung und Wachstum für deine DAOs und digitalen Gemeinschaften. Auszeichnungen, gebührenfreie Abstimmung, 1-Klick-Einrichtung. Trete noch heute bei. + + + Member seems to log out during the file upload request. + + src/app/pages/award/pages/new/new.page.ts + 184 + + + src/app/pages/collection/pages/upsert/upsert.page.ts + 403 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 240 + + + src/app/pages/nft/pages/new/single/single.page.ts + 180 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 131 + + + src/app/pages/token/services/new.service.ts + 202 + + Das Mitglied scheint sich während der Datei-Upload-Anfrage abzumelden. + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2 + + Beschreibung der Auszeichnung + + + Award - + + src/app/pages/award/pages/overview/overview.page.ts + 17 + + + src/app/pages/award/pages/participants/participants.page.ts + 83 + + Auszeichnung - + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 49 + + + src/app/pages/award/pages/participants/participants.page.html + 63 + + + src/app/pages/proposal/pages/participants/participants.page.html + 49 + + + src/app/pages/proposal/pages/participants/participants.page.html + 63 + + Teilnehmer finden + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 72 + + + src/app/pages/proposal/pages/participants/participants.page.html + 72 + + + src/app/pages/space/pages/members/members.page.html + 92 + + Nur wenige Top-Einträge anzeigen... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 90,91 + + + src/app/pages/proposal/pages/participants/participants.page.html + 90,91 + + Keine Teilnehmer + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 118,119 + + Belohnung + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 138,139 + + Erneut belohnen + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 50 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 158 + + + src/app/pages/space/pages/awards/awards.page.ts + 30 + + + src/app/pages/space/pages/collections/collections.page.ts + 30 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 30 + + Ausstehend + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 51 + + Ausgestellt + + + See all participants within the award. + + src/app/pages/award/pages/participants/participants.page.ts + 84 + + + src/app/pages/proposal/pages/overview/overview.page.ts + 60 + + Sehe alle Teilnehmer der Auszeichnung. + + + applied on + + src/app/pages/award/pages/participants/participants.page.ts + 257 + + beantragt am + + + Make NFT’s from this collection available on decentralised network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 12,13 + + Stelle NFTs aus dieser Sammlung auf dezentralisierten Netzwerken zur Verfügung. + + + Minting + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 29 + + Minting + + + NFTs left + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 32 + + Verbleibende NFTs + + + Collection is not yet migrated to the decentralized network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 47,48 + + Die Sammlung wurde noch nicht in das dezentrale Netzwerk migriert. + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 611 + + Wer kann es kaufen? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 63,64 + + Offener Verkauf + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 76,77 + + Nur Gruppenmitglieder + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89,90 + + Nur Wächter der Gruppe + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 102,103 + + Nur Gruppenmitglieder mit Abzeichen + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 118,119 + + Mindestens ein NFT aus jeder ausgewählten Sammlung muss im Besitz sein + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 126,127 + + (Ein NFT pro Mitglied) + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 175 + + Mitgliederrabatte + + + discount for members with rewards from this space in total value of + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 190 + + Rabatt für Mitglieder mit Belohnungen aus diesem Raum im Gesamtwert von + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 5 + + Über die Kollektion + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 22,23 + + Limitierte Edition + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 81,82 + + + src/app/pages/collection/pages/collection/collection.page.html + 301,302 + + Kollektion veröffentlichen + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 93,94 + + + src/app/pages/collection/pages/collection/collection.page.html + 313,314 + + Kollektion bearbeiten + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Lizenzgebühren gehen an + + + Rank + + src/app/pages/collection/pages/collection/collection.page.html + 170,171 + + + src/app/pages/token/pages/token/token.page.html + 73,74 + + Rang + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 189 + + Startet um + + + Deposited + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + Eingezahlt + + + Staked + + src/app/pages/collection/pages/collection/collection.page.html + 218 + + Gestakt + + + Links + + src/app/pages/collection/pages/collection/collection.page.html + 227 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 154,153 + + + src/app/pages/token/pages/new/overview/overview.component.html + 160,159 + + + src/app/pages/token/pages/new/summary/summary.component.html + 307,306 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 79 + + Links + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 330 + + + src/app/pages/collection/pages/collection/collection.page.html + 376 + + Kollektion ablehnen + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 346 + + + src/app/pages/collection/pages/collection/collection.page.html + 392 + + Kollektion stornieren + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 413 + + + src/app/pages/nft/pages/new/new.page.html + 2 + + NFT erstellen + + + Rank amount must be between + + src/app/pages/collection/pages/collection/collection.page.ts + 285 + + + src/app/pages/token/pages/token/token.page.ts + 195 + + Rangbetrag muss zwischen folgendem liegen + + + records + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 13 + + + src/app/pages/discover/pages/awards/awards.page.html + 13 + + + src/app/pages/discover/pages/members/members.page.html + 13 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 13 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 13 + + + src/app/pages/market/pages/collections/collections.page.html + 13 + + + src/app/pages/member/pages/nfts/nfts.page.html + 13 + + Einträge + + + Filters&Sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 30 + + + src/app/pages/discover/pages/awards/awards.page.html + 30 + + + src/app/pages/discover/pages/members/members.page.html + 30 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 30 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 30 + + + src/app/pages/market/pages/collections/collections.page.html + 30 + + Filters&Sort + + + Filters&sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 71 + + + src/app/pages/discover/pages/awards/awards.page.html + 78 + + + src/app/pages/discover/pages/members/members.page.html + 78 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 78 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 79 + + + src/app/pages/market/pages/collections/collections.page.html + 79 + + Filters&sort + + + Sort by + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 93,92 + + + src/app/pages/discover/pages/awards/awards.page.html + 94,93 + + + src/app/pages/discover/pages/members/members.page.html + 94,93 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 94,93 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 95,94 + + + src/app/pages/market/pages/collections/collections.page.html + 95,94 + + Sortieren nach + + + Price range + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 131 + + Preisspanne + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2 + + Neue Kollektion erstellen + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3 + + Kollektion bearbeiten + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18 + + Kollektionsinformationen + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20 + + Name und Beschreibung werden in der Kollektion aufgeführt. + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 58 + + + src/app/pages/nft/pages/new/single/single.page.html + 51 + + Verkaufsinformationen + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 60 + + Alle Zeiten sind in der Zeitzone des Nutzers angegeben. Für generierte NFT und SFT wird der Preis hier festgelegt und kann nicht auf dem NFT geändert werden. Der Preis für eine klassische NFT Kollektion ist nur indikativ und kann auf dem NFT geändert werden. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 90 + + Lizenzgebühr + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 93,95 + + Die Lizenzgebühr von % wird auf das ursprüngliche Minten der NFTs und auf alle Weiterverkäufe angerechnet. Die IOTA Adresse, die die Lizenzgebühr erhält, muss, aufgrund der Dust Protection des IOTA Protokolls, ein Guthaben von mindestens 1Mi haben. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 106 + + Lizenzgebühren - prozentuale Gebühr + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 116 + + Beispiel: 10 % , 20 % , etc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 124 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 131 + + Lizenzgebühr geht an einen anderen Raum + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 155 + + Links werden in den NFT Details aufgeführt. Benutze Account Nutzernamen für Twitter und Discord (name#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 160 + + Ungültige URL. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 167,166 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 312,311 + + + src/app/pages/token/pages/new/overview/overview.component.html + 175,174 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 91,90 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 183 + + Link zu deinem Twitter Account + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + Ungültiger Discord Nutzername. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 200 + + Link zu deinem Discord Account + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 215 + + Rabatte + + + The discount applies only to members who have earned tokens from awards issued by this space. + + src/app/pages/collection/pages/upsert/upsert.page.html + 217 + + Der Rabatt gilt nur für Mitglieder, die durch Auszeichnungen dieses Raumes Tokens verdient haben. + + + Token amount higher than + + src/app/pages/collection/pages/upsert/upsert.page.html + 231 + + Tokenbetrag höher als + + + Type awarded token... + + src/app/pages/collection/pages/upsert/upsert.page.html + 257 + + Ausgezeichneter Token eintippen... + + + Discount % + + src/app/pages/collection/pages/upsert/upsert.page.html + 271 + + Rabatt % + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 299 + + Rabatt + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 310 + + XP-Rabatt + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 330,331 + + Rabattbetrag + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 356 + + Rabattstufe hinzufügen + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 371 + + In diesem Raum wird die NFT Kollektion gemintet. Es werden nur Räume mit verifizierten Wallets in der Dropdown-Liste angezeigt. Stelle sicher, dass du den richtigen Raum auswählst, da alle Gelder aus dem NFT Verkauf an das verifizierte Wallet dieses Raumes gehen. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 389 + + Art der Kollektion + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 391 + + Jede Art hat unterschiedliche Eigenschaften. Diese können nach der Erstellung nicht mehr geändert werden. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 423,422 + + + src/app/pages/space/pages/upsert/upsert.page.html + 200 + + Banner + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + Banner erforderlich. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 463 + + Platzhalter + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 493,494 + + Platzhalter ist erforderlich. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 503 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 516 + + + src/app/pages/market/pages/collections/collections.page.html + 177 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138 + + Kategorie + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 505 + + Kategorie wird beim Filtern von Inhalten verwendet. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 509 + + Kategorie. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 534 + + Einstellung der Kollektion + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 536 + + Wer hat Zugang zu einer bestimmten Kollektion. + + + Open Sale + + src/app/pages/collection/pages/upsert/upsert.page.html + 545 + + Offener Verkauf + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 551 + + Jeder hat Zugang zu dieser Kollektion. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 563 + + Nur Wächter des Raumes haben Zugriff. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 576 + + Nur Raummitglieder haben Zugriff. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 589 + + Nur Raummitglieder mit Abzeichen haben Zugriff. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 607 + + Kollektionsoptionen + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 625 + + Nur ein NFT pro Mitglied + + + Select collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 650 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 147 + + + src/app/pages/nft/pages/new/single/single.page.html + 361 + + Kollektion auswählen + + + Select award + + src/app/pages/collection/pages/upsert/upsert.page.html + 669 + + Auszeichnung auswählen + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 691,692 + + Kollektion erstellen + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 704,705 + + Kollektion speichern + + + Check out collection + + src/app/pages/collection/services/helper.service.ts + 68 + + Kollektion ansehen + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 5 + + Ausstehende Mitgliedschaftsanfragen + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 16 + + Deine Gruppen + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 32,33 + + Keine Räume bisher + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 41,42 + + Entdecke Räume + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 56 + + Aktive Auszeichnungen + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 68 + + Aktive Vorschläge + + + Spaces + + src/app/pages/discover/pages/awards/awards.page.html + 115,114 + + + src/app/pages/discover/pages/discover/discover.page.ts + 9 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 115,114 + + + src/app/pages/market/pages/collections/collections.page.html + 146,145 + + + src/app/pages/member/pages/member/member.page.ts + 65 + + Räume + + + Discover - Awards + + src/app/pages/discover/pages/awards/awards.page.ts + 58 + + Entdecke - Auszeichnungen + + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/discover/pages/awards/awards.page.ts + 59 + + Entdecke den besten Ansatz für DAO Community Engagement und Wachstum. Prämien, gebührenfreie Abstimmung - 1-Klick-Einrichtung - Trete heute bei. + + + Awards + + src/app/pages/discover/pages/discover/discover.page.ts + 10 + + + src/app/pages/member/pages/member/member.page.ts + 64 + + + src/app/pages/space/pages/space/space.page.ts + 47 + + Auszeichnungen + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 11 + + + src/app/pages/space/pages/space/space.page.ts + 46 + + Vorschläge + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 12 + + + src/app/pages/space/pages/space/space.page.ts + 48 + + Mitglieder + + + Discover - Members + + src/app/pages/discover/pages/members/members.page.ts + 51 + + Entdecke - Mitglieder + + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + src/app/pages/discover/pages/members/members.page.ts + 52 + + Sei Teil der lebendigsten und am schnellsten wachsenden Gemeinschaften im Kryptospace. Benutze Metamask, um in Sekunden beizutreten. + + + Discover - Proposals + + src/app/pages/discover/pages/proposals/proposals.page.ts + 57 + + Entdecke - Vorschläge + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + src/app/pages/discover/pages/proposals/proposals.page.ts + 58 + + Erstellen und stimme über Vorschläge ab, die die Zukunft von DAOs und des Metaverse bestimmen werden. Alles mit nur einem Klick. Trete noch heute bei. + + + Discover - Spaces + + src/app/pages/discover/pages/spaces/spaces.page.ts + 54 + + Entdecke - Räume + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/discover/pages/spaces/spaces.page.ts + 55 + + Melde dich in wenigen Minuten mit unserem 1-Klick-Setup DAO-on-Demand an. Kostenloses bei On-Chsin-Voting. Entdecke alle unsere erstaunlichen DAO's auf Soonaverse. + + + Sale type + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Verkaufsart + + + Collections - NFT + + src/app/pages/market/pages/collections/collections.page.ts + 68 + + Kollektionen - NFT + + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + src/app/pages/market/pages/collections/collections.page.ts + 69 + + Ein völlig gebührenfreier Marktplatz für Non-Fungible Tokens (NFTs), digitale Sammlerstücke, digitale Kunst, Eigentumsrechte und vieles mehr. + + + NFT Collections + + src/app/pages/market/pages/market/market.page.html + 2 + + NFT-Sammlungen + + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/market/pages/market/market.page.html + 11,13 + + Einige Sammlungen werden möglicherweise noch nicht in das dezentrale Netzwerk migriert. Stelle sicher, dass du weißt, was du kaufst. + + + I understand + + src/app/pages/market/pages/market/market.page.html + 22,23 + + + src/app/pages/member/pages/tokens/tokens.page.html + 43,44 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 22,23 + + Einverstanden + + + Collections + + src/app/pages/market/pages/market/market.page.ts + 12 + + + src/app/pages/market/pages/market/market.page.ts + 33 + + + src/app/pages/space/pages/space/space.page.ts + 45 + + Kollektionen + + + Total staked + + src/app/pages/member/pages/activity/activity.page.html + 17,18 + + Insgesamt gestaked + + + Staking Value: + + src/app/pages/member/pages/activity/activity.page.html + 29,39 + + Staking Wert: + + + Claimable Reward + + src/app/pages/member/pages/activity/activity.page.html + 47,48 + + Beanspruchbare Belohnung + + + Stake more + + src/app/pages/member/pages/activity/activity.page.html + 104,105 + + Stake mehr + + + Stake + + src/app/pages/member/pages/activity/activity.page.html + 107,108 + + Stake + + + My Staking + + src/app/pages/member/pages/activity/activity.page.html + 133 + + Mein Staking + + + until + + src/app/pages/member/pages/activity/activity.page.html + 138 + + bis + + + My Favourites + + src/app/pages/member/pages/activity/activity.page.html + 152 + + Meine Favoriten + + + View All + + src/app/pages/member/pages/activity/activity.page.html + 155 + + Alle ansehen + + + Profile Options + + src/app/pages/member/pages/activity/activity.page.html + 172 + + Profil Optionen + + + Edit Profile + + src/app/pages/member/pages/activity/activity.page.html + 185 + + Profil bearbeiten + + + Manage Addresses + + src/app/pages/member/pages/activity/activity.page.html + 191 + + + src/app/pages/space/pages/manage/manage.page.html + 27 + + Adressen verwalten + + + Export All Transactions + + src/app/pages/member/pages/activity/activity.page.html + 202 + + Alle Transaktionen exportieren + + + Request Verification + + src/app/pages/member/pages/activity/activity.page.html + 227 + + + src/app/pages/space/pages/manage/manage.page.html + 85 + + Verifizierung beantragen + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + Ausstehend + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 18,19 + + Zugelassen + + + No Awards + + src/app/pages/member/pages/awards/awards.page.html + 34,35 + + + src/app/pages/space/pages/awards/awards.page.html + 63,64 + + Keine Auszeichnungen + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 44,45 + + Entdecke Auszeichnungen + + + Reputation + + src/app/pages/member/pages/badges/badges.page.html + 2 + + + src/app/pages/member/pages/member/member.page.ts + 63 + + Reputation + + + Spaces + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Räume + + + Awards + + src/app/pages/member/pages/badges/badges.page.html + 27,28 + + Auszeichnungen + + + Total Rewards + + src/app/pages/member/pages/badges/badges.page.html + 33,34 + + Gesamt Belohnungen + + + My profile + + src/app/pages/member/pages/member/member.page.html + 13 + + Mein Profil + + + Profile + + src/app/pages/member/pages/member/member.page.html + 15 + + Profil + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 27,28 + + Profil-Infos + + + Joined + + src/app/pages/member/pages/member/member.page.html + 49 + + Mitglied seit + + + Member - + + src/app/pages/member/pages/member/member.page.ts + 83 + + Mitglieder - + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 145 + + Aktivität + + + Transactions + + src/app/pages/member/pages/member/member.page.ts + 147 + + + src/app/pages/member/pages/transactions/transactions.page.html + 18 + + Transaktionen + + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + src/app/pages/member/pages/nfts/nfts.page.html + 25,26 + + Bringe NFT aus einem anderen Netzwerk nach Soonaverse und erschließe Handelsoptionen. + + + Deposit NFT + + src/app/pages/member/pages/nfts/nfts.page.html + 29,30 + + NFT-Einlage + + + No NFTs + + src/app/pages/member/pages/nfts/nfts.page.html + 59,60 + + + src/app/pages/nft/pages/nft/nft.page.html + 744,745 + + Keine NFTs + + + Tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 11,12 + + Tokens + + + Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 20,21 + + Staking + + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + src/app/pages/member/pages/tokens/tokens.page.html + 32,34 + + Hier findest du nur Token, die verfügbar sind oder noch nicht geminted wurden. Gemintete Token erscheinen immer in deiner dazugehörigen Firefly oder TanglePay-Wallet. + + + Item + + src/app/pages/member/pages/tokens/tokens.page.html + 57 + + + src/app/pages/member/pages/tokens/tokens.page.html + 324 + + + src/app/pages/member/pages/transactions/transactions.page.html + 23 + + Item + + + Total + + src/app/pages/member/pages/tokens/tokens.page.html + 59 + + + src/app/pages/token/pages/trade/trade.page.html + 204 + + + src/app/pages/token/pages/trade/trade.page.html + 278 + + + src/app/pages/token/pages/trade/trade.page.html + 367 + + + src/app/pages/token/pages/trade/trade.page.html + 668 + + Gesamt + + + Owned + + src/app/pages/member/pages/tokens/tokens.page.html + 87 + + + src/app/pages/member/pages/tokens/tokens.page.html + 170 + + + src/app/pages/nft/pages/nft/nft.page.html + 17 + + In Besitz + + + Airdropped + + src/app/pages/member/pages/tokens/tokens.page.html + 118 + + + src/app/pages/member/pages/tokens/tokens.page.html + 172 + + Airdropped + + + from + + src/app/pages/member/pages/tokens/tokens.page.html + 120 + + von + + + Deposit for purchase + + src/app/pages/member/pages/tokens/tokens.page.html + 215 + + Einzahlung zum Kauf + + + No tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 258,259 + + Keine Token + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 297 + + Aktives Staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 300 + + Abgelaufenes Staking + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 307,308 + + Aktives Staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 310,311 + + Abgelaufenes Staking + + + Staked From + + src/app/pages/member/pages/tokens/tokens.page.html + 326 + + Gestaked von + + + Staked Until + + src/app/pages/member/pages/tokens/tokens.page.html + 327 + + Staked bis + + + Multiplier + + src/app/pages/member/pages/tokens/tokens.page.html + 329 + + Multiplikator + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 330 + + Staking-Wert + + + Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 380 + + Stakes + + + No Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 403,404 + + Keine Stakes + + + Staked from - to + + src/app/pages/member/pages/tokens/tokens.page.html + 432,433 + + Gestakt von - bis + + + Amount (Multiplier) + + src/app/pages/member/pages/tokens/tokens.page.html + 445,446 + + Betrag (Multiplikator) + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 457,458 + + Staking-Wert + + + Claim + + src/app/pages/member/pages/tokens/tokens.page.ts + 57 + + Beanspruchen + + + Refund + + src/app/pages/member/pages/tokens/tokens.page.ts + 58 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 19 + + Erstattung + + + Export CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 9 + + CSV exportieren + + + Exporting CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 13 + + CSV wird exportiert + + + No transactions + + src/app/pages/member/pages/transactions/transactions.page.html + 120,121 + + Keine Transaktionen + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 40 + + Einige Dateien wurden nicht hochgeladen + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 51,52 + + Verwende bitte nur Zeichenketten, die aus den folgenden Zeichen bestehen: a-z, A-Z, _, -, 0-9. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + Hochgeladene CSV-Datei + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 67 + + Einige NFTs sind falsch! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 73 + + Dateiname + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 101 + + Fehler + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 160 + + Bestehendes CSV hochladen + + + Upload back once you generate below + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 162 + + Erneut hochladen, sobald du unten generiert hast + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 193,194 + + Du musst zuerst Bilder hochladen. + + + Generate CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 211 + + CSV erstellen + + + Publish NFTs + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 212 + + NFTs veröffentlichen + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 224,225 + + Um mehrere klassische NFTs zu erstellen, musst du die Webversion von Soonaverse verwenden. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Einzel + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Mehrfach + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14 + + NFT Info + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16 + + Name und Beschreibung werden in dem NFT aufgeführt. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 22 + + Name erforderlich. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 34 + + + src/app/pages/proposal/pages/new/new.page.html + 77 + + Beschreibung erforderlich. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 53 + + Alle Zeiten sind in der Zeitzone des Nutzers angegeben. Für generierte NFT und SFT ist der Preis pro Kollektion festgelegt und kann hier nicht geändert werden. + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 92 + + Eigenschaften werden unterhalb deines Items angezeigt. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 102 + + Eigenschaftsname (z.B. Charakter) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 103 + + Wert (z.B: Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 115 + + + src/app/pages/nft/pages/new/single/single.page.html + 151 + + + src/app/pages/nft/pages/new/single/single.page.html + 158 + + Eigenschaftname + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 126,125 + + + src/app/pages/nft/pages/new/single/single.page.html + 163 + + + src/app/pages/nft/pages/new/single/single.page.html + 171,170 + + + src/app/pages/nft/pages/new/single/single.page.html + 228,227 + + + src/app/pages/nft/pages/new/single/single.page.html + 266 + + + src/app/pages/nft/pages/new/single/single.page.html + 272,271 + + Wert + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 142 + + Eigenschaft + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 185 + + Eigenschaft hinzufügen + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 194 + + Attribute werden unter deinem Item angezeigt. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Name der Attribute (z.B. Stamina) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 205 + + Wert (z.B. 10, 1/10, etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 217 + + + src/app/pages/nft/pages/new/single/single.page.html + 254 + + + src/app/pages/nft/pages/new/single/single.page.html + 261 + + Name des Attributs + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 245 + + Attribut + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287 + + Attribut hinzufügen + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 303 + + Lade ein Bild deines NFTs hoch. Unterstützte Dateiformate: PNG, JPEF, WEBP, MP4. Max. Größe: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 333 + + Medien erforderlich + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 348 + + Wähle eine deiner Sammlungen, um dieses NFT anzuzeigen. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 383,384 + + NFT erstellen + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 393,394 + + Vorschau NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 168 + + Dateiname ist ungültig + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 7 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 48 + + + src/app/pages/nft/pages/nft/nft.page.html + 516 + + Nft anschauen + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 109 + + Aktuelles Höchstgebot + + + remaining + + src/app/pages/nft/pages/nft/nft.page.html + 155 + + verbleibend + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 165 + + Auktion beendet + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 173 + + Der Verkauf hat noch nicht begonnen + + + NFT is pending other member's transaction + + src/app/pages/nft/pages/nft/nft.page.html + 181 + + Ausstehende Mitgliedertransaktion unter Verwendung eines NFT + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 190 + + Genehmigung der Kollektion ausstehend + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 198 + + Kollektion abgelehnt! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 213 + + NFT verkaufen + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 218 + + Festen Preis ändern + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 223 + + Auktion ändern + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 240,241 + + Angebot abgeben + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 263,264 + + Jetzt kaufen + + + Bidding + + src/app/pages/nft/pages/nft/nft.page.html + 281 + + Bieten + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 290 + + Aktuelle Gebote + + + Past bids + + src/app/pages/nft/pages/nft/nft.page.html + 298 + + Letzte Gebote (Bids) + + + My biddings + + src/app/pages/nft/pages/nft/nft.page.html + 307 + + Meine Gebote + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 321 + + Mitglied + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 322 + + Gebot an + + + There are no current bids + + src/app/pages/nft/pages/nft/nft.page.html + 369,370 + + Keine aktuellen Gebote vorhanden + + + There are no past bids + + src/app/pages/nft/pages/nft/nft.page.html + 419,420 + + Keine alten Gebote vorhanden + + + There are no records. + + src/app/pages/nft/pages/nft/nft.page.html + 469,470 + + Kein Datensatz vorhanden. + + + Withdraw NFT + + src/app/pages/nft/pages/nft/nft.page.html + 509,510 + + NFT Abheben + + + History + + src/app/pages/nft/pages/nft/nft.page.html + 522 + + Verlauf + + + Minting in Progress + + src/app/pages/nft/pages/nft/nft.page.html + 556 + + Prägen ("Mint") im Gang + + + Available for specific Member Only + + src/app/pages/nft/pages/nft/nft.page.html + 619 + + Nur für bestimmte Mitglieder verfügbar + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 647 + + Zeige alle Transaktionsdetail dieses NFTs auf dem Tangle an + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 685 + + Über die Kollektion + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 694 + + Anzeigen + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 695 + + Kollektion + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 707,706 + + von + + + Are you sure you want to withdraw NFT from Soonaverse? + + src/app/pages/nft/pages/nft/nft.page.html + 800 + + Sind Sie sicher, dass Sie diesen NFT von der Soonaverse Plattform abheben möchten? + + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + src/app/pages/nft/pages/nft/nft.page.html + 802 + + Sobald das NFT zurückgezogen wurde, wird es innerhalb von Soonaverse nicht verfügbar sein und wird nur in deiner Wallet erscheinen. Du kannst das NFT später immer wieder nach Soonaverse übermitteln. + + + Confirm with Metamask + + src/app/pages/nft/pages/nft/nft.page.html + 804 + + Mit Metamask bestätigen + + + View + + src/app/pages/nft/pages/nft/nft.page.ts + 82 + + Ansehen + + + NFT Withdrawn. + + src/app/pages/nft/pages/nft/nft.page.ts + 688 + + NFT zurückgenommen (Withdraw). + + + Oops, it's in another universe + + src/app/pages/nft/pages/not-found/not-found.page.html + 8 + + Hoppla, es ist in einem anderen Universum + + + NFT you are looking for no longer exists on Soonaverse. + + src/app/pages/nft/pages/not-found/not-found.page.html + 12,14 + + NFT, das du suchst, existiert nicht mehr auf Soonaverse. + + + Back to Marketplace + + src/app/pages/nft/pages/not-found/not-found.page.html + 22,24 + + Zurück zum Marktplatz + + + Auction Starts + + src/app/pages/nft/services/helper.service.ts + 145 + + Auktion beginnt + + + Auction Ends + + src/app/pages/nft/services/helper.service.ts + 148 + + Auktion endet + + + Pool by + + src/app/pages/pool/pages/market/pool.page.html + 3,12 + + Pool von + + + What is Pool? + + src/app/pages/pool/pages/market/pool.page.html + 20,21 + + Was ist ein Pool? + + + Anyone can become a liquidity provider (LP) by depositing an equivalent value of each underlying token in return for pool tokens. These tokens track pro-rata LP shares of the total reserves, and can be redeemed for the underlying assets at any time. + + src/app/pages/pool/pages/market/pool.page.html + 23,26 + + Jeder kann ein Liquiditätsanbieter (LP) werden, indem er einen gleichwertigen Wert jedes zugrundeliegenden Tokens im Gegenzug für Pool-Token hinterlegt. Diese Token stellen entsprechende LP-Anteile der Gesamtreserven dar und können jederzeit für die zugrunde liegenden Assets eingelöst werden. + + + Coming SOON + + src/app/pages/pool/pages/market/pool.page.html + 35 + + + src/app/pages/swap/pages/market/swap.page.html + 35 + + Kommt SOON + + + See Pool on iotabee + + src/app/pages/pool/pages/market/pool.page.html + 37,39 + + Siehe Pool auf iotabee + + + What is iotabee? + + src/app/pages/pool/pages/market/pool.page.html + 49 + + + src/app/pages/swap/pages/market/swap.page.html + 49 + + Was ist iotabee? + + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + src/app/pages/pool/pages/market/pool.page.html + 51,54 + + + src/app/pages/swap/pages/market/swap.page.html + 51,54 + + Iotabee ist eine Kombination aus einem dezentralisierten Peer-to-Peer DEX-Protokoll und einem semi-zentralisierten cross-chain SWAP, womit allen Leuten möglich ist, Liquidität zu schaffen und mit Token auf IOTA, Shimmer, Shimmer EVM und anderen EVM-kompatiblen Kanälen wie BSC zu handeln. + + + iotabee.com + + src/app/pages/pool/pages/market/pool.page.html + 61,62 + + + src/app/pages/swap/pages/market/swap.page.html + 61,62 + + iotabee.com + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2 + + Neuer Vorschlag + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 3 + + Vorschlagsinfo + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19 + + Titel und Beschreibung werden in dem Vorschlag angezeigt. Start- und Enddatum bestimmen die Dauer des Vorschlags. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 39 + + + src/app/pages/proposal/pages/new/new.page.html + 50,49 + + Start + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 40 + + Startdatum erforderlich. + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 93 + + Informationen zur Frage + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 95 + + Titel und Beschreibung werden nur für diese Frage angezeigt. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 104 + + Fragetitel erforderlich. + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 143 + + Text und Beschreibung für jede individuelle Antwort. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 157 + + Antworttext erforderlich. + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 192 + + Auswahl hinzufügen + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 207 + + Das ist der Raum, in dem der Vorschlag veröffentlicht wird. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 259 + + Vorschlagseinstellungen + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 261 + + Legt fest, wer Zugang zu dem Vorschlag hat und was die Abstimmungsmethode ist. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 269 + + Zielmitglieder + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 276 + + Alle Wächter + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 283 + + Nur Wächter können über diesen Vorschlag abstimmen + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 289 + + Alle Mitglieder + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 296 + + Alle Mitglieder können über diesen Vorschlag abstimmen + + + Space's Native Token + + src/app/pages/proposal/pages/new/new.page.html + 302 + + + src/app/pages/proposal/services/helper.service.ts + 23 + + Raum Native Token + + + You must have minted token linked to your space first! + + src/app/pages/proposal/pages/new/new.page.html + 313 + + Du musst zuerst Token prägen ("minten") die mit deinem Raum verknüpft sind! + + + All token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 321 + + Alle Token-Inhaber können abstimmen. + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 343,344 + + Vorschlag erstellen + + + Proposal - New + + src/app/pages/proposal/pages/new/new.page.ts + 136 + + + src/app/pages/proposal/pages/new/new.page.ts + 151 + + Vorschlag - Neu + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + src/app/pages/proposal/pages/new/new.page.ts + 137 + + + src/app/pages/proposal/pages/new/new.page.ts + 152 + + Erstellen und stimme über Vorschläge ab, die die Zukunft von DAOs und des Metaverse bestimmen werden. Alles mit nur einem Klick. Trete noch heute bei. + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 321 + + Auswahl + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 328 + + Abzeichen + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 332 + + ID + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 5 + + Endergebnisse + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 74 + + Beschreibung des Vorschlags + + + Proposal - + + src/app/pages/proposal/pages/overview/overview.page.ts + 59 + + Vorschlag - + + + Change Vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 23,24 + + Stimmabgabe ändern + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 26,27 + + Jetzt abstimmen + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 38 + + Abstimmung beginnt + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 51 + + Du bist kein Teil der Abstimmung + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 55 + + Um abstimmen zu können, musst du Teil des Raumes sein, bevor der Vorschlag erstellt wurde. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 64 + + Anmelden um abzustimmen + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 68 + + Um abzustimmen, musst du dich zuerst anmelden. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 79 + + Wächtergenehmigung ausstehend + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 83 + + Dieser Vorschlag wurde noch nicht von einem Wächter genehmigt. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 102 + + Gewichtung + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 48 + + Ausstehende Abstimmung + + + Voted + + src/app/pages/proposal/pages/participants/participants.page.ts + 49 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 156 + + Abgestimmt + + + Proposal - Participants + + src/app/pages/proposal/pages/participants/participants.page.ts + 83 + + Vorschlag – Teilnehmer + + + See all participants within the proposal + + src/app/pages/proposal/pages/participants/participants.page.ts + 84 + + Alle Teilnehmer des Vorschlags anzeigen + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 151 + + soonaverse beigetreten am + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 12,13 + + Genehmigen + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 23,24 + + Ablehnen + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 67 + + Abstimmungsart dieses Vorschlages. + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 75 + + Gesamtgewichtung aller Teilnehmenden innerhalb dieses Vorschlags. + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 22 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 22 + + Aktueller Meilenstein + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 23 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 23 + + Anfangsdatum + + + Voting Type + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 26 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 26 + + Art der Abstimmung + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 27 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 27 + + Gesamtgewichtung + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 79 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 152 + + Vorschlag prüfen + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 87 + + Aktuelle Ergebnisse + + + (weight: ) + + src/app/pages/proposal/pages/proposal/proposal.page.html + 101,102 + + (weight: ) +CONTEXTREQUEST + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 124 + + Ausgewählte Abzeichen + + + Votes + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 42 + + Stimmen + + + Voter + + src/app/pages/proposal/pages/votes/votes.page.html + 14 + + Wähler + + + Option (Weight) + + src/app/pages/proposal/pages/votes/votes.page.html + 16 + + Option (Gewichtung) + + + Expired On + + src/app/pages/proposal/pages/votes/votes.page.html + 18 + + Abgelaufen am + + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + src/app/pages/proposal/pages/votes/votes.page.html + 24 + + Sobald die Rückerstattung des Token-Outputs verbraucht ist, verfällt deine Stimmabgabe und die proportionale Gewichtung wird angewandt. Du musst erneut abstimmen, damit deine Stimme zählt. + + + One Member One Vote + + src/app/pages/proposal/services/helper.service.ts + 25 + + Ein Mitglied eine Stimme + + + XP Reputation - Space + + src/app/pages/proposal/services/helper.service.ts + 27 + + XP Reputation - Raum + + + XP Reputation - Selected Badges + + src/app/pages/proposal/services/helper.service.ts + 29 + + XP Reputation - Ausgewählte Abzeichen + + + Staking + + src/app/pages/soon-staking/pages/staking/staking.page.html + 3,4 + + Staking + + + How much I earn? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 13 + + Wie viel verdiene ich? + + + How it works? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 135 + + Wie funktioniert es? + + + Stake your tokens to earn rewards and unlock new features. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 137,139 + + Stake deine Token, um Belohnungen zu erhalten und neue Funktionen freizuschalten. + + + Unique Perks for stakers + + src/app/pages/soon-staking/pages/staking/staking.page.html + 160 + + Einzigartige Perks für Staker + + + Rewards + + src/app/pages/soon-staking/pages/staking/staking.page.html + 167,168 + + Belohnungen + + + Trading Bonuses + + src/app/pages/soon-staking/pages/staking/staking.page.html + 180 + + Handelsbonus + + + Unique Features + + src/app/pages/soon-staking/pages/staking/staking.page.html + 193 + + Einzigartige Features + + + Earn more er than you think + + src/app/pages/soon-staking/pages/staking/staking.page.html + 209 + + Verdiene mehr als du denkst + + + The more you hold, the more rewards you get. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 214,215 + + Je mehr du hältst, desto mehr Belohnungen bekommst du. + + + New + + src/app/pages/space/pages/awards/awards.page.html + 43 + + + src/app/pages/space/pages/collections/collections.page.html + 48 + + + src/app/pages/space/pages/proposals/proposals.page.html + 42 + + Neu + + + award + + src/app/pages/space/pages/awards/awards.page.html + 44 + + Auszeichnung + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 31 + + + src/app/pages/space/pages/members/members.page.html + 45 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 31 + + Aktiv + + + Space - Awards + + src/app/pages/space/pages/awards/awards.page.ts + 54 + + Raum - Auszeichnungen + + + Space's awards + + src/app/pages/space/pages/awards/awards.page.ts + 55 + + Raum - Auszeichnungen + + + No Collections + + src/app/pages/space/pages/collections/collections.page.html + 69,70 + + Keine Kollektionen + + + Space - Collections + + src/app/pages/space/pages/collections/collections.page.ts + 65 + + Raum - Sammlungen + + + Space's collections + + src/app/pages/space/pages/collections/collections.page.ts + 66 + + Sammlungen des Raums + + + Space Options + + src/app/pages/space/pages/manage/manage.page.html + 2 + + Raum-Optionen + + + Token Options + + src/app/pages/space/pages/manage/manage.page.html + 6 + + Token-Optionen + + + Edit Space + + src/app/pages/space/pages/manage/manage.page.html + 21 + + Raum bearbeiten + + + Manage Guardians + + src/app/pages/space/pages/manage/manage.page.html + 38 + + Wächter verwalten + + + Export Current Members + + src/app/pages/space/pages/manage/manage.page.html + 44 + + Aktuelle Mitglieder exportieren + + + Create New Award + + src/app/pages/space/pages/manage/manage.page.html + 57 + + Neue Auszeichnung erstellen + + + Create New Proposal + + src/app/pages/space/pages/manage/manage.page.html + 68 + + Erstelle einen neuen Vorschlag + + + Create New Collection + + src/app/pages/space/pages/manage/manage.page.html + 79 + + Neue Kollektion erstellen + + + Edit Token + + src/app/pages/space/pages/manage/manage.page.html + 105 + + Token bearbeiten + + + Create Airdrop + + src/app/pages/space/pages/manage/manage.page.html + 127 + + AirDrop erstellen + + + Staking Reward Schedule + + src/app/pages/space/pages/manage/manage.page.html + 135 + + Belohnungsplan für das Staking + + + Export Current Stakers + + src/app/pages/space/pages/manage/manage.page.html + 141 + + Aktuelle Staker exportieren + + + Active + + src/app/pages/space/pages/members/members.page.html + 18,19 + + Aktiv + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 35,36 + + Gesperrt + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 52 + + Gesperrt + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 67 + + + src/app/pages/space/pages/members/members.page.html + 82 + + Mitglied suchen + + + No Members + + src/app/pages/space/pages/members/members.page.html + 110,111 + + Keine Mitglieder + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 118 + + Dem Raum beigetreten am + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 161,162 + + Wächter entfernen + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 174,175 + + Zum Wächter machen + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 184,185 + + Mitglied sperren + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 187,188 + + Mitglied akzeptieren + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 190,191 + + Mitglied entsperren + + + Space - Members + + src/app/pages/space/pages/members/members.page.ts + 76 + + Raum - Mitglieder + + + Space's members + + src/app/pages/space/pages/members/members.page.ts + 77 + + Mitglieder des Raums + + + Upcoming Sale + + src/app/pages/space/pages/overview/overview.page.html + 7 + + Anstehender Verkauf + + + Live Token Sale + + src/app/pages/space/pages/overview/overview.page.html + 9 + + Live Token Verkauf + + + Space - + + src/app/pages/space/pages/overview/overview.page.ts + 55 + + Raum - + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 43 + + Vorschlag + + + No Proposals + + src/app/pages/space/pages/proposals/proposals.page.html + 62,63 + + Keine Vorschläge + + + Space - Proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 54 + + Raum - Vorschläge + + + Space's proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 55 + + Vorschläge des Raums + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 34 + + Space ansehen + + + pending + + src/app/pages/space/pages/space/space-about/space-about.component.html + 153 + + ausstehend + + + Export members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 168 + + Mitglieder exportieren + + + Exporting members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 172 + + Mitglieder exportieren + + + Open to join instantly + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Offen für sofortigen Beitritt + + + Requires approval to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 183 + + Genehmigung zum Beitritt erforderlich + + + Requires + + src/app/pages/space/pages/space/space-about/space-about.component.html + 187 + + Benötigt + + + staked value to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 193 + + gestakter Wert zum Beitritt + + + Related Links + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 92 + + Verwandte Links + + + Claim ownership + + src/app/pages/space/pages/space/space-about/space-about.component.html + 259,260 + + Besitz beanspruchen + + + Space's Wallet Addresses + + src/app/pages/space/pages/space/space-about/space-about.component.html + 290 + + Wallet-Adresse des Raums + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 321 + + Raum verlassen + + + About space + + src/app/pages/space/pages/space/space.page.html + 3 + + Über den Raum + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 55,56 + + + src/app/pages/space/pages/space/space.page.html + 118,119 + + Raum beitreten + + + Pending Request + + src/app/pages/space/pages/space/space.page.html + 68 + + + src/app/pages/space/pages/space/space.page.html + 131 + + Ausstehende Anfrage + + + Ask to join Space + + src/app/pages/space/pages/space/space.page.html + 70 + + + src/app/pages/space/pages/space/space.page.html + 133 + + Raum Beitrittsanfrage + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 82,83 + + + src/app/pages/space/pages/space/space.page.html + 160,161 + + Raum bearbeiten + + + Stake + + src/app/pages/space/pages/space/space.page.html + 144 + + Stake + + + to Join + + src/app/pages/space/pages/space/space.page.html + 147 + + beitreten + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2 + + Neuen Raum erstellen + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3 + + Raum bearbeiten + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17 + + Rauminfo + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19 + + Titel und Beschreibung werden in dem Raum aufgeführt. + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 56 + + Links werden in den Raumdetails aufgeführt. Benutze Account Nutzernamen für Github, Twitter und Discord (name#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 97 + + Nur Discord Einladungscodes werden unterstützt (z.B. RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 104 + + Gib deinen Discord Einladungscode ein + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 125 + + Art des Raums + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 127 + + Jeder Typ hat unterschiedliche Eigenschaften. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 137,138 + + Zum sofortigen Beitritt für alle geöffnet + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 142 + + Erfordert eine Freischaltung des Mitglieds + + + Requires stake value (in space's token) + + src/app/pages/space/pages/upsert/upsert.page.html + 146 + + Erfordert gestakten Wert (in dem jeweiligen Raum-Token) + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 174 + + Avatar ist verpflichtend + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 243,244 + + Raum erstellen + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 256,257 + + Raum speichern + + + Space - New + + src/app/pages/space/pages/upsert/upsert.page.ts + 76 + + Raum - Neu + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/space/pages/upsert/upsert.page.ts + 77 + + Melde dich in wenigen Minuten mit unserem 1-Klick-Setup "DAO-on-Demand" an. Gebührenfreies On-Chain-Voting - Entdecke alle unsere tollen DAO's auf Soonaverse. + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 210 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 216 + + Neu hochladen, um das Existierende zu ersetzen. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 211 + + Deine Marke ist das Wichtigste. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 217 + + Mache sie zu etwas Persönlichem. + + + Swap by + + src/app/pages/swap/pages/market/swap.page.html + 3,12 + + Swap von + + + What is Swap? + + src/app/pages/swap/pages/market/swap.page.html + 20,21 + + Was bedeutet Tausch? + + + See Swap on iotabee + + src/app/pages/swap/pages/market/swap.page.html + 37,39 + + Siehe Swap auf iotabee + + + Create airdrop + + src/app/pages/token/pages/airdrops/airdrops.page.html + 8,9 + + Airdrop erstellen + + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/pages/token/pages/airdrops/airdrops.page.html + 17,19 + + Du kannst ein Governance-Token Airdrop für deine Mitglieder erstellen. Laden dazu eine .csv-Datei mit Benutzeradressen und Zuweisungsdetails hoch. + + + Some rows have been removed + + src/app/pages/token/pages/airdrops/airdrops.page.html + 92 + + Einige Zeilen wurden entfernt + + + Submit airdrop + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 118,119 + + Airdrop übermitteln + + + + row is not valid + + src/app/pages/token/pages/airdrops/airdrops.page.ts + 73 + + Zeile ist ungültig + + + Breakdown + + src/app/pages/token/pages/metrics/metrics.page.html + 1 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 284 + + Aufschlüsselung + + + Token distribution + + src/app/pages/token/pages/metrics/metrics.page.html + 5 + + Token Verteilung + + + Total token supply + + src/app/pages/token/pages/metrics/metrics.page.ts + 56 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 96 + + Token Gesamtmenge + + + Launchpad price per token + + src/app/pages/token/pages/metrics/metrics.page.ts + 67 + + Launchpad-Preis je Token + + + Initial Cap + + src/app/pages/token/pages/metrics/metrics.page.ts + 74 + + Start Kapitialisierung (Initial Cap) + + + Total melted tokens + + src/app/pages/token/pages/metrics/metrics.page.ts + 82 + + Endsumme der Token-Ablösung + + + You can create only ONE token per space and it can never be changed. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 14,15 + + Du kannst nur EINEN Token je Raum erstellen und dieser kann nie geändert werden. + + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 23,26 + + Wichtige Informationen zum Erstellen eines Tokens auf Soonaverse: Bitte lese die Anweisungen und fülle ein auf diesem Bildschirm verfügbares Anmeldeformular aus, wenn du für deine Tokens einen Public Sale machen oder deinen Token auf der Soonsverse Tauschplattform zur Verfügung stellen möchtest. + + + Continue + + src/app/pages/token/pages/new/introduction/introduction.component.html + 38,39 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 191,192 + + + src/app/pages/token/pages/new/overview/overview.component.html + 104,105 + + Weiter + + + Token Sale Requirements + + src/app/pages/token/pages/new/introduction/introduction.component.html + 50 + + Tokenverkauf Anforderungen + + + To create a public sale or use the Token Exchange you must complete our KYC process. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 52 + + Um einen öffentlichen Verkauf zu erstellen oder die Token Exchange zu nutzen, musst du unseren KYC-Prozess abschließen. + + + Begin Process + + src/app/pages/token/pages/new/introduction/introduction.component.html + 58 + + Prozess starten + + + Continue + + + src/app/pages/token/pages/new/introduction/introduction.component.html + 73,74 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 330,331 + + + src/app/pages/token/pages/new/overview/overview.component.html + 214,215 + + Weiter + + + + Token info + + src/app/pages/token/pages/new/metrics/metrics.component.html + 9 + + + src/app/pages/token/pages/new/summary/summary.component.html + 14 + + + src/app/pages/token/pages/token/token.page.html + 3 + + Token Info + + + Name is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 16 + + Der Name ist ungültig. + + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + src/app/pages/token/pages/new/metrics/metrics.component.html + 33 + + Symbol ist ungültig (Länge muss 3 - 5 Zeichen sein und aus den Buchstaben A-Z bestehen). + + + Token supply + + src/app/pages/token/pages/new/metrics/metrics.component.html + 47 + + + src/app/pages/token/pages/new/summary/summary.component.html + 53 + + Token Menge + + + Price per token (MIOTA) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 53 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 58 + + Preis je Token (MIOTA) + + + Price is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 54 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 38 + + Der Preis ist ungültig. + + + Total token supply (up to 6 decimals are supported) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 68 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 74 + + Token gesamt (bis zu 6 Dezimalstellen werden unterstützt) + + + Total supply is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 69 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 107 + + Die Gesamtmenge ist ungültig. + + + Allocation title + + src/app/pages/token/pages/new/metrics/metrics.component.html + 111 + + Allokationtitel + + + % of tokens for sale + + src/app/pages/token/pages/new/metrics/metrics.component.html + 121 + + % der Tokens stehen zum Verkauf + + + Percentage of tokens is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 122 + + Der Prozentsatz der Token ist ungültig. + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 126 + + % der zum Verkauf stehenden Token (Standard 100%) + + + Only 1 of the allocations can be public + + src/app/pages/token/pages/new/metrics/metrics.component.html + 149 + + Nur 1 der Allokation kann öffentlich sein + + + Sum of the percentages must be 100 + + src/app/pages/token/pages/new/metrics/metrics.component.html + 155 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 166 + + Die Summe der Prozentsätze muss 100 ergeben + + + Invalid sum of percentages + + src/app/pages/token/pages/new/metrics/metrics.component.html + 160 + + Ungültiger Prozentsatz + + + Add allocation + + src/app/pages/token/pages/new/metrics/metrics.component.html + 179 + + Allokation hinzufügen + + + Token icon + + src/app/pages/token/pages/new/metrics/metrics.component.html + 221 + + + src/app/pages/token/pages/new/summary/summary.component.html + 265 + + Token Symbol + + + (Recomended size: 400 x 400px) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 223 + + (Empfohlene Größe: 400x400px) + + + Icon is mandatory + + src/app/pages/token/pages/new/metrics/metrics.component.html + 232 + + Symbol ist erforderlich + + + Token price + + src/app/pages/token/pages/new/metrics/metrics.component.html + 264 + + + src/app/pages/token/pages/new/summary/summary.component.html + 283 + + Token Preis + + + Distribution of the token happens after the token offering end date. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 266 + + + src/app/pages/token/pages/new/summary/summary.component.html + 285 + + Die Verteilung des Token erfolgt nach dem Enddatum. + + + Configure the token supply first to see breakdown. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 288 + + Konfiguriere erst den Token Menge, um die Aufschlüsselung anzuzeigen. + + + Token terms and conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 298 + + + src/app/pages/token/pages/new/summary/summary.component.html + 324 + + Token Bedingungen und Konditionen + + + Provide link for Terms and Conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 300 + + Link für Token Bedingungen und Konditionen angeben + + + Terms and Conditions link is invalid. (Start with http:// or https://) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 306 + + Link zu den Nutzungsbedingungen ist ungültig. (Beginne mit http:// oder https://) + + + Token allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 75 + + + src/app/pages/token/pages/new/summary/summary.component.html + 165 + + Informationen zur Tokenzuweisung + + + Allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 76 + + + src/app/pages/token/pages/new/summary/summary.component.ts + 30 + + Allokation hinzufügen + + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 81,82 + + Vergewissere dich, dass nur eine Zuweisung als "Öffentlicher Verkauf" gekennzeichnet ist, da dies später auf Soonaverse verkauft werden kann. + Du kannst einen öffentlichen Verkauf starten, sobald der Token erstellt und genehmigt ist. + + + Create token + + src/app/pages/token/pages/new/new.page.html + 2 + + Token erstellen + + + Introduction + + src/app/pages/token/pages/new/new.page.ts + 32 + + Einführung + + + Metrics + + src/app/pages/token/pages/new/new.page.ts + 33 + + + src/app/pages/token/pages/token/token.page.ts + 38 + + Metriken + + + Summary + + src/app/pages/token/pages/new/new.page.ts + 35 + + Zusammenfassung + + + New Token + + src/app/pages/token/pages/new/new.page.ts + 72 + + Neuer Token + + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + src/app/pages/token/pages/new/new.page.ts + 73 + + Starte dein eigenes Kryptoprojekt im sicheren, gebührenfreien Shimmer-Netzwerk. Erstellen noch heute deinen Token. + + + Token description + + src/app/pages/token/pages/new/overview/overview.component.html + 12 + + + src/app/pages/token/pages/new/summary/summary.component.html + 93 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 6 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 27 + + Token Beschreibung + + + This text will be displayed on the main token page. + + src/app/pages/token/pages/new/overview/overview.component.html + 14 + + Dieser Text wird auf der Hauptseite des Token angezeigt. + + + Title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 23 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 10 + + Der Titel ist ungültig. + + + Description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 38 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 22 + + Die Beschreibung ist ungültig. + + + Short description + + src/app/pages/token/pages/new/overview/overview.component.html + 55 + + + src/app/pages/token/pages/new/summary/summary.component.html + 129 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 49 + + Kurze Beschreibung + + + Short description of the token which will be displayed on the token trading page. + + src/app/pages/token/pages/new/overview/overview.component.html + 57 + + Kurze Beschreibung des Tokens, die auf der Handelsseite des Tokens angezeigt wird. + + + Short title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 66 + + Kurztitel ist ungültig. + + + Short description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 81 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 68 + + Die Kurzbeschreibung ist ungültig. + + + Overview graphics + + src/app/pages/token/pages/new/overview/overview.component.html + 121 + + Übersicht Grafiken + + + Token introductory video / image + + src/app/pages/token/pages/new/overview/overview.component.html + 123 + + Token Einführungsvideo / -bild + + + Introductionary media is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 132 + + Einführungsmedien sind ungültig. + + + Invalid URL. (Start with http:// or https://) + + src/app/pages/token/pages/new/overview/overview.component.html + 168 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 84 + + Ungültige URL. (Starte mit http:// oder https://) + + + Add link + + src/app/pages/token/pages/new/overview/overview.component.html + 191 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 107 + + Link hinzufügen + + + Edit + + src/app/pages/token/pages/new/summary/summary.component.html + 22,23 + + + src/app/pages/token/pages/new/summary/summary.component.html + 61,62 + + + src/app/pages/token/pages/new/summary/summary.component.html + 101,102 + + + src/app/pages/token/pages/new/summary/summary.component.html + 137,138 + + + src/app/pages/token/pages/new/summary/summary.component.html + 173,174 + + Bearbeiten + + + Name + + src/app/pages/token/pages/new/summary/summary.component.html + 30,31 + + Name + + + Symbol + + src/app/pages/token/pages/new/summary/summary.component.html + 41,42 + + Symbol + + + Total token supply + + src/app/pages/token/pages/new/summary/summary.component.html + 80,81 + + Token Gesamtmenge + + + Description title + + src/app/pages/token/pages/new/summary/summary.component.html + 109,110 + + Ein beschreibender Titel + + + Description + + src/app/pages/token/pages/new/summary/summary.component.html + 120,121 + + Beschreibung + + + Short description title + + src/app/pages/token/pages/new/summary/summary.component.html + 145,146 + + Kurzer beschreibender Titel + + + Short description + + src/app/pages/token/pages/new/summary/summary.component.html + 156,157 + + Kurze Beschreibung + + + Allocation title + + src/app/pages/token/pages/new/summary/summary.component.html + 187,188 + + Allokationtitel + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/summary/summary.component.html + 198,199 + + % der zum Verkauf stehenden Token (Standard 100%) + + + Submit token + + src/app/pages/token/pages/new/summary/summary.component.html + 227,228 + + Token einreichen + + + (Recommended size: 400 x 400px) + + src/app/pages/token/pages/new/summary/summary.component.html + 267 + + (Empfohlene Größe: 400x400px) + + + Some description + + src/app/pages/token/pages/new/summary/summary.component.html + 326 + + Kurze Beschreibung + + + Terms&conditions + + src/app/pages/token/pages/new/summary/summary.component.html + 340 + + Terms&conditions + + + Submit token + + + src/app/pages/token/pages/new/summary/summary.component.html + 356,357 + + Token einreichen + + + + Trade token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 15,16 + + Token handeln + + + Buy Tokens + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 28,29 + + Token kaufen + + + Schedule public sale + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 42,43 + + Öffentlicher Verkauf planen + + + Allow Trading + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 57,58 + + Handel erlauben + + + Edit token info + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 86 + + Token Info bearbeiten + + + Check out token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 100 + + Token überprüfen + + + Mint & Approve Token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 132,133 + + Präge ("Minte") & genehmige Token + + + Minting in progress + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 144,145 + + Prägen ("Mint") im Gang + + + Token was not made available on decentralised network yet. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 150 + + Token wurde im dezentralen Netzwerk noch nicht zur Verfügung gestellt. + + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 153,154 + + Token wurde noch nicht in das dezentralisierte Netzwerk migriert. Vergewissere dich, dass du weisst, was du kaufst. + + + Trading enabled. + + src/app/pages/token/pages/token/token-buy/token-buy.component.ts + 86 + + Handel aktiviert. + + + Short description title is invalid. + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 56 + + Die Kurzbeschreibung ist ungültig. + + + Short description title + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 61 + + Kurzer beschreibender Titel + + + Short token description + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 73 + + Kurze Token Beschreibung + + + Sale Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 4 + + Verkaufsinfo + + + Sale schedule + + src/app/pages/token/pages/token/token-info/token-info.component.html + 10 + + Verkaufsplan + + + During cooldown period you are able to trigger refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 41 + + Während der Abklingzeit kannst du die Erstattung durchführen. + + + No Cooldown. Participants can't refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 75,76 + + Keine Abklingzeit. Teilnehmer könne keine Rückerstattung beantragen. + + + Token Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 80 + + + src/app/pages/token/pages/trade/trade.page.html + 57 + + + src/app/pages/token/pages/trade/trade.page.html + 624 + + Token Info + + + My purchased tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 4 + + Meine gekauften Token + + + + + + + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 78,80 + + + + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 90,92 + + Token-Sales-Ziel erreicht! Die Token-Verteilung wird nun berechnet und Überschüsse werden zurückerstattet. + + + Your Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 21 + + Deine Einzahlung + + + Potential Tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 22 + + Mögliche Tokens + + + Token Owned + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 23 + + Token im Besitz + + + Total Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 24 + + Einzahlungen gesamt + + + Total Participants + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 25 + + Teilnehmer insgesamt + + + Sale ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 45 + + Verkauf endet in + + + Cooldown in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 62 + + Abklingzeit läuft + + + Sale in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 64 + + Verkauf läuft + + + Sale starts in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 69 + + Verkauf beginnt in + + + Cooldown ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 73 + + Abklingzeit endet in + + + + + + + src/app/pages/token/pages/token/token.page.html + 47,48 + + + + + Airdrops + + src/app/pages/token/pages/token/token.page.ts + 41 + + Airdrops + + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + src/app/pages/token/pages/token/token.page.ts + 100 + + + src/app/pages/token/pages/trade/trade.page.ts + 275 + + Kaufe, verkaufe und handle SOON- und Shimmer-Token an einer sicheren "Non-Custodial" L1-Börse. Beginne noch heute. + + + Ongoing Sale + + src/app/pages/token/pages/token/token.page.ts + 248 + + Laufender Verkauf + + + Scheduled + + src/app/pages/token/pages/token/token.page.ts + 250 + + Geplant + + + Cooldown + + src/app/pages/token/pages/token/token.page.ts + 252 + + Abklingzeit + + + Processing + + src/app/pages/token/pages/token/token.page.ts + 254 + + In Bearbeitung + + + Order book + + src/app/pages/token/pages/trade/trade.page.html + 94 + + + src/app/pages/token/pages/trade/trade.page.html + 644 + + Orderbuch + + + Token chart + + src/app/pages/token/pages/trade/trade.page.html + 102 + + + src/app/pages/token/pages/trade/trade.page.html + 795 + + Token Chart + + + My trading + + src/app/pages/token/pages/trade/trade.page.html + 158 + + Mein Handel + + + Open buy orders + + src/app/pages/token/pages/trade/trade.page.html + 166 + + Offene Kaufaufträge + + + Open sell orders + + src/app/pages/token/pages/trade/trade.page.html + 174 + + Offene Verkaufsaufträge + + + Order history + + src/app/pages/token/pages/trade/trade.page.html + 182 + + Kaufhistorie + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 213 + + + src/app/pages/token/pages/trade/trade.page.html + 287 + + Ausgeführt + + + There are no buys + + src/app/pages/token/pages/trade/trade.page.html + 257,258 + + Keine Käufe vorhanden + + + Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 321,322 + + + src/app/pages/token/pages/trade/trade.page.html + 416,417 + + Abgebrochen + + + Expired + + src/app/pages/token/pages/trade/trade.page.html + 324,325 + + + src/app/pages/token/pages/trade/trade.page.html + 422,423 + + Abgelaufen + + + There are no sells + + src/app/pages/token/pages/trade/trade.page.html + 345,346 + + Keine Verkäufe vorhanden + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 388 + + + src/app/pages/token/pages/trade/trade.page.html + 1213 + + Verkaufen + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 404,405 + + Ausgeführt + + + Partially Fulfilled / Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 410,411 + + Teilweise ausgeführt / storniert + + + Fulfilled / Cancelled (unfulfillable) + + src/app/pages/token/pages/trade/trade.page.html + 419,420 + + Erfüllt / abgebrochen (unerfüllbar) + + + There is no order history + + src/app/pages/token/pages/trade/trade.page.html + 434,435 + + Es gibt keine Handelshistorie + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 477,478 + + + src/app/pages/token/pages/trade/trade.page.html + 488,489 + + + src/app/pages/token/pages/trade/trade.page.html + 919,920 + + Verkaufen + + + Available + + src/app/pages/token/pages/trade/trade.page.html + 530,531 + + Verfügbar + + + Current Price + + src/app/pages/token/pages/trade/trade.page.html + 542 + + Aktueller Preis + + + Change 24h + + src/app/pages/token/pages/trade/trade.page.html + 564,565 + + Änderung 24h + + + ( ~ ) + + src/app/pages/token/pages/trade/trade.page.html + 729,732 + + ( ~ ) + + + current price + + src/app/pages/token/pages/trade/trade.page.html + 737,738 + + aktueller Preis + + + There is no activity yet + + src/app/pages/token/pages/trade/trade.page.html + 788,789 + + Noch keine Aktivität vorhanden + + + Trade history + + src/app/pages/token/pages/trade/trade.page.html + 829,830 + + Handelshistorie + + + There is no trade history + + src/app/pages/token/pages/trade/trade.page.html + 894,895 + + Es gibt keine Handelshistorie + + + You don’t have enough tokens + + src/app/pages/token/pages/trade/trade.page.html + 928 + + Du hast zu wenige Tokens + + + Amount to + + src/app/pages/token/pages/trade/trade.page.html + 935,936 + + Betrag zum + + + Balance + + src/app/pages/token/pages/trade/trade.page.html + 979 + + Guthaben + + + Set your price per 1 + + src/app/pages/token/pages/trade/trade.page.html + 998,1000 + + Setze deinen Preis pro 1 + + + LIMIT PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1009,1010 + + PREIS LIMIT + + + MARKET PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1017,1018 + + Markt-Preis + + + ~ + + src/app/pages/token/pages/trade/trade.page.html + 1038,1041 + + + src/app/pages/token/pages/trade/trade.page.html + 1145,1148 + + ~ + + + Set Current Price + + src/app/pages/token/pages/trade/trade.page.html + 1069 + + Aktuellen Preis festlegen + + + Set BID + + src/app/pages/token/pages/trade/trade.page.html + 1093,1104 + + Setze BID + + + The bid price is the highest price that a particular buyer is willing to pay. + + src/app/pages/token/pages/trade/trade.page.html + 1100 + + Der Gebots-Preis (Bid-Preis) ist der höchste Preis, den ein bestimmter Käufer bereit ist zu bezahlen. + + + Set ASK + + src/app/pages/token/pages/trade/trade.page.html + 1109,1120 + + Setze ASK + + + The asking price is the minimum price that an individual would be willing to sell their asset. + + src/app/pages/token/pages/trade/trade.page.html + 1116 + + Der Nachfrage-Preis ist der Minimum-Preis, für den eine Person bereit ist ihre Tokens zu verkaufen. + + + You will spend + + src/app/pages/token/pages/trade/trade.page.html + 1129,1130 + + Du wirst ausgeben + + + Minimum total has to be at least + + src/app/pages/token/pages/trade/trade.page.html + 1163 + + Mindestbetrag mindestens + + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + src/app/pages/token/pages/trade/trade.page.html + 1179 + + Die Soonaverse Treasury erhält 2,5% des Verkaufspreises. Es gibt keine versteckten Gebühren. Der Kauf von Token ist kostenlos. + + + 1h + + src/app/pages/token/pages/trade/trade.page.ts + 118 + + 1h + + + 4h + + src/app/pages/token/pages/trade/trade.page.ts + 119 + + 4h + + + 1d + + src/app/pages/token/pages/trade/trade.page.ts + 120 + + 1 d + + + 1w + + src/app/pages/token/pages/trade/trade.page.ts + 121 + + 1w + + + Bids + + src/app/pages/token/pages/trade/trade.page.ts + 563 + + Gebote (Bids) + + + Asks + + src/app/pages/token/pages/trade/trade.page.ts + 567 + + Nachfrage (Asks) + + + Cancelled + + src/app/pages/token/services/helper.service.ts + 201 + + Abgebrochen + + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 42 + + Entdecke die besten Shimmer, IOTA und SOON Kryptowährungen. Preisdiagramme, Kryptoprofile, an einer sicheren "non-custodial" L1-Börse! Melde dich noch heute an. + + + Go to trading pairs to add your favourite tokens. + + src/app/pages/tokens/pages/favourites/favourites.page.html + 47,48 + + Gehe zu den Handelspaaren, um deine Lieblings-Token hinzuzufügen. + + + Add favourites + + src/app/pages/tokens/pages/favourites/favourites.page.html + 56,57 + + Favoriten hinzufügen + + + Tokens - Favourite + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 52 + + Tokens - Favorit + + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 53 + + Kaufe, tausche und halte deine Lieblings-Shimmer-, IOTA- und SOON-Token. Unsere sicherer L1-Exchange ist bereit für dich! Melde dich noch heute an. + + + Tokens - Launchpad + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 41 + + Tokens - Launchpad + + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 42 + + Sammle Geld, baue dein Follow-up, wachse mit dem Publikum und LAUNCH deinen Shimmer Token mit dem Soonaverse Launchpad. Trete noch heute bei. + + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/tokens/pages/tokens/tokens.page.html + 11,13 + + Einige Tokens werden möglicherweise noch nicht in das dezentrale Netzwerk migriert. Stelle sicher, dass du weißt, was du kaufst. + + + Highlighted Token + + src/app/pages/tokens/pages/tokens/tokens.page.html + 49 + + Hervorgehobener Token + + + Favorites + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 17 + + Favoriten + + + All tokens + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 20 + + Alle Token + + + Trading pairs + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 21 + + Handelspaare + + + Launchpad + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 22 + + Launchpad + + + Tokens - Trading Pairs + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 43 + + Tokens - Handelspaare + + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 44 + + Die umfassendste Liste der Shimmer Projekte, SOON Währungspaare und Märkte an einer sicheren, "non-custodial" L1 Börse. Melde dich noch heute an! + + + AuditOne Validation + + src/app/service-modules/audit-one/components/modal/modal.component.html + 3 + + AuditOne Validierung + + + Requested On + + src/app/service-modules/audit-one/components/modal/modal.component.html + 22 + + Angefordert am + + + Last Update + + src/app/service-modules/audit-one/components/modal/modal.component.html + 23 + + Letztes Update + + + There are no records. + + src/app/service-modules/audit-one/components/modal/modal.component.html + 52 + + Kein Datensatz verfügbar. + + + AuditOne + + src/app/service-modules/audit-one/components/widget/widget.component.html + 11 + + AuditOne + + + Verified + + src/app/service-modules/audit-one/components/widget/widget.component.html + 47 + + Verifiziert + + + See more + + src/app/service-modules/audit-one/components/widget/widget.component.html + 52 + + Mehr anzeigen + + + + diff --git a/src/locale/messages.es-ES.xlf b/src/locale/messages.es-ES.xlf new file mode 100644 index 0000000..58fefcc --- /dev/null +++ b/src/locale/messages.es-ES.xlf @@ -0,0 +1,13269 @@ + + + + + + Top Members + + src/app/@core/services/filter-storage/filter-storage.service.ts + 97 + + Top Miembros + + + Recent + + src/app/@core/services/filter-storage/filter-storage.service.ts + 98 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 116 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 133 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 147 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 165 + + Reciente + + + Oldest + + src/app/@core/services/filter-storage/filter-storage.service.ts + 99 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 117 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 134 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 148 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 166 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 188 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 209 + + Más antiguo + + + Ending Soon + + src/app/@core/services/filter-storage/filter-storage.service.ts + 115 + + Finaliza pronto + + + Ending SOON + + src/app/@core/services/filter-storage/filter-storage.service.ts + 164 + + Finaliza pronto + + + Available Date + + src/app/@core/services/filter-storage/filter-storage.service.ts + 182 + + Fecha disponible + + + Recently Created + + src/app/@core/services/filter-storage/filter-storage.service.ts + 183 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 208 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 57 + + Creado recientemente + + + Price: Low to High + + src/app/@core/services/filter-storage/filter-storage.service.ts + 184 + + Precio: Menos a Más + + + Price: High to Low + + src/app/@core/services/filter-storage/filter-storage.service.ts + 185 + + Precio: Más a Menos + + + Top Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 186 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 206 + + Top Comercializado + + + Recently Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 187 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 207 + + Intercambios Recientes + + + Public Vote + + src/app/@core/services/filter-storage/filter-storage.service.ts + 202 + + Voto público + + + Community Rank + + src/app/@core/services/filter-storage/filter-storage.service.ts + 203 + + Rango de la comunidad + + + SOON on Sale + + src/app/@core/services/filter-storage/filter-storage.service.ts + 204 + + SOON a la venta + + + Recently Minted + + src/app/@core/services/filter-storage/filter-storage.service.ts + 205 + + Creado recientemente + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 74 + + Volver + + + Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products. + + src/app/@core/services/seo/seo.service.ts + 7 + + Soonaverse es una plataforma para crear y gestionar organizaciones autónomas descentralizadas (DAOs), NFTs, proyectos, empresas y mercados, directamente sobre la red sin comisiones de IOTA. Cualquier organización puede crear y/o tradear activos líquidos utilizando nuestros productos de Marketplace, Launchpad y Token Exchange. + + + Bill Payment + + src/app/@core/services/transaction/transaction.service.ts + 18 + + Factura + + + Bill (royalty) + + src/app/@core/services/transaction/transaction.service.ts + 20 + + Factura (regalía) + + + Credit + + src/app/@core/services/transaction/transaction.service.ts + 26 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 336 + + Crédito + + + Payment + + src/app/@core/services/transaction/transaction.service.ts + 28 + + Pago + + + Credit NFT + + src/app/@core/services/transaction/transaction.service.ts + 30 + + Abonar NFT + + + Mint Collection + + src/app/@core/services/transaction/transaction.service.ts + 32 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 36 + + Crear Colección + + + Mint Token + + src/app/@core/services/transaction/transaction.service.ts + 34 + + + src/app/pages/space/pages/manage/manage.page.html + 116 + + Crear Token + + + Withdraw Asset + + src/app/@core/services/transaction/transaction.service.ts + 36 + + Retirar Activos + + + Unlock + + src/app/@core/services/transaction/transaction.service.ts + 38 + + Desbloquear + + + Vote + + src/app/@core/services/transaction/transaction.service.ts + 40 + + Votar + + + Order + + src/app/@core/services/transaction/transaction.service.ts + 42 + + Pedido + + + (Mint Alias) + + src/app/@core/services/transaction/transaction.service.ts + 49 + + (Acuñar Alias) + + + (Mint NFTs) + + src/app/@core/services/transaction/transaction.service.ts + 51 + + (Acuñar NFTs) + + + (Mint Foundry) + + src/app/@core/services/transaction/transaction.service.ts + 53 + + (Acuñar Fundidora) + + + (Send Alias to Guardian) + + src/app/@core/services/transaction/transaction.service.ts + 55 + + (Enviar alias al Guardián) + + + (Lock Collection) + + src/app/@core/services/transaction/transaction.service.ts + 57 + + (Crear Colección) + + + Discover + + src/app/@shell/ui/header/header.component.html + 76 + + + src/app/components/auth/services/auth.service.ts + 83 + + Descubre + + + Create new + + src/app/@shell/ui/header/header.component.html + 91 + + Crear nuevo + + + Space + + src/app/@shell/ui/header/header.component.html + 97 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100 + + + src/app/pages/collection/pages/collection/collection.page.html + 110 + + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 206,205 + + + src/app/pages/token/pages/new/summary/summary.component.html + 242,241 + + Espacio + + + Proposal + + src/app/@shell/ui/header/header.component.html + 103 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 29 + + Propuesta + + + Award + + src/app/@shell/ui/header/header.component.html + 106 + + + src/app/pages/award/pages/award/award.page.html + 29 + + + src/app/pages/award/pages/award/award.page.ts + 100 + + Premio + + + Collection + + src/app/@shell/ui/header/header.component.html + 110 + + + src/app/@shell/ui/header/header.component.html + 129 + + + src/app/pages/collection/pages/collection/collection.page.html + 37 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136 + + + src/app/pages/nft/pages/new/single/single.page.html + 346 + + + src/app/pages/space/pages/collections/collections.page.html + 49 + + Colección + + + Token + + src/app/@shell/ui/header/header.component.html + 113 + + + src/app/@shell/ui/header/header.component.html + 132 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 321 + + + src/app/pages/token/pages/token/token.page.html + 29 + + + src/app/pages/token/pages/token/token.page.ts + 99 + + + src/app/pages/token/pages/trade/trade.page.ts + 274 + + Token + + + To unlock more features you have to stake SOON token. + + src/app/@shell/ui/header/header.component.html + 124,126 + + Para desbloquear más funciones debes hacer Staking de Tokens SOON. + + + VIP LEVEL + + src/app/@shell/ui/header/header.component.html + 197,198 + + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 37,38 + + + src/app/pages/member/pages/activity/activity.page.html + 146,147 + + NIVEL VIP + + + None. + + src/app/@shell/ui/header/header.component.html + 232 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 77 + + Ninguno. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 240 + + + src/app/components/auth/services/auth.service.ts + 551 + + Mi Perfil + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 265,266 + + La compra no se ha completado + + + You have + + src/app/@shell/ui/header/header.component.html + 270 + + Tu tienes + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 272 + + para finalizar la transacción + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 282,283 + + Abrir Pago + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 334 + + Ganaste el NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 335 + + Eres un orgulloso dueño de un nuevo NFT. ¡Felicidades! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 342 + + ¡Perdiste tu puja! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 343 + + Tu puja en + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 344 + + fue superada. ¡Inténtalo de nuevo! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 351 + + acaba de ofrecer + + + for + + src/app/@shell/ui/header/header.component.ts + 352 + + + src/app/components/timeline/timeline.component.html + 171 + + para + + + Your + + src/app/@shell/ui/header/header.component.ts + 353 + + Tu + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 354 + + ha recibido una nueva puja para + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 377 + + No soportado + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 378 + + Esta notificación aún no está soportada en tu idioma + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27,28 + + Espacio + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 38,39 + + Propuesta + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 49,50 + + Premio + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 60,61 + + Colección + + + Token + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 70,71 + + Token + + + Stake more SOON to create tokens and collections. + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 81,84 + + Aumentar el Staking de SOON para crear tokens y colecciones. + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 57,58 + + Conectar a tu billetera de Metamask + + + Connect via TanglePay + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 73 + + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 47 + + Conectar vía TanglePay + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 97 + + Cerrar sesión + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 103 + + Desarrollado por + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8 + + La página que buscas no se ha encontrado + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 9,11 + + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Descubre Soonaverse + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 19 + + Estado de la red + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 30,31 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 84,85 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 140,141 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 197,198 + + Estado de la red + + + Operational + + src/app/@shell/ui/sider/network-status/network-status.component.html + 36 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 90 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 146 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 203 + + Operacional + + + Degraded Performance + + src/app/@shell/ui/sider/network-status/network-status.component.html + 43 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 97 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 153 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 210 + + Rendimiento Degradado + + + Down + + src/app/@shell/ui/sider/network-status/network-status.component.html + 50 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 104 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 160 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 217 + + Caída + + + Last milestone + + src/app/@shell/ui/sider/network-status/network-status.component.html + 57,58 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 111,112 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 170,171 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 224,225 + + Último hito + + + Devnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 78,79 + + + src/app/components/network/components/select-network/select-network.component.html + 61,63 + + Red de Desarrollo + + + Shimmer Mainnet Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 132,133 + + Shimmer Mainnet llega PRONTO + + + Testnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 191,192 + + + src/app/components/network/components/select-network/select-network.component.html + 33,35 + + Red de Prueba + + + Assembly + + src/app/@shell/ui/sider/network-status/network-status.component.html + 237 + + Assembly + + + Assembly Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 244,245 + + Assembly Llega PRONTO + + + Shimmer EVM Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 266,267 + + Shimmer EVM llega PRONTO + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 48 + + Mira la documentación + + + Show more + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 47 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 27 + + + src/app/components/timeline/timeline.component.html + 304 + + Ver más + + + Show less + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 48 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 28 + + + src/app/components/timeline/timeline.component.html + 303 + + Mostrar menos + + + Search here... + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 50 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 30 + + Busca aquí... + + + Reset + + + src/app/components/algolia/algolia-clear/algolia-clear.component.html + 5,7 + + Reiniciar + + + + Search + + src/app/components/algolia/search/search.component.html + 20,19 + + + src/app/components/collection/components/select-collection/select-collection.component.html + 95,94 + + + src/app/components/space/components/select-space/select-space.component.html + 95,94 + + Buscar + + + Start typing... + + src/app/components/algolia/search/search.component.html + 36 + + Empiece a escribir... + + + Open + + src/app/components/algolia/services/algolia.service.ts + 32 + + Abrir + + + Guardians of Space Only + + src/app/components/algolia/services/algolia.service.ts + 34 + + Guardianes del Espacio solamente + + + Members of Space Only + + src/app/components/algolia/services/algolia.service.ts + 36 + + Solo miembros del Espacio + + + Members With Badge Only + + src/app/components/algolia/services/algolia.service.ts + 38 + + Solo Miembros con Insignia + + + Members With NFT only + + src/app/components/algolia/services/algolia.service.ts + 40 + + Miembros con NFT solamente + + + Unavailable for sale + + src/app/components/algolia/services/algolia.service.ts + 53 + + No disponible para la venta + + + On Auction + + src/app/components/algolia/services/algolia.service.ts + 55 + + En Subasta + + + Available + + src/app/components/algolia/services/algolia.service.ts + 57 + + + src/app/components/award/components/award-status/award-status.component.html + 23 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 61 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 162 + + + src/app/pages/space/pages/collections/collections.page.ts + 31 + + + src/app/pages/token/pages/token/token.page.ts + 256 + + Disponible + + + On Sale + + src/app/components/algolia/services/algolia.service.ts + 59 + + En venta + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 19 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23 + + Conectar a tu billetera Metamask + + + TanglePay + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 43 + + Tanglepay + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 67 + + Asegúrate de seleccionar la cadena pública de IOTA EVM en Metamask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 69 + + Nombre de Red: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 70 + + URL RPC: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 71 + + ID de la Cadena: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 89,90 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 120,121 + + Cancelar + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 8,10 + + Conectar + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Desconectar + + + Staking + + src/app/components/auth/services/auth.service.ts + 90 + + Staking + + + Tokens + + src/app/components/auth/services/auth.service.ts + 97 + + + src/app/pages/discover/pages/awards/awards.page.html + 145,144 + + + src/app/pages/member/pages/member/member.page.ts + 66 + + + src/app/pages/member/pages/tokens/tokens.page.html + 49 + + + src/app/pages/member/pages/tokens/tokens.page.html + 235 + + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 41 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 2 + + Tokens + + + Swap + + src/app/components/auth/services/auth.service.ts + 104 + + Intercambio + + + Pool + + src/app/components/auth/services/auth.service.ts + 111 + + Fondo + + + Marketplace + + src/app/components/auth/services/auth.service.ts + 118 + + Mercado + + + My Overview + + src/app/components/auth/services/auth.service.ts + 125 + + + src/app/pages/dashboard/dashboard.page.html + 2 + + Mi Resumen + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 232 + + No se puede firmar la transacción. Por favor, intente recargar la página. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 278 + + ¡Primero debes desbloquear tu MetaMask! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 290 + + Debes habilitar el acceso para leer la dirección de tu cuenta. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 298 + + ¡Por favor, asegúrate de seleccionar la dirección en MetaMask! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 307 + + + src/app/components/auth/services/auth.service.ts + 378 + + ¡No se puede conseguir nonce para autenticar! + + + Unable to connect your TanglePay wallet. + + src/app/components/auth/services/auth.service.ts + 343 + + + src/app/components/auth/services/auth.service.ts + 482 + + No se puede conectar con su TanglePay. + + + Unable to detect address in TanglePay! + + src/app/components/auth/services/auth.service.ts + 349 + + No se puede detectar la dirección en TanglePay! + + + You have to open Soonaverse in wallet app. + + src/app/components/auth/services/auth.service.ts + 443 + + Tienes que abrir Soonaverse en MetaMask. + + + Failed to initialize wallet, try to reload page. + + src/app/components/auth/services/auth.service.ts + 445 + + Error al inicializar MetaMask, intenta recargar página. + + + Give badges + + src/app/components/award/components/award-awards/award-awards.component.html + 11 + + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 16 + + Dar insignias + + + Once issued, this badge is sent to the rewarded participant's wallet. + + src/app/components/award/components/award-awards/award-awards.component.html + 36 + + Una vez emitida, esta insignia se envía a la billetera del participante premiado. + + + Upload CSV + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 31,32 + + Subir CSV + + + Download CSV template + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 34 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 85 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 10 + + Descarga plantilla CSV + + + You can create badge airdrops for any user. You can upload CSV with users addresses and they will be properly reward. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 42,44 + + Puedes crear insignias de AirDrop para cualquier usuario. Puedes subir CSV con direcciones de usuarios y serán adecuadamente recompensadas. + + + If you don’t know how to prepare CSV file, you can download our template made for you. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 50,51 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 101,102 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 25,26 + + Si no sabe cómo preparar el archivo CSV, puede descargar nuestra plantilla hecha para usted. + + + Confirm schedule + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 77 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 128 + + Confirmar calendario + + + Address + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 97 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 21 + + Address + + + Action + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 98 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 288 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 153 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 22 + + + src/app/pages/token/pages/trade/trade.page.html + 214 + + + src/app/pages/token/pages/trade/trade.page.html + 288 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 24 + + Acción + + + Badge + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 104 + + + src/app/pages/award/pages/new/new.page.html + 298,297 + + Insignia + + + Submitted. + + src/app/components/award/components/award-give-badges/award-give-badges.component.ts + 103 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 137 + + Enviado. + + + Fund Award & Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 3 + + Fondo de recompensa & minteo + + + Reward Token + + src/app/components/award/components/award-mint/award-mint.component.html + 21 + + Token de Recompensa + + + Reward to be funded + + src/app/components/award/components/award-mint/award-mint.component.html + 43 + + Recompensa a financiar + + + Confirm & Start + + src/app/components/award/components/award-mint/award-mint.component.html + 98,99 + + Confirmar & Iniciar + + + Once you agree with the terms, the generated address will remain active during the whole process. + + src/app/components/award/components/award-mint/award-mint.component.html + 105,107 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 181,183 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 93,95 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 146,148 + + Una vez que esté de acuerdo con los términos, la dirección generada permanecerá activa durante todo el proceso. + + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + src/app/components/award/components/award-mint/award-mint.component.html + 120,121 + + Utilice el enlace profundo para hacer la transferencia. Desafortunadamente no está soportado de forma manual via Firefly. + + + Transaction history + + src/app/components/award/components/award-mint/award-mint.component.html + 159 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 252 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 246 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 134 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 176 + + + src/app/components/space/components/space-claim/space-claim.component.html + 113 + + + src/app/components/space/components/space-claim/space-claim.component.html + 135 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 122 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 144 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 207 + + + src/app/components/token/components/token-bid/token-bid.component.html + 212 + + + src/app/components/token/components/token-bid/token-bid.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 256 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 249 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 254 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 276 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 209 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 269 + + + src/app/components/token/components/token-stake/token-stake.component.html + 319 + + + src/app/components/token/components/token-stake/token-stake.component.html + 341 + + + src/app/components/token/components/token-vote/token-vote.component.html + 271 + + + src/app/components/token/components/token-vote/token-vote.component.html + 293 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 110 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 146 + + Historial de transacciones + + + Transaction complete. Congratulations. + + src/app/components/award/components/award-mint/award-mint.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 271 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 235 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 277 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 294 + + Transacción completa. Felicidades. + + + Finish Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 191,192 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 289,290 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 281,282 + + Finalizar el minado + + + Funding info + + src/app/components/award/components/award-mint/award-mint.component.ts + 83 + + Información de fondos + + + Make transaction + + src/app/components/award/components/award-mint/award-mint.component.ts + 84 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 92 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 87 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 101 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 77 + + Realizar transacción + + + Wait for confirmation + + src/app/components/award/components/award-mint/award-mint.component.ts + 85 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 93 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 87 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 109 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 88 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 102 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 78 + + Espere por confirmación + + + Confirmed + + src/app/components/award/components/award-mint/award-mint.component.ts + 86 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 94 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 88 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 110 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 89 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 103 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 79 + + Confirmado + + + Payment received. + + src/app/components/award/components/award-mint/award-mint.component.ts + 141 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 150 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 196 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 136 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 136 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 145 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 155 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 140 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 159 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 157 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 131 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 224 + + Pago recibido. + + + Confirming transaction. + + src/app/components/award/components/award-mint/award-mint.component.ts + 158 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 167 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 213 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 164 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 189 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 153 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 153 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 162 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 172 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 157 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 176 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 174 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 148 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 241 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 208 + + Confirmando transacción. + + + Transaction confirmed. + + src/app/components/award/components/award-mint/award-mint.component.ts + 167 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 176 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 222 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 173 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 198 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 162 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 162 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 171 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 181 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 166 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 185 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 183 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 157 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 250 + + Transacción confirmada. + + + Invalid amount received. Refunding transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 186 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 203 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 258 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 182 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 190 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 210 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 186 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 204 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 212 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 190 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 270 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 247 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 159 + + Cantidad no válida recibida. Reembolsando transacción... + + + Invalid transaction.You must gift storage deposit. + + src/app/components/award/components/award-mint/award-mint.component.ts + 209 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 218 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 281 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 206 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 205 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 213 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 225 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 209 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 227 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 227 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 206 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 293 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 262 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 175 + + Transacción no válida. Debe regalar el depósito de almacenamiento. + + + Invalid payment refunded. + + src/app/components/award/components/award-mint/award-mint.component.ts + 224 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 233 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 296 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 220 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 228 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 241 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 224 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 242 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 243 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 221 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 308 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 279 + + Pago reembolsado inválido. + + + Waiting for transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 300 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 321 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 442 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 290 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 317 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 311 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 316 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 306 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 348 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 327 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 319 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 350 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 336 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 415 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 398 + + Esperando la transacción... + + + Pending Funding + + + src/app/components/award/components/award-status/award-status.component.html + 5,6 + + Fondos pendientes + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 11,12 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 11,12 + + Rechazado + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 17 + + + src/app/pages/space/pages/awards/awards.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 32 + + Completo + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 570 + + Solo miembros del espacio + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 557 + + Solo guardianes del espacio + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 29 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 583 + + Solo Miembros con Insignia + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 39 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 595 + + Al menos un NFT de las Colecciones + + + Specific members only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 53 + + Sólo Miembros Específicos + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 28 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 95 + + + src/app/components/token/components/token-card/token-card.component.html + 70 + + Empieza en + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 30 + + + src/app/components/countdown/countdown.component.html + 56 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 109 + + días + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 33 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 122 + + Empieza hoy + + + Collection is not yet migrated to the decentralized network. + + src/app/components/collection/components/collection-card/collection-card.component.html + 59 + + La colección aún no se ha migrado a la red descentralizada. + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 76 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 611 + + Edición limitada + + + Floor Price + + src/app/components/collection/components/collection-card/collection-card.component.html + 104 + + + src/app/pages/collection/pages/collection/collection.page.html + 207 + + Precio mínimo + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 56 + + Pendiente de aprobación + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 66 + + + src/app/pages/space/pages/awards/awards.page.ts + 33 + + + src/app/pages/space/pages/collections/collections.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 33 + + Rechazado + + + Remaining + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 42 + + Restantes + + + NFTs + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 49 + + + src/app/pages/market/pages/market/market.page.ts + 13 + + + src/app/pages/market/pages/market/market.page.ts + 34 + + + src/app/pages/member/pages/member/member.page.ts + 67 + + NFTs + + + Mint collection on network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 3 + + Acuñar colección en la red + + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 43,45 + + Una vez mintados todos los NFT de esta colección estarán disponibles para migrar a la red seleccionada por sus propietarios. + + + Unsold NFT's + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 60,61 + + NFT no vendidos + + + Decide what should happen with all NFTs that were not sold yet. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 67 + + Decide que debería pasar con los NFT aún no vendidos. + + + Keep the same price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 76 + + Mantener el mismo precio + + + Take Ownership + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 86 + + Tomar posesión + + + Set new price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 96 + + Fija nuevo precio + + + Burn all unsold + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 103 + + Quemar todo lo que no se vendió + + + Note that the collection ownership will be granted only to your profile. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 130,131 + + Tenga en cuenta que la propiedad de la colección le pertenecerá solo a su perfil. + + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 141,143 + + Una vez mintada, una colección no puede ser editada y un nuevo NFT no puede ser añadido a esa colección + + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 150 + + Al marcar esta casilla, usted acepta que todas las ventas activas de los NFT de esta colección serán canceladas. + + + Confirm & Start minting + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 174,175 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 139,140 + + Confirmar & Iniciar mintado + + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 196,198 + + Una vez que la transacción esté registrada, cancelaremos todas las ventas en curso de los NFT de la colección y quemaremos todos los NFT no vendidos (si la opción es seleccionada). + + + remaining to make the transfer. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 171 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 90 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 132 + + + src/app/components/space/components/space-claim/space-claim.component.html + 78 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 87 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 140 + + + src/app/components/token/components/token-bid/token-bid.component.html + 170 + + + src/app/components/token/components/token-claim/token-claim.component.html + 199 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 194 + + + src/app/components/token/components/token-stake/token-stake.component.html + 279 + + + src/app/components/token/components/token-vote/token-vote.component.html + 209 + + restantes para hacer la transferencia. + + + Expired + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 213 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 174 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 93 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 135 + + + src/app/components/space/components/space-claim/space-claim.component.html + 81 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 90 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 143 + + + src/app/components/token/components/token-bid/token-bid.component.html + 173 + + + src/app/components/token/components/token-claim/token-claim.component.html + 202 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 197 + + + src/app/components/token/components/token-stake/token-stake.component.html + 282 + + + src/app/components/token/components/token-vote/token-vote.component.html + 212 + + + src/app/pages/token/services/helper.service.ts + 204 + + Expirado + + + NFT's from this collection are now being migrated. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 284,285 + + Los NFT de esta colección están siendo migrados. + + + NFT's in collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 308,309 + + NFT's en la colección + + + Total Storage Fee + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 318 + + Costo total por almacenamiento + + + (NFTs Storage Fee + Collection Storage Fee) + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 319 + + (Tarifa de almacenamiento de NFTs + tarifa de almacenamiento de la colección) + + + Select network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 91 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 86 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 100 + + Seleccionar red + + + Pending + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5,6 + + Pendiente + + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 4 + + + src/app/pages/nft/pages/new/single/single.page.html + 352 + + La colección es necesaria. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 13 + + Seleccionar Colección + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 83 + + Seleccionar una Colección + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 114 + + + src/app/components/space/components/select-space/select-space.component.html + 114 + + Sin resultados para + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 20 + + Todas las Colecciones + + + + + + + src/app/components/confirm-modal/confirm-modal.component.html + 48,50 + + + src/app/components/confirm-modal/confirm-modal.component.html + 51,53 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 246,251 + + + src/app/components/token/components/token-vote/token-vote.component.html + 46,47 + + + src/app/pages/collection/pages/collection/collection.page.html + 130,131 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 55,56 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 71,72 + + + + + Are you sure? + + src/app/components/confirm-modal/confirm-modal.component.ts + 30 + + ¿Estás seguro/a? + + + Close + + src/app/components/confirm-modal/confirm-modal.component.ts + 33 + + Cerrar + + + Confirm + + src/app/components/confirm-modal/confirm-modal.component.ts + 34 + + + src/app/components/token/components/token-bid/token-bid.component.html + 146 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 170 + + + src/app/components/token/components/token-vote/token-vote.component.html + 181 + + Confirmar + + + Connect wallet + + src/app/components/connect-wallet/connect-wallet.component.html + 7 + + Conectar cartera + + + d + + src/app/components/countdown/countdown.component.html + 55 + + d + + + h + + src/app/components/countdown/countdown.component.html + 68 + + h + + + hours + + src/app/components/countdown/countdown.component.html + 69 + + horas + + + m + + src/app/components/countdown/countdown.component.html + 81 + + m + + + min + + src/app/components/countdown/countdown.component.html + 82 + + min + + + s + + src/app/components/countdown/countdown.component.html + 94 + + s + + + sec + + src/app/components/countdown/countdown.component.html + 95 + + seg + + + Ends + + src/app/components/date-tag/date-tag.component.ts + 11 + + Finalizar + + + Price + + src/app/components/iota-input/iota-input.component.html + 3 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 139 + + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 81 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 19 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 124 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 49 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 75 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 37 + + + src/app/pages/token/pages/trade/trade.page.html + 209 + + + src/app/pages/token/pages/trade/trade.page.html + 283 + + + src/app/pages/token/pages/trade/trade.page.html + 372 + + + src/app/pages/token/pages/trade/trade.page.html + 659 + + + src/app/pages/token/pages/trade/trade.page.html + 846 + + Precio + + + Verified addresses + + src/app/components/member/components/member-about/member-about.component.html + 90 + + Dirección verificada + + + Manage + + src/app/components/member/components/member-about/member-about.component.html + 96 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 297 + + + src/app/pages/space/pages/space/space.page.ts + 53 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 18 + + Administrar + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 119 + + Espacios a los que se ha unido recientemente + + + All + + src/app/components/member/components/member-about/member-about.component.html + 124 + + Todo + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 155 + + Aún no hay contribución. + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 74 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 22 + + premios + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 14 + + Mostrar nombre + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19 + + Establece un nombre para mostrar. Esto no cambia tu nombre de usuario. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 26 + + Nombre para mostrar (opcional) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 36 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 208 + + + src/app/pages/space/pages/space/space.page.ts + 44 + + Acerca de + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 41 + + Una breve descripción sobre ti para mostrar en tu perfil. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 48 + + Tu descripción (opcional) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 57 + + + src/app/pages/space/pages/upsert/upsert.page.html + 166 + + Avatar + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 62 + + Personaliza tu identidad en Soonaverse. + + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,78 + + Crea un avatar único y gratuito para tu foto de perfil. Nuevas especies prémium superraras de avatar y coleccionables/accesorios de avatares se podrán intercambiar PRONTO. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 92 + + ¡WOW! Parece que el tuyo es el avatar más bonito de todos. Felicidades. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 97 + + + src/app/pages/space/pages/upsert/upsert.page.html + 54 + + Networking + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 99 + + + src/app/pages/space/pages/upsert/upsert.page.html + 61 + + Nombre de usuario Github inválido. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 105 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67 + + Escribe tu nombre de usuario de Github + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 117 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 177 + + + src/app/pages/space/pages/upsert/upsert.page.html + 78 + + Nombre de usuario de Twitter inválido. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 123 + + + src/app/pages/space/pages/upsert/upsert.page.html + 84 + + Escribe tu nombre de usuario de cuenta de Twitter + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 135 + + Solo el formato de usuario#1234 es compatible. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 141 + + Escribe tu nombre de usuario de Discord + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 155 + + Configuración + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 157,158 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 123,124 + + Guardar cambios + + + + + + + src/app/components/network/components/select-network/select-network.component.html + 4,6 + + + + + Shimmer + + src/app/components/network/components/select-network/select-network.component.html + 17 + + + src/app/components/network/components/select-network/select-network.component.html + 28 + + + src/app/components/network/components/selected-network/selected-network.component.html + 11 + + + src/app/pages/award/pages/award/award.page.html + 44 + + + src/app/pages/collection/pages/collection/collection.page.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 575 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 169 + + Shimmer + + + IOTA + + src/app/components/network/components/select-network/select-network.component.html + 45 + + + src/app/components/network/components/select-network/select-network.component.html + 56 + + + src/app/components/network/components/selected-network/selected-network.component.html + 19 + + + src/app/pages/award/pages/award/award.page.html + 52 + + + src/app/pages/collection/pages/collection/collection.page.html + 59 + + + src/app/pages/nft/pages/nft/nft.page.html + 583 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 177 + + IOTA + + + Selected Network + + src/app/components/network/components/selected-network/selected-network.component.html + 4,6 + + Red seleccionada + + + Shimmer Testnet + + src/app/components/network/components/selected-network/selected-network.component.html + 15 + + + src/app/pages/award/pages/award/award.page.html + 48 + + + src/app/pages/collection/pages/collection/collection.page.html + 55 + + + src/app/pages/nft/pages/nft/nft.page.html + 579 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 173 + + Shimmer Red de prueba + + + IOTA Devnet + + src/app/components/network/components/selected-network/selected-network.component.html + 23 + + + src/app/pages/award/pages/award/award.page.html + 56 + + + src/app/pages/collection/pages/collection/collection.page.html + 63 + + + src/app/pages/nft/pages/nft/nft.page.html + 587 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 181 + + IOTA Devnet + + + Send + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + Enviar + + + to following address: + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + a la siguiente dirección: + + + Copied + + src/app/components/network/components/send-funds/send-funds.component.html + 25 + + + src/app/components/share/share.component.html + 27 + + + src/app/components/wallet-address/wallet-address.component.html + 29 + + Copiado + + + Copy + + src/app/components/network/components/send-funds/send-funds.component.html + 26 + + Copiar + + + Do not send funds from an exchange, always use wallets you fully control. + + + src/app/components/network/components/send-funds/send-funds.component.html + 34,36 + + No envíes fondos desde un 'exchange', usa siempre billetera que poseas por completo. + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 3 + + Pujar + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 15 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 16 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 25 + + Imagen NFT + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 38 + + Finaliza + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 48 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 36 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46 + + Regalías + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 55 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 43 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 53 + + Regalías se deducirán automáticamente y se pagarán a los artistas. + + + Royalties goes to + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 73,74 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 61,62 + + Regalías van a + + + + + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 75,76 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 63,64 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 262,263 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 188,189 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 264,265 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 306,307 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 344,345 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 45 + + + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 109 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Puja más alta actual + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 111 + + + src/app/pages/nft/pages/nft/nft.page.html + 111 + + Mín puja + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 127 + + + src/app/pages/nft/pages/nft/nft.page.html + 116 + + Tu puja es la más alta + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 172,173 + + El precio actual se actualiza en tiempo real + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 208,209 + + La dirección de su NTF se bloqueará para tí para toda la subasta. Después del pago su apuesta será bloqueada, si hay una puja más alta, usted será reembolsado inmediatamente. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 216,218 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,257 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 321,323 + + Si hay una puja superior, serás reembolsado inmediatamente. Si desea hacer otra oferta, envía una cantidad superior a la misma dirección. + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 237,238 + + Pujar + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 278 + + Tus transacciones + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 286 + + Fecha de envío + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 287 + + + src/app/pages/token/pages/trade/trade.page.html + 854 + + Tiempo + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 289 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 33 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 110 + + + src/app/pages/member/pages/tokens/tokens.page.html + 328 + + + src/app/pages/member/pages/transactions/transactions.page.html + 25 + + + src/app/pages/nft/pages/nft/nft.page.html + 323 + + + src/app/pages/nft/pages/nft/nft.page.html + 385 + + + src/app/pages/nft/pages/nft/nft.page.html + 435 + + + src/app/pages/token/pages/trade/trade.page.html + 200 + + + src/app/pages/token/pages/trade/trade.page.html + 274 + + + src/app/pages/token/pages/trade/trade.page.html + 363 + + + src/app/pages/token/pages/trade/trade.page.html + 664 + + + src/app/pages/token/pages/trade/trade.page.html + 851 + + Cantidad + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 55 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 96 + + Detalle + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 311,310 + + + src/app/pages/nft/pages/nft/nft.page.html + 324 + + + src/app/pages/nft/pages/nft/nft.page.html + 360,359 + + + src/app/pages/nft/pages/nft/nft.page.html + 386 + + + src/app/pages/nft/pages/nft/nft.page.html + 410,409 + + + src/app/pages/nft/pages/nft/nft.page.html + 436 + + + src/app/pages/nft/pages/nft/nft.page.html + 460,459 + + Enlace + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 345 + + ¡Felicidades! Has ganado el NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 357,358 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 283,284 + + + src/app/components/token/components/token-bid/token-bid.component.html + 271,272 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 313,314 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 306,307 + + + src/app/components/token/components/token-vote/token-vote.component.html + 330,331 + + Cerrar el pago + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 368,369 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 294,295 + + Ver mi NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 384 + + La puja ha caducado. Buena suerte la próxima vez :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 272 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 459 + + NFT generado + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 274 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 461 + + SFT + + + NFT is not yet migrated to the decentralized network. + + src/app/components/nft/components/nft-card/nft-card.component.html + 65 + + NFT aún no se ha migrado a la red descentralizada. + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 118 + + día + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 156 + + Puja actual + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 191 + + + src/app/pages/nft/pages/nft/nft.page.html + 594 + + Propiedad de + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 229,231 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 167 + + Nuevo NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 3 + + Confirmar compra + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 74,75 + + Importe total + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150,151 + + Confirmar y Reservar + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 156 + + Tu NFT se reservará para la compra por + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + minutos + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 185 + + Hemos recibido una cantidad inválida. Inténtalo de nuevo. + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 237,238 + + Validando tu transacción... + + + Order created. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 437 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 332 + + Orden creada. + + + Deposit NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 215 + + Depositar NFT + + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 46,48 + + Puedes depositar NFT de vuelta a Soonaverse para permitir la compraventa. Una vez procesado tu NFT estará cargado en Soonaverse. Puedes retirar en cualquier momento. + + + Confirm & Start deposit + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 76,77 + + Confirmar & Iniciar depósito + + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 113,115 + + Si NFT no es reconocido dentro de Soonaverse, crearemos una nueva colección y su Espacio asociado. No olvide reclamar este Espacio si usted es el autor original. + + + NFT has been deposited. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 165 + + NFT ha sido depositado. + + + See NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 169,170 + + Ver NFT + + + Terms & Conditions + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 85 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 107 + + Términos & Condiciones + + + Send NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 86 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 108 + + Enviar NFT + + + NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 147 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 172 + + NFT Recibido. + + + Invalid NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 191 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 216 + + NFT inválido recibido. + + + Invalid NFT refunded. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 205 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 230 + + NFT no válido reembolsado. + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 19 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 37 + + Vista previa + + + Sale Starts + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 57 + + + src/app/pages/nft/services/helper.service.ts + 142 + + Comienzo de la venta + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 60 + + + src/app/pages/nft/pages/nft/nft.page.html + 70 + + Precio actual + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 80 + + Autor + + + System info + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 119 + + + src/app/pages/nft/pages/nft/nft.page.html + 634 + + Información del sistema + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 130 + + + src/app/pages/nft/pages/nft/nft.page.html + 654 + + La dirección actual no está conectada a un IOTA mainnet en vivo. Tan pronto como la funcionalidad sea soportada por IOTA/Shimmer, tendrás la capacidad de migrar este NFT en un clic a tu red de preferencia. + + + Properties + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 135 + + + src/app/pages/nft/pages/new/single/single.page.html + 90 + + Atributos + + + Stats + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 139 + + + src/app/pages/nft/pages/new/single/single.page.html + 193,192 + + Atributos + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149 + + + src/app/pages/nft/pages/new/single/single.page.html + 301 + + + src/app/pages/nft/pages/nft/nft.page.html + 27 + + Imagen NFT + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + Metadatos IPFS + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + Imagen IPFS + + + Available once minted... + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 64 + + + src/app/pages/nft/pages/nft/nft.page.ts + 81 + + Disponible una vez acuñado... + + + Set your floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 6,7 + + Fija tu precio piso + + + Available time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 42,43 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 42,43 + + Tiempo disponible + + + NOW + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 54,55 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 54,55 + + AHORA + + + Select Date/Time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Seleccionar Fecha/Hora + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 71 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 71 + + + src/app/pages/nft/pages/new/single/single.page.html + 69 + + Disponible En es requerido. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 80 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 80 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 70 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 81 + + + src/app/pages/nft/pages/new/single/single.page.html + 68 + + + src/app/pages/nft/pages/new/single/single.page.html + 79 + + Disponible en + + + Auction length + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 91,92 + + Duración de la Subasta + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 98 + + Varias longitudes de subastas vendrán en el siguiente sprint una vez que la comunidad haya votado! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 115 + + La duración de la subasta es 3 días + + + Auction can't be canceled after start date + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 125 + + La subasta no puede cancelarse después de la fecha de inicio + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 129 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 145 + + Una vez que su anuncio esté completo, recibirá un mensaje de confirmación. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 138,139 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 154,155 + + Confirmar anuncio + + + Set your price + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 6,7 + + Fija tu precio + + + Sale type + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Tipo de Venta + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 103,104 + + Venta abierta + + + Specific member(s) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 113,114 + + Miembros específicos + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2 + + + src/app/pages/token/pages/trade/trade.page.html + 110 + + Historia de compra venta + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 8,10 + + El objeto es tuyo y solo tuyo + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 16 + + Esto hará que tu artículo no esté disponible para la venta. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 17 + + ¡Detener la venta! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 15 + + Poner artículo a la venta + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 80 + + No está en venta + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 88 + + + src/app/pages/token/services/new.service.ts + 29 + + Precio fijo + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 96 + + Subasta + + + Stake NFT + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 221 + + Stake NFT + + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 46,48 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 147,149 + + Tu NFT será enviado de vuelta en el tiempo determinado. Por favor, ten en cuenta que tienes que proporcionar suficiente depósito de almacenamiento para cubrir el tiempo determinado. Sólo tienes que usar el Tag "soonaverse" en tu billetera. + + + For how long you want to stake? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 56,57 + + + src/app/components/token/components/token-stake/token-stake.component.html + 174,175 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 57,58 + + ¿Durante cuánto tiempo quieres participar? + + + Stake type? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 77,78 + + Tipo de Stake? + + + Confirm & Start Stake + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 118,119 + + Confirmar & Iniciar Stake + + + NFT has been staked. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 207 + + NFT ha sido entregado. + + + See Collection + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 218,219 + + Ver Colección + + + Dynamic + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 76 + + Dinámico + + + Static + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 80 + + Estático + + + More + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 97,98 + + Más + + + Pending + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 6,7 + + + src/app/pages/token/pages/token/token.page.html + 36 + + + src/app/pages/token/pages/trade/trade.page.html + 524 + + Pendiente + + + Rejected + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 12,13 + + + src/app/pages/token/pages/token/token.page.html + 42 + + Rechazado + + + Commencing + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 18,19 + + Comenzando + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 24,25 + + En proceso + + + Completed + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 31,32 + + Completo + + + Share + + src/app/components/share/share.component.html + 16 + + + src/app/components/share/share.component.html + 39 + + + src/app/pages/token/pages/trade/trade.page.html + 64 + + + src/app/pages/token/pages/trade/trade.page.html + 635,634 + + Compartir + + + Copy to clipboard + + src/app/components/share/share.component.html + 28 + + Copiar al portapapeles + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 4 + + + src/app/pages/award/pages/new/new.page.html + 121 + + + src/app/pages/proposal/pages/new/new.page.html + 211 + + Se requiere un espacio. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 13 + + Seleccionar Espacio + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 83 + + + src/app/pages/award/pages/new/new.page.html + 152 + + + src/app/pages/proposal/pages/new/new.page.html + 242 + + Selecciona un espacio + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 20 + + Todos los Espacios + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 19,20 + + Unido + + + members + + src/app/components/space/components/space-card/space-card.component.html + 44 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 23 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + miembros + + + Space Claim + + src/app/components/space/components/space-claim/space-claim.component.html + 3 + + Reclamar espacio + + + Confirm and generate address + + src/app/components/space/components/space-claim/space-claim.component.html + 54,55 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 52,53 + + + src/app/components/token/components/token-claim/token-claim.component.html + 138,139 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 96,97 + + + src/app/components/token/components/token-stake/token-stake.component.html + 251,252 + + Confirmar y generar dirección + + + Claim complete. Congratulations. + + src/app/components/space/components/space-claim/space-claim.component.html + 160 + + + src/app/components/token/components/token-claim/token-claim.component.html + 281 + + Reclamo completado. Enhorabuena. + + + Close + + src/app/components/space/components/space-claim/space-claim.component.html + 172,173 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 181,182 + + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 29,30 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 79,80 + + + src/app/components/token/components/token-claim/token-claim.component.html + 293,294 + + + src/app/components/token/components/token-stake/token-stake.component.html + 378,379 + + Cerrar + + + Invalid amount or invalid senders address. Refunding transaction... + + src/app/components/space/components/space-claim/space-claim.component.ts + 183 + + Cantidad inválida o dirección de remitentes no válida. Reembolsando transacción... + + + Funds refunded. + + src/app/components/space/components/space-claim/space-claim.component.ts + 222 + + Fondos reembolsados. + + + Space claim submitted. + + src/app/components/space/components/space-claim/space-claim.component.ts + 306 + + Reclamo de espacio enviado. + + + Token Reward Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 16 + + Programa de recompensa de Token + + + Existing Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 29 + + Programación existente + + + Upload New + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 37 + + Cargar nuevo + + + Vault address: + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 55,64 + + Dirección de bóveda: + + + Schedule a new Reward + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 82,83 + + Programar una nueva recompensa + + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 93,95 + + Puedes programar nuevas recompensas de staking aquí. Para hacerlo, sube un archivo .csv que contenga direcciones de usuario y detalles de asignación. + + + Start Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 148 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 24 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 24 + + Fecha de Inicio + + + End Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 149 + + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 19 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 25 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 25 + + Fecha de Finalización + + + Vesting Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 150 + + Fecha de adquisición de derechos + + + Tokens to Distribute + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 151 + + Monedas a distribuir + + + Status + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 152 + + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 110,109 + + + src/app/pages/token/pages/trade/trade.page.html + 376 + + Estado + + + Proposal created to remove the reward. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 154 + + Propuesta creada para remover el premio. + + + By checking this box, you agree with + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 12 + + Al marcar esta casilla, aceptas + + + Terms and Conditions + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 13 + + Términos y Condiciones + + + Timeline + + src/app/components/timeline/timeline.component.html + 2 + + + src/app/components/timeline/timeline.component.html + 8 + + Cronología + + + Earned Badge + + src/app/components/timeline/timeline.component.html + 66 + + Insignia Ganada + + + with + + src/app/components/timeline/timeline.component.html + 66 + + con + + + Listed by + + src/app/components/timeline/timeline.component.html + 109 + + Añadido por + + + Made available for auction by + + src/app/components/timeline/timeline.component.html + 112 + + Puesto en subasta por + + + Purchased by + + src/app/components/timeline/timeline.component.html + 170 + + Comprado por + + + See + + src/app/components/timeline/timeline.component.html + 181 + + Ver + + + Hide + + src/app/components/timeline/timeline.component.html + 182 + + Ocultar + + + Listed by space + + src/app/components/timeline/timeline.component.html + 287 + + Filtrar por espacio + + + Refund blocked funds + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 3 + + Reembolsar fondos bloqueados + + + Total available tokens to refund + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 29 + + Total de monedas disponibles para reembolsar + + + Refund complete. Congratulations. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 169 + + Reembolso ha sido completado. Felicidades. + + + Credit refund submitted. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 309 + + Reembolso de crédito enviado. + + + Airdrop tokens on the network + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 3 + + Monedas de Airdrop en la red + + + Tokens to airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 56,57 + + Monedas para Airdrop + + + Confirm & Start Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 86,87 + + Confirmar & Iniciar Airdrop + + + Tokens to Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 120,121 + + Monedas para Airdrop + + + Finish Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 239,240 + + Finalizar Airdrop + + + Detail + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 60,61 + + Detalles + + + Trade + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 70,71 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 201,202 + + Intercambiar + + + Price (USD) + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 101 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 145 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 86 + + Precio (USD) + + + 24h Change + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 126,127 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 115,116 + + Cambio 24h + + + 24h Volume + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 154 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 146 + + Volumen 24h + + + M. Cap + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 172 + + Cap. M + + + Open buy order + + src/app/components/token/components/token-bid/token-bid.component.html + 3 + + Orden de compra abierta + + + Summary + + src/app/components/token/components/token-bid/token-bid.component.html + 29,30 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 39,40 + + + src/app/components/token/components/token-offer/token-offer.component.html + 46,47 + + Sumario + + + Token amount to buy + + src/app/components/token/components/token-bid/token-bid.component.html + 34,35 + + Cantidad de tokens a comprar + + + Offered price per token + + src/app/components/token/components/token-bid/token-bid.component.html + 44,45 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 44,45 + + + src/app/components/token/components/token-offer/token-offer.component.html + 51,52 + + Precio ofrecido por token + + + Token amount to send + + src/app/components/token/components/token-bid/token-bid.component.html + 73,74 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 117,118 + + Cantidad de token para envío + + + ~ + + src/app/components/token/components/token-bid/token-bid.component.html + 89,98 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 60,69 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 90,99 + + + src/app/pages/token/pages/trade/trade.page.html + 553,556 + + ~ + + + I agree with + + src/app/components/token/components/token-bid/token-bid.component.html + 129 + + + src/app/components/token/components/token-claim/token-claim.component.html + 115 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 153 + + + src/app/components/token/components/token-offer/token-offer.component.html + 133 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 78 + + + src/app/components/token/components/token-refund/token-refund.component.html + 65 + + Estoy de acuerdo con + + + Token terms and Conditions + + src/app/components/token/components/token-bid/token-bid.component.html + 131 + + + src/app/components/token/components/token-claim/token-claim.component.html + 117 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 155 + + + src/app/components/token/components/token-offer/token-offer.component.html + 135 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 80 + + + src/app/components/token/components/token-refund/token-refund.component.html + 67 + + Términos y Condiciones del token + + + and generate address + + src/app/components/token/components/token-bid/token-bid.component.html + 147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 171 + + + src/app/components/token/components/token-vote/token-vote.component.html + 182 + + y generar dirección + + + Once you agree with the terms, the generated address will remain active during the whole sale. + + src/app/components/token/components/token-bid/token-bid.component.html + 154,155 + + + src/app/components/token/components/token-claim/token-claim.component.html + 146,147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 178,179 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 103,104 + + Una vez que esté de acuerdo con los términos, la dirección generada permanecerá activa durante toda la venta. + + + Buy complete. Congratulations. + + src/app/components/token/components/token-bid/token-bid.component.html + 259 + + Compra completa. Enhorabuena. + + + Bid created. + + src/app/components/token/components/token-bid/token-bid.component.ts + 344 + + Apuesta creada. + + + Are you sure you want to cancel the sale? + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 17 + + Estas seguro que quieres cancelar la venta? + + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 23,25 + + Una vez cancelada dispara automáticamente un reembolso a todos los inversores. + + + Cancel sale + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 32,33 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 74,75 + + Cancelar venta + + + Canceled public sale. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts + 56 + + Venta publica cancelada. + + + Total () + + src/app/components/token/components/token-cancel/token-cancel.component.html + 51,52 + + Total () + + + Are you sure you want to cancel your buy order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 66 + + Está seguro que quiere cancelar su orden de compra? + + + Are you sure you want to cancel your sell order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 69 + + Está seguro que quiere cancelar su orden de venta? + + + Confirm + + src/app/components/token/components/token-cancel/token-cancel.component.html + 76,77 + + Confirmar + + + Cancelled. + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 48 + + + src/app/pages/token/pages/trade/trade.page.ts + 589 + + Cancelado. + + + Cancel your buy + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 80 + + Cancelar su compra + + + Cancel your sell + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 81 + + Cancela tu venta + + + Ongoing sale + + src/app/components/token/components/token-card/token-card.component.html + 22 + + Venta en curso + + + Sale ends soon + + src/app/components/token/components/token-card/token-card.component.html + 23 + + La venta finaliza pronto + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 24 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 21 + + Fin de Cooldown + + + Sale starts + + src/app/components/token/components/token-card/token-card.component.html + 55,57 + + Comienzo de la venta + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 115,117 + + + src/app/components/token/components/token-card/token-card.component.html + 175,177 + + Finaliza la venta + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 130 + + + src/app/components/token/components/token-card/token-card.component.html + 190 + + + src/app/components/token/components/token-card/token-card.component.html + 250 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 176 + + + src/app/components/token/components/token-row/token-row.component.html + 79 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 20 + + Venta finaliza + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 235,237 + + Fin de Cooldown + + + Token Claim + + src/app/components/token/components/token-claim/token-claim.component.html + 3 + + Solicitud de token + + + Total available tokens to claim as of today + + src/app/components/token/components/token-claim/token-claim.component.html + 42 + + + src/app/components/token/components/token-claim/token-claim.component.html + 56 + + Total de tokens disponibles para reclamar a partir de hoy + + + Tokens available from + + src/app/components/token/components/token-claim/token-claim.component.html + 76 + + Tokens disponibles desde + + + Total tokens to claim + + src/app/components/token/components/token-claim/token-claim.component.html + 84 + + Total de tokens a reclamar + + + Token claim submitted. + + src/app/components/token/components/token-claim/token-claim.component.ts + 320 + + Solicitud de token enviada. + + + Guardian's of the space will be able to decide where this token will be minted. + + src/app/components/token/components/token-info/token-info-description.component.html + 41 + + El guardián del espacio podrá decidir dónde se creará este token. + + + Icon + + src/app/components/token/components/token-info/token-info-description.component.ts + 25 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 24 + + Icono + + + Name + + src/app/components/token/components/token-info/token-info-description.component.ts + 26 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 25 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 31,30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 74 + + + src/app/pages/nft/pages/new/single/single.page.html + 21 + + + src/app/pages/nft/pages/new/single/single.page.html + 27,26 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 15 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 21,20 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 25 + + Nombre + + + Symbol + + src/app/components/token/components/token-info/token-info-description.component.ts + 27 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 30 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 39,38 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 26 + + Símbolo + + + Launchpad Price + + src/app/components/token/components/token-info/token-info-description.component.ts + 28 + + Precio del lanzador + + + Network + + src/app/components/token/components/token-info/token-info-description.component.ts + 29 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 20 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 5,4 + + + src/app/pages/nft/pages/nft/nft.page.html + 542 + + + src/app/pages/nft/pages/nft/nft.page.html + 564 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 119 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 160 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 28 + + Red + + + Total supply + + src/app/components/token/components/token-info/token-info-description.component.ts + 30 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 29 + + Suministro total + + + Current distribution + + src/app/components/token/components/token-info/token-info-description.component.ts + 31 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 30 + + Distribución actual + + + Type + + src/app/components/token/components/token-info/token-info-description.component.ts + 32 + + + src/app/pages/member/pages/tokens/tokens.page.html + 58 + + + src/app/pages/member/pages/tokens/tokens.page.html + 325 + + + src/app/pages/member/pages/transactions/transactions.page.html + 24 + + + src/app/pages/nft/pages/nft/nft.page.html + 384 + + + src/app/pages/nft/pages/nft/nft.page.html + 434 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 31 + + + src/app/pages/token/pages/trade/trade.page.html + 361 + + Tipo + + + Coming soon + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 91,92 + + Próximamente + + + In Cooldown + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 98,99 + + + src/app/components/token/components/token-row/token-row.component.html + 245,246 + + En Cooldown + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 108,109 + + + src/app/components/token/components/token-row/token-row.component.html + 256,257 + + + src/app/pages/token/pages/trade/trade.page.html + 456 + + + src/app/pages/token/pages/trade/trade.page.html + 467 + + + src/app/pages/token/pages/trade/trade.page.html + 909,910 + + Comprar + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 116 + + + src/app/pages/token/pages/trade/trade.page.html + 387 + + + src/app/pages/token/pages/trade/trade.page.html + 1210 + + Comprar + + + Sale starts + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 167 + + + src/app/components/token/components/token-row/token-row.component.html + 70 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 19 + + Comienzo de la venta + + + Cooldown period ends + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 187,188 + + + src/app/components/token/components/token-row/token-row.component.html + 90,91 + + Período de Cooldown termina + + + Mint token on network + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 3 + + Acuñar token en la red + + + Public sale will no longer be available after bringing token to a network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 45,46 + + La venta pública ya no estará disponible después de traer token a una red. + + + Once minted all owners will have the option to migrate their tokens to the selected network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 56,58 + + Una vez acuñados, todos los propietarios tendrán la opción de migrar sus tokens a la red seleccionada. + + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 68,70 + + Tenga en cuenta que la propiedad y todos los tokens no distribuidos serán depositados a su perfil de miembro. + + + Tokens to migrate + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 92,93 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 173,174 + + Tokens a migrar + + + Locked public tokens + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 107,108 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 189,190 + + Tokens públicos entregados + + + Open sale order + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 3 + + Orden de venta abierta + + + Token ID + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 30,31 + + + src/app/components/token/components/token-offer/token-offer.component.html + 27,28 + + ID del token + + + You will receive + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 74,75 + + + src/app/components/token/components/token-offer/token-offer.component.html + 73,74 + + + src/app/pages/token/pages/trade/trade.page.html + 1132,1133 + + Usted recibirá + + + Fee + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 103 + + + src/app/components/token/components/token-offer/token-offer.component.html + 101 + + + src/app/pages/token/pages/trade/trade.page.html + 1172 + + Tarifa + + + No FEES! + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 110,111 + + + src/app/components/token/components/token-offer/token-offer.component.html + 108,109 + + + src/app/pages/token/pages/trade/trade.page.html + 1188,1189 + + ¡Sin FEES! + + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 232,234 + + + src/app/components/token/components/token-vote/token-vote.component.html + 249,251 + + Asegúrate de que las opciones de depósito de regalo en tu billetera Firefly están marcada al enviar tokens. + + + Sell complete. Congratulations. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 301 + + + src/app/components/token/components/token-vote/token-vote.component.html + 318 + + Venta completa. Felicidades. + + + Offer order created. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 346 + + Orden de oferta creada. + + + Open Token Sell + + src/app/components/token/components/token-offer/token-offer.component.html + 3 + + Venta de Token abierto + + + Your Balance + + src/app/components/token/components/token-offer/token-offer.component.html + 35,36 + + Tu saldo + + + Offered amount of tokens + + src/app/components/token/components/token-offer/token-offer.component.html + 64,65 + + Cantidad de tokens ofrecida + + + Create a Sell Order + + src/app/components/token/components/token-offer/token-offer.component.html + 151,152 + + Crear una orden de venta + + + Offer created. + + src/app/components/token/components/token-offer/token-offer.component.ts + 102 + + Oferta creada. + + + Public sale info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 4 + + Información de la venta pública + + + Start date is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 7 + + La fecha de inicio es obligatoria. + + + Start date for the token offering + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 16 + + Fecha de inicio para la oferta de tokens + + + Offering length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 23 + + Se requiere el tiempo de la oferta. + + + Select token offering length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 48 + + Seleccionar tiempo de oferta de token (Por defecto 2 días) + + + Token allocation info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 63 + + Información de asignación de token + + + Sale Setup + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 81 + + Configuración de venta + + + Enable Cooldown period + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 87,88 + + Activar período de Cooldown + + + Enable Cooldown with refund option. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 98,99 + + Activar el tiempo de Cooldown con la opción de reembolso. + + + Cooldown period length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 103 + + Se requiere una duración del periodo de Cooldown. + + + Select token cooldown length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 129 + + Seleccionar tiempo de Cooldown de token (Por defecto 2 días) + + + No Cooldown. Participants can’t refund. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 149,150 + + Sin Cooldown. Los participantes no pueden ser reembolsados. + + + Enable Oversale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 160,161 + + Activar sobreventa + + + No Oversale. Sale ends with 100% reached. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 171,172 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 54,55 + + Sin sobreventa. La venta termina con 100% alcanzado. + + + Sale continues after 100% reached + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 179,180 + + La venta continúa después de alcanzar el 100% + + + Confirm and schedule sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 195,196 + + Confirmar y programar venta + + + Price per token + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 106 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 34 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 42 + + Precio por token + + + Public sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 135 + + + src/app/pages/token/pages/new/summary/summary.component.html + 214 + + Venta pública + + + Purchase token + + src/app/components/token/components/token-purchase/token-purchase.component.html + 3 + + Purchase token + + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 113 + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + + Enter how much you want to spend. Amount of tokens will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 116 + + Enter how much you want to spend. Amount of tokens will be calculated. + + + Purchased tokens + + src/app/components/token/components/token-purchase/token-purchase.component.html + 243,244 + + Purchased tokens + + + Price + + src/app/components/token/components/token-purchase/token-purchase.component.html + 260,261 + + Precio + + + Cooldown period ends + + src/app/components/token/components/token-refund/token-refund.component.html + 23 + + Cooldown period ends + + + Confirm and refund + + src/app/components/token/components/token-refund/token-refund.component.html + 82,83 + + Confirm and refund + + + Refund token + + src/app/components/token/components/token-refund/token-refund.component.ts + 61 + + Refund token + + + Initial Price + + src/app/components/token/components/token-row/token-row.component.html + 39 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 27 + + Precio inicial + + + Avg. Price + + src/app/components/token/components/token-row/token-row.component.html + 47 + + Precio medio + + + Change (24h) + + src/app/components/token/components/token-row/token-row.component.html + 107,108 + + Cambio (24h) + + + Volume 24h + + src/app/components/token/components/token-row/token-row.component.html + 150 + + Volumen (24h) + + + Market Cap + + src/app/components/token/components/token-row/token-row.component.html + 166 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 169 + + + src/app/pages/token/pages/trade/trade.page.html + 582 + + Capitalización de mercado + + + Claim + + src/app/components/token/components/token-row/token-row.component.html + 210,211 + + Reclamar + + + Refund + + src/app/components/token/components/token-row/token-row.component.html + 222,223 + + Refund + + + Launching soon + + src/app/components/token/components/token-row/token-row.component.html + 238,239 + + Launching soon + + + Buy / Sell + + src/app/components/token/components/token-row/token-row.component.html + 259,260 + + Buy / Sell + + + Stake your token + + src/app/components/token/components/token-stake/token-stake.component.html + 3 + + Stake your token + + + Select or define the amount you want to stake and the period for how long you want to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 13,15 + + Select or define the amount you want to stake and the period for how long you want to lock it. + + + Since you are a guardian you can also + + src/app/components/token/components/token-stake/token-stake.component.html + 17 + + Since you are a guardian you can also + + + - Choose an amount and for how long you’d like to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 50 + + - Choose an amount and for how long you’d like to lock it. + + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + src/app/components/token/components/token-stake/token-stake.component.html + 52,54 + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + + - You will get staked points based on your input. + + src/app/components/token/components/token-stake/token-stake.component.html + 56,57 + + - You will get staked points based on your input. + + + See Staking reward page for more info + + src/app/components/token/components/token-stake/token-stake.component.html + 62 + + See Staking reward page for more info + + + here. + + src/app/components/token/components/token-stake/token-stake.component.html + 63 + + Aquí. + + + How it works + + src/app/components/token/components/token-stake/token-stake.component.html + 71 + + Cómo funciona + + + How much you want to stake? + + src/app/components/token/components/token-stake/token-stake.component.html + 87,88 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 21,22 + + How much you want to stake? + + + Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 192 + + Rewards Multiplier + + + Staking Value + + src/app/components/token/components/token-stake/token-stake.component.html + 210,219 + + Staking Value + + + Staked amount * Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 216 + + + src/app/pages/member/pages/activity/activity.page.html + 36 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 107 + + Staked amount * Rewards Multiplier + + + You will earn + + src/app/components/token/components/token-stake/token-stake.component.html + 230 + + You will earn + + + Stake complete. Congratulations. + + src/app/components/token/components/token-stake/token-stake.component.html + 366 + + Stake complete. Congratulations. + + + Token stake submitted. + + src/app/components/token/components/token-stake/token-stake.component.ts + 410 + + Token stake submitted. + + + Trade details + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 3 + + Trade details + + + Traded amount + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 29,30 + + Traded amount + + + Price per token + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 48,49 + + + src/app/pages/token/pages/new/summary/summary.component.html + 69,70 + + Precio por token + + + Date and Time + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 79,80 + + Date and Time + + + Fullfilled + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 94,95 + + Fullfilled + + + Date + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 109 + + + src/app/pages/member/pages/transactions/transactions.page.html + 22 + + + src/app/pages/nft/pages/nft/nft.page.html + 383 + + + src/app/pages/nft/pages/nft/nft.page.html + 433 + + + src/app/pages/proposal/pages/votes/votes.page.html + 15 + + + src/app/pages/token/pages/trade/trade.page.html + 198 + + + src/app/pages/token/pages/trade/trade.page.html + 272 + + + src/app/pages/token/pages/trade/trade.page.html + 360 + + Fecha + + + State + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 111 + + State + + + Storage deposit fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 144 + + Storage deposit fee + + + Fullfilment + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 171 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 252 + + Fullfilment + + + Seller + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 176 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 247 + + Vendedor + + + Transaction + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 204 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 280 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 314 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 358 + + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 41 + + + src/app/pages/member/pages/transactions/transactions.page.html + 74 + + Transacción + + + Non Transferable + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 153 + + + src/app/pages/member/pages/transactions/transactions.page.html + 77 + + No transferible + + + Processing... + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 155 + + + src/app/pages/member/pages/transactions/transactions.page.html + 87 + + Processing... + + + Soonaverse Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 170 + + Soonaverse Fee + + + Exchange Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 172 + + Exchange Fee + + + 24h change/Price + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 46 + + 24h change/Price + + + Markets + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 6 + + + src/app/pages/token/pages/trade/trade.page.html + 1242 + + Markets + + + No Tokens + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 38,39 + + + src/app/pages/tokens/pages/favourites/favourites.page.html + 25,26 + + No Tokens + + + Cast Vote + + src/app/components/token/components/token-vote/token-vote.component.html + 3 + + Cast Vote + + + Question + + src/app/components/token/components/token-vote/token-vote.component.html + 16,17 + + Question + + + Selected option + + src/app/components/token/components/token-vote/token-vote.component.html + 23,24 + + Selected option + + + How do you set your votes? + + src/app/components/token/components/token-vote/token-vote.component.html + 33,34 + + How do you set your votes? + + + Total native tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 88,89 + + Total native tokens + + + Total staked tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 105,106 + + Total staked tokens + + + Voting is active on + + src/app/components/token/components/token-vote/token-vote.component.html + 119,120 + + Voting is active on + + + Your total voting weight + + src/app/components/token/components/token-vote/token-vote.component.html + 131,132 + + Your total voting weight + + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + src/app/components/token/components/token-vote/token-vote.component.html + 151,153 + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + + Cast Votes + + src/app/components/token/components/token-vote/token-vote.component.html + 193 + + Cast Votes + + + Send Native Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 124 + + Send Native Tokens + + + Use Staked Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 128 + + Use Staked Tokens + + + Vote received. + + src/app/components/token/components/token-vote/token-vote.component.ts + 191 + + Vote received. + + + Transaction confirmed and funds refunded. + + src/app/components/token/components/token-vote/token-vote.component.ts + 217 + + Transaction confirmed and funds refunded. + + + Token vote executed. + + src/app/components/token/components/token-vote/token-vote.component.ts + 375 + + Token vote executed. + + + Token vote order created. + + src/app/components/token/components/token-vote/token-vote.component.ts + 392 + + Token vote order created. + + + Type + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 13,14 + + Tipo + + + Date + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 22,23 + + Fecha + + + Manage addresses + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 3 + + Manage addresses + + + Not yet verified + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 59 + + Not yet verified + + + Change + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 66 + + Change + + + Verify + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 67 + + Verify + + + You will be asked to send funds to the new + + src/app/components/wallet-address/verify-address/verify-address.component.html + 33 + + You will be asked to send funds to the new + + + address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/verify-address/verify-address.component.html + 36,37 + + address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/verify-address/verify-address.component.html + 41 + + espacio + + + profile + + src/app/components/wallet-address/verify-address/verify-address.component.html + 43 + + perfil + + + for future transactions. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 44 + + para futuras transacciones. + + + Generate new address + + src/app/components/wallet-address/verify-address/verify-address.component.html + 55,56 + + Generar nueva dirección + + + Send a small + + src/app/components/wallet-address/verify-address/verify-address.component.html + 66 + + Enviar un pequeño + + + amount to validate your address. This expires in + + src/app/components/wallet-address/verify-address/verify-address.component.html + 67 + + cantidad para validar tu dirección. Esto expira en + + + Expired. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 70 + + Expirado. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/verify-address/verify-address.component.html + 106,107 + + Espere a que la transacción sea validada. Le devolveremos su transacción una vez completada + + + Validating address... + + src/app/components/wallet-address/verify-address/verify-address.component.html + 136 + + Validating address... + + + Now you can deal with NFTs and participate in token trading. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 174 + + Now you can deal with NFTs and participate in token trading. + + + Your new address has been verified! + + src/app/components/wallet-address/verify-address/verify-address.component.html + 176 + + Your new address has been verified! + + + Finish Verification + + src/app/components/wallet-address/verify-address/verify-address.component.html + 181,182 + + Finalizar verificación + + + Generate address + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 76 + + Generar dirección + + + Refunding your payment... + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 192 + + Refunding your payment... + + + Address is not verified + + src/app/components/wallet-address/wallet-address.component.html + 4 + + Address is not verified + + + wallet + + src/app/components/wallet-address/wallet-address.component.html + 25 + + wallet + + + Copy address + + src/app/components/wallet-address/wallet-address.component.html + 30 + + Copy address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + Verifica tu + + + address + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + dirección + + + This network is currently not enabled. + + src/app/components/wallet-address/wallet-address.component.ts + 82 + + This network is currently not enabled. + + + Award Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Award Info + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 20 + + Propietario + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 18 + + Insignias usadas / disponibles + + + Badge lock period + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 20 + + Período de entrega de insignia + + + Award info + + src/app/pages/award/pages/award/award.page.html + 3 + + + src/app/pages/award/pages/new/new.page.html + 17 + + Información del premio + + + Minted on: + + src/app/pages/award/pages/award/award.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 47 + + Minted on: + + + Fund Award + + src/app/pages/award/pages/award/award.page.html + 121,122 + + Fund Award + + + Minting in Progress + + src/app/pages/award/pages/award/award.page.html + 129,130 + + Minting in Progress + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 136 + + + src/app/pages/award/pages/award/award.page.html + 210 + + Echa un vistazo al premio + + + Reject Award + + src/app/pages/award/pages/award/award.page.html + 157 + + Reject Award + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 166 + + Confirma tu participación + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 174,176 + + Toda la comunicación se maneja ahora fuera de la plataforma, hágale saber al creador de premios cómo ponerse en contacto contigo. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 180 + + Proporcione una descripción o enlace a tu creación. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 188 + + Submit + + + Cancel + + src/app/pages/award/pages/award/award.page.html + 189 + + + src/app/pages/token/pages/trade/trade.page.html + 245 + + + src/app/pages/token/pages/trade/trade.page.html + 333 + + Cancel + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 41 + + + src/app/pages/token/pages/new/new.page.ts + 34 + + + src/app/pages/token/pages/token/token.page.ts + 36 + + Resumen + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 105 + + Participantes + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2 + + Nuevo Premio + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14 + + + src/app/pages/award/pages/new/new.page.html + 77 + + + src/app/pages/proposal/pages/new/new.page.html + 24 + + Se requiere un título. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19 + + El título y la descripción se incluirán en el premio. La fecha de fin determina la duración del premio. + + + Title + + src/app/pages/award/pages/new/new.page.html + 23 + + + src/app/pages/award/pages/new/new.page.html + 29,28 + + + src/app/pages/award/pages/new/new.page.html + 76 + + + src/app/pages/award/pages/new/new.page.html + 83,82 + + + src/app/pages/proposal/pages/new/new.page.html + 23 + + + src/app/pages/proposal/pages/new/new.page.html + 29,28 + + + src/app/pages/proposal/pages/new/new.page.html + 103 + + + src/app/pages/proposal/pages/new/new.page.html + 109,108 + + + src/app/pages/proposal/pages/new/new.page.html + 156 + + + src/app/pages/proposal/pages/new/new.page.html + 162,161 + + + src/app/pages/space/pages/upsert/upsert.page.html + 24 + + + src/app/pages/space/pages/upsert/upsert.page.html + 30,29 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 106 + + + src/app/pages/token/pages/new/overview/overview.component.html + 22 + + + src/app/pages/token/pages/new/overview/overview.component.html + 29,28 + + + src/app/pages/token/pages/new/overview/overview.component.html + 65 + + + src/app/pages/token/pages/new/overview/overview.component.html + 72,71 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 9 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 16,15 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 55 + + Título + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 24 + + Debe introducir nombre. + + + End + + src/app/pages/award/pages/new/new.page.html + 36 + + + src/app/pages/award/pages/new/new.page.html + 47,46 + + + src/app/pages/proposal/pages/new/new.page.html + 56 + + + src/app/pages/proposal/pages/new/new.page.html + 68,67 + + Finalizar + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 37 + + + src/app/pages/proposal/pages/new/new.page.html + 57 + + Fecha de finalización requerida. + + + Description + + src/app/pages/award/pages/new/new.page.html + 52 + + + src/app/pages/award/pages/new/new.page.html + 58 + + + src/app/pages/award/pages/new/new.page.html + 91 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 40 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 45 + + + src/app/pages/nft/pages/new/single/single.page.html + 33 + + + src/app/pages/nft/pages/new/single/single.page.html + 38 + + + src/app/pages/proposal/pages/new/new.page.html + 76 + + + src/app/pages/proposal/pages/new/new.page.html + 82 + + + src/app/pages/proposal/pages/new/new.page.html + 119 + + + src/app/pages/proposal/pages/new/new.page.html + 124 + + + src/app/pages/proposal/pages/new/new.page.html + 171 + + + src/app/pages/proposal/pages/new/new.page.html + 176 + + + src/app/pages/space/pages/upsert/upsert.page.html + 36 + + + src/app/pages/space/pages/upsert/upsert.page.html + 41 + + + src/app/pages/token/pages/new/overview/overview.component.html + 37 + + + src/app/pages/token/pages/new/overview/overview.component.html + 43 + + + src/app/pages/token/pages/new/overview/overview.component.html + 80 + + + src/app/pages/token/pages/new/overview/overview.component.html + 86 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 21 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 67 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 21 + + Descripción + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 69 + + Definición de Insignia + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 71 + + El título y la descripción se incluirán en la insignia. + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 97 + + Descripción de la insignia + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 115 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 369 + + + src/app/pages/proposal/pages/new/new.page.html + 205 + + Información del espacio + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 117 + + Este es el espacio que listará el premio. + + + Reward info + + src/app/pages/award/pages/new/new.page.html + 170 + + Reward info + + + You need to fund this award with native token. Select which token will be used as reward. + + src/app/pages/award/pages/new/new.page.html + 172 + + You need to fund this award with native token. Select which token will be used as reward. + + + Token is required. + + src/app/pages/award/pages/new/new.page.html + 176 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 247 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + Token is required. + + + Select a token + + src/app/pages/award/pages/new/new.page.html + 207 + + Select a token + + + Defines the amount of tokens for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 222,223 + + Defines the amount of tokens for each badge and the number of badges available. + + + Invalid token amount per badge + + src/app/pages/award/pages/new/new.page.html + 226 + + Invalid token amount per badge + + + Tokens per badge + + src/app/pages/award/pages/new/new.page.html + 234 + + Tokens per badge + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 251 + + + src/app/pages/award/pages/new/new.page.html + 338 + + Mínimo 1 y máximo 10000. + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 273 + + La cantidad de insignias que desea poner a disposición para este premio. Esto también se puede enteder como la cantidad de premios que quieres regalar. + + + Total to be funded + + src/app/pages/award/pages/new/new.page.html + 284,285 + + Total to be funded + + + Upload image that will be used as a Reward Badge. + + src/app/pages/award/pages/new/new.page.html + 299 + + Upload image that will be used as a Reward Badge. + + + Badge is required. + + src/app/pages/award/pages/new/new.page.html + 328,329 + + Badge is required. + + + Set the duration for which the badge will be locked in the Firefly wallet. + + src/app/pages/award/pages/new/new.page.html + 334,335 + + Set the duration for which the badge will be locked in the Firefly wallet. + + + Create award + + src/app/pages/award/pages/new/new.page.html + 369,370 + + Crear premio + + + Award - New + + src/app/pages/award/pages/new/new.page.ts + 119 + + + src/app/pages/award/pages/new/new.page.ts + 134 + + Award - New + + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/award/pages/new/new.page.ts + 120 + + + src/app/pages/award/pages/new/new.page.ts + 135 + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + + Member seems to log out during the file upload request. + + src/app/pages/award/pages/new/new.page.ts + 184 + + + src/app/pages/collection/pages/upsert/upsert.page.ts + 403 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 240 + + + src/app/pages/nft/pages/new/single/single.page.ts + 180 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 131 + + + src/app/pages/token/services/new.service.ts + 202 + + El miembro parece haber cerrado la sesión durante la subida de archivos. + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2 + + Descripción del Premio + + + Award - + + src/app/pages/award/pages/overview/overview.page.ts + 17 + + + src/app/pages/award/pages/participants/participants.page.ts + 83 + + Award - + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 49 + + + src/app/pages/award/pages/participants/participants.page.html + 63 + + + src/app/pages/proposal/pages/participants/participants.page.html + 49 + + + src/app/pages/proposal/pages/participants/participants.page.html + 63 + + Buscar participante + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 72 + + + src/app/pages/proposal/pages/participants/participants.page.html + 72 + + + src/app/pages/space/pages/members/members.page.html + 92 + + Mostrando solo algunos de los mejores registros... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 90,91 + + + src/app/pages/proposal/pages/participants/participants.page.html + 90,91 + + No participantes + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 118,119 + + Recompensa + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 138,139 + + Recompensa nuevamente + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 50 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 158 + + + src/app/pages/space/pages/awards/awards.page.ts + 30 + + + src/app/pages/space/pages/collections/collections.page.ts + 30 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 30 + + Pendiente + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 51 + + Emitido + + + See all participants within the award. + + src/app/pages/award/pages/participants/participants.page.ts + 84 + + + src/app/pages/proposal/pages/overview/overview.page.ts + 60 + + See all participants within the award. + + + applied on + + src/app/pages/award/pages/participants/participants.page.ts + 257 + + applied on + + + Make NFT’s from this collection available on decentralised network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 12,13 + + Make NFT’s from this collection available on decentralised network. + + + Minting + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 29 + + Minting + + + NFTs left + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 32 + + NFTs left + + + Collection is not yet migrated to the decentralized network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 47,48 + + Collection is not yet migrated to the decentralized network. + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 611 + + ¿Quién puede comprar? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 63,64 + + Abrir venta + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 76,77 + + Solo miembros del espacio + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89,90 + + Solo guardianes del espacio + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 102,103 + + Solo miembros del espacio con insignia + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 118,119 + + Debe poseer al menos un NFT de cada colección seleccionada + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 126,127 + + (Un NFT por miembro) + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 175 + + Descuento para miembros + + + discount for members with rewards from this space in total value of + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 190 + + discount for members with rewards from this space in total value of + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 5 + + Sobre la colección + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 22,23 + + Edición limitada + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 81,82 + + + src/app/pages/collection/pages/collection/collection.page.html + 301,302 + + Publicar Colección + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 93,94 + + + src/app/pages/collection/pages/collection/collection.page.html + 313,314 + + Editar Colección + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Regalías van a + + + Rank + + src/app/pages/collection/pages/collection/collection.page.html + 170,171 + + + src/app/pages/token/pages/token/token.page.html + 73,74 + + Rank + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 189 + + Empieza a + + + Deposited + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + Deposited + + + Staked + + src/app/pages/collection/pages/collection/collection.page.html + 218 + + Staked + + + Links + + src/app/pages/collection/pages/collection/collection.page.html + 227 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 154,153 + + + src/app/pages/token/pages/new/overview/overview.component.html + 160,159 + + + src/app/pages/token/pages/new/summary/summary.component.html + 307,306 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 79 + + Enlances + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 330 + + + src/app/pages/collection/pages/collection/collection.page.html + 376 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 346 + + + src/app/pages/collection/pages/collection/collection.page.html + 392 + + Cancel Collection + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 413 + + + src/app/pages/nft/pages/new/new.page.html + 2 + + Crear NFT + + + Rank amount must be between + + src/app/pages/collection/pages/collection/collection.page.ts + 285 + + + src/app/pages/token/pages/token/token.page.ts + 195 + + Rank amount must be between + + + records + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 13 + + + src/app/pages/discover/pages/awards/awards.page.html + 13 + + + src/app/pages/discover/pages/members/members.page.html + 13 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 13 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 13 + + + src/app/pages/market/pages/collections/collections.page.html + 13 + + + src/app/pages/member/pages/nfts/nfts.page.html + 13 + + records + + + Filters&Sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 30 + + + src/app/pages/discover/pages/awards/awards.page.html + 30 + + + src/app/pages/discover/pages/members/members.page.html + 30 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 30 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 30 + + + src/app/pages/market/pages/collections/collections.page.html + 30 + + Filters&Sort + + + Filters&sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 71 + + + src/app/pages/discover/pages/awards/awards.page.html + 78 + + + src/app/pages/discover/pages/members/members.page.html + 78 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 78 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 79 + + + src/app/pages/market/pages/collections/collections.page.html + 79 + + Filters&sort + + + Sort by + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 93,92 + + + src/app/pages/discover/pages/awards/awards.page.html + 94,93 + + + src/app/pages/discover/pages/members/members.page.html + 94,93 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 94,93 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 95,94 + + + src/app/pages/market/pages/collections/collections.page.html + 95,94 + + Ordenar por + + + Price range + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 131 + + Price range + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2 + + Crear nueva colección + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3 + + Editar colección + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18 + + Información de la colección + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20 + + Nombre y descripción se incluirán en la Colección. + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 58 + + + src/app/pages/nft/pages/new/single/single.page.html + 51 + + Informacion de ventas + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 60 + + Todas las horas se reflejan en la zona horaria del usuario. Para los NFT y SFT generados, el precio se establece aquí y no se puede cambiar en el NFT. El precio de la colección clásica NFT es sólo indicativo y se puede cambiar en el NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 90 + + Regalía + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 93,95 + + Este % de regalía se aplicará a la menta inicial de los NFT y a todas las ventas secundarias. La dirección de IOTA que recibirá regalía s, siempre debe tener un balance mínimo de 1 Mi debido al mecanismo de protección 'dust' del protocolo de IOTA. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 106 + + Regalías - Tasa porcentual + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 116 + + Ejemplo: 10 % , 20 % , etc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 124 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 131 + + Regalías van a un espacio diferente + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 155 + + Los enlaces se incluirán en los detalles del NFT. Utilice los nombres de usuario de su cuenta de Twitter y Discord (nombre#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 160 + + URL inválida. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 167,166 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 312,311 + + + src/app/pages/token/pages/new/overview/overview.component.html + 175,174 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 91,90 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 183 + + Enlazar a tu cuenta de Twitter + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + Usuario de Discord inválido. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 200 + + Enlazar tu cuenta de Discord + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 215 + + Descuentos + + + The discount applies only to members who have earned tokens from awards issued by this space. + + src/app/pages/collection/pages/upsert/upsert.page.html + 217 + + The discount applies only to members who have earned tokens from awards issued by this space. + + + Token amount higher than + + src/app/pages/collection/pages/upsert/upsert.page.html + 231 + + Token amount higher than + + + Type awarded token... + + src/app/pages/collection/pages/upsert/upsert.page.html + 257 + + Type awarded token... + + + Discount % + + src/app/pages/collection/pages/upsert/upsert.page.html + 271 + + Discount % + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 299 + + Descuento + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 310 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 330,331 + + Monto de descuento + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 356 + + Añadir regla de descuento + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 371 + + Este es el espacio que va a mintear la colección NFT. Solo los espacios con billeteras verificadas aparecen en la lista desplegable. Por favor, asegúrate de elegir el espacio correcto porque todos los fondos de la venta de NFT irán a la billetera verificada de este espacio. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 389 + + Tipo de Colección + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 391 + + Cada tipo tiene características diferentes. Esto no se puede cambiar después de la creación. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 423,422 + + + src/app/pages/space/pages/upsert/upsert.page.html + 200 + + Banner + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + Se requiere banner. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 463 + + Marcador de posición + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 493,494 + + El marcador de posición es obligatorio. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 503 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 516 + + + src/app/pages/market/pages/collections/collections.page.html + 177 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138 + + Categoría + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 505 + + La categoría se utiliza al filtrar el contenido. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 509 + + Categoría. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 534 + + Configuración de Colección + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 536 + + Quien tiene acceso a una colección determinada. + + + Open Sale + + src/app/pages/collection/pages/upsert/upsert.page.html + 545 + + Venta abierta + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 551 + + Todos tienen acceso a esta colección. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 563 + + Solo los Guardianes del Espacio pueden acceder. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 576 + + Sólo los Miembros del Espacio pueden acceder. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 589 + + Sólo los Miembros del Espacio con insignia pueden acceder. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 607 + + Opciones de Colección + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 625 + + One NFT per Member Only + + + Select collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 650 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 147 + + + src/app/pages/nft/pages/new/single/single.page.html + 361 + + Seleccionar colección + + + Select award + + src/app/pages/collection/pages/upsert/upsert.page.html + 669 + + Select award + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 691,692 + + Crear colección + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 704,705 + + Guardar colección + + + Check out collection + + src/app/pages/collection/services/helper.service.ts + 68 + + Revisar colección + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 5 + + Solicitudes de Membresía Pendientes + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 16 + + Tus espacios + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 32,33 + + Aún no hay Espacios + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 41,42 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 56 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 68 + + Active proposals + + + Spaces + + src/app/pages/discover/pages/awards/awards.page.html + 115,114 + + + src/app/pages/discover/pages/discover/discover.page.ts + 9 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 115,114 + + + src/app/pages/market/pages/collections/collections.page.html + 146,145 + + + src/app/pages/member/pages/member/member.page.ts + 65 + + Espacios + + + Discover - Awards + + src/app/pages/discover/pages/awards/awards.page.ts + 58 + + Discover - Awards + + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/discover/pages/awards/awards.page.ts + 59 + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + + Awards + + src/app/pages/discover/pages/discover/discover.page.ts + 10 + + + src/app/pages/member/pages/member/member.page.ts + 64 + + + src/app/pages/space/pages/space/space.page.ts + 47 + + Premios + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 11 + + + src/app/pages/space/pages/space/space.page.ts + 46 + + Propuestas + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 12 + + + src/app/pages/space/pages/space/space.page.ts + 48 + + Miembros + + + Discover - Members + + src/app/pages/discover/pages/members/members.page.ts + 51 + + Discover - Members + + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + src/app/pages/discover/pages/members/members.page.ts + 52 + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + + Discover - Proposals + + src/app/pages/discover/pages/proposals/proposals.page.ts + 57 + + Discover - Proposals + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + src/app/pages/discover/pages/proposals/proposals.page.ts + 58 + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + + Discover - Spaces + + src/app/pages/discover/pages/spaces/spaces.page.ts + 54 + + Discover - Spaces + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/discover/pages/spaces/spaces.page.ts + 55 + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + + Sale type + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Sale type + + + Collections - NFT + + src/app/pages/market/pages/collections/collections.page.ts + 68 + + Collections - NFT + + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + src/app/pages/market/pages/collections/collections.page.ts + 69 + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + + NFT Collections + + src/app/pages/market/pages/market/market.page.html + 2 + + NFT Collections + + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/market/pages/market/market.page.html + 11,13 + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + + I understand + + src/app/pages/market/pages/market/market.page.html + 22,23 + + + src/app/pages/member/pages/tokens/tokens.page.html + 43,44 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 22,23 + + I understand + + + Collections + + src/app/pages/market/pages/market/market.page.ts + 12 + + + src/app/pages/market/pages/market/market.page.ts + 33 + + + src/app/pages/space/pages/space/space.page.ts + 45 + + Colecciones + + + Total staked + + src/app/pages/member/pages/activity/activity.page.html + 17,18 + + Total staked + + + Staking Value: + + src/app/pages/member/pages/activity/activity.page.html + 29,39 + + Staking Value: + + + Claimable Reward + + src/app/pages/member/pages/activity/activity.page.html + 47,48 + + Claimable Reward + + + Stake more + + src/app/pages/member/pages/activity/activity.page.html + 104,105 + + Stake more + + + Stake + + src/app/pages/member/pages/activity/activity.page.html + 107,108 + + Stake + + + My Staking + + src/app/pages/member/pages/activity/activity.page.html + 133 + + My Staking + + + until + + src/app/pages/member/pages/activity/activity.page.html + 138 + + until + + + My Favourites + + src/app/pages/member/pages/activity/activity.page.html + 152 + + My Favourites + + + View All + + src/app/pages/member/pages/activity/activity.page.html + 155 + + View All + + + Profile Options + + src/app/pages/member/pages/activity/activity.page.html + 172 + + Profile Options + + + Edit Profile + + src/app/pages/member/pages/activity/activity.page.html + 185 + + Edit Profile + + + Manage Addresses + + src/app/pages/member/pages/activity/activity.page.html + 191 + + + src/app/pages/space/pages/manage/manage.page.html + 27 + + Manage Addresses + + + Export All Transactions + + src/app/pages/member/pages/activity/activity.page.html + 202 + + Export All Transactions + + + Request Verification + + src/app/pages/member/pages/activity/activity.page.html + 227 + + + src/app/pages/space/pages/manage/manage.page.html + 85 + + Request Verification + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + Pendiente + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 18,19 + + Emitido + + + No Awards + + src/app/pages/member/pages/awards/awards.page.html + 34,35 + + + src/app/pages/space/pages/awards/awards.page.html + 63,64 + + Sin Premios + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 44,45 + + Discover Awards + + + Reputation + + src/app/pages/member/pages/badges/badges.page.html + 2 + + + src/app/pages/member/pages/member/member.page.ts + 63 + + Reputación + + + Spaces + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Spaces + + + Awards + + src/app/pages/member/pages/badges/badges.page.html + 27,28 + + Awards + + + Total Rewards + + src/app/pages/member/pages/badges/badges.page.html + 33,34 + + Total Rewards + + + My profile + + src/app/pages/member/pages/member/member.page.html + 13 + + Mi perfil + + + Profile + + src/app/pages/member/pages/member/member.page.html + 15 + + Perfil + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 27,28 + + Profile info + + + Joined + + src/app/pages/member/pages/member/member.page.html + 49 + + Se unió + + + Member - + + src/app/pages/member/pages/member/member.page.ts + 83 + + Member - + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 145 + + Actividad + + + Transactions + + src/app/pages/member/pages/member/member.page.ts + 147 + + + src/app/pages/member/pages/transactions/transactions.page.html + 18 + + Transacciones + + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + src/app/pages/member/pages/nfts/nfts.page.html + 25,26 + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + + Deposit NFT + + src/app/pages/member/pages/nfts/nfts.page.html + 29,30 + + Deposit NFT + + + No NFTs + + src/app/pages/member/pages/nfts/nfts.page.html + 59,60 + + + src/app/pages/nft/pages/nft/nft.page.html + 744,745 + + Sin NFTs + + + Tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 11,12 + + Tokens + + + Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 20,21 + + Staking + + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + src/app/pages/member/pages/tokens/tokens.page.html + 32,34 + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + + Item + + src/app/pages/member/pages/tokens/tokens.page.html + 57 + + + src/app/pages/member/pages/tokens/tokens.page.html + 324 + + + src/app/pages/member/pages/transactions/transactions.page.html + 23 + + Artículo + + + Total + + src/app/pages/member/pages/tokens/tokens.page.html + 59 + + + src/app/pages/token/pages/trade/trade.page.html + 204 + + + src/app/pages/token/pages/trade/trade.page.html + 278 + + + src/app/pages/token/pages/trade/trade.page.html + 367 + + + src/app/pages/token/pages/trade/trade.page.html + 668 + + Total + + + Owned + + src/app/pages/member/pages/tokens/tokens.page.html + 87 + + + src/app/pages/member/pages/tokens/tokens.page.html + 170 + + + src/app/pages/nft/pages/nft/nft.page.html + 17 + + Poseído + + + Airdropped + + src/app/pages/member/pages/tokens/tokens.page.html + 118 + + + src/app/pages/member/pages/tokens/tokens.page.html + 172 + + Airdropped + + + from + + src/app/pages/member/pages/tokens/tokens.page.html + 120 + + from + + + Deposit for purchase + + src/app/pages/member/pages/tokens/tokens.page.html + 215 + + Depósito para la compra + + + No tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 258,259 + + Sin tokens + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 297 + + Active Staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 300 + + Expired Staking + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 307,308 + + Active Staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 310,311 + + Expired Staking + + + Staked From + + src/app/pages/member/pages/tokens/tokens.page.html + 326 + + Staked From + + + Staked Until + + src/app/pages/member/pages/tokens/tokens.page.html + 327 + + Staked Until + + + Multiplier + + src/app/pages/member/pages/tokens/tokens.page.html + 329 + + Multiplier + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 330 + + Staked Value + + + Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 380 + + Stakes + + + No Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 403,404 + + No Stakes + + + Staked from - to + + src/app/pages/member/pages/tokens/tokens.page.html + 432,433 + + Staked from - to + + + Amount (Multiplier) + + src/app/pages/member/pages/tokens/tokens.page.html + 445,446 + + Amount (Multiplier) + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 457,458 + + Staked Value + + + Claim + + src/app/pages/member/pages/tokens/tokens.page.ts + 57 + + Reclamar + + + Refund + + src/app/pages/member/pages/tokens/tokens.page.ts + 58 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 19 + + Reembolsar + + + Export CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 9 + + Exportar CSV + + + Exporting CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 13 + + Exportando CSV + + + No transactions + + src/app/pages/member/pages/transactions/transactions.page.html + 120,121 + + Sin transacciones + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 40 + + Algunos archivos no se han subido + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 51,52 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + CSV subido + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 67 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 73 + + Nombre de Archivo + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 101 + + Error + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 160 + + Cargar CSV existente + + + Upload back once you generate below + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 162 + + Volver a subir una vez que generes abajo + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 193,194 + + Tienes que subir imágenes primero. + + + Generate CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 211 + + Generar CSV + + + Publish NFTs + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 212 + + Publicar NFTs + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 224,225 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Único + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Múltiples + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14 + + Info de NFT + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16 + + Nombre y descripción se incluirán en el NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 22 + + Se requiere un nombre. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 34 + + + src/app/pages/proposal/pages/new/new.page.html + 77 + + Se requiere descripción. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 53 + + Todas las horas se reflejan en la zona horaria del usuario. Para los NFT y SFT generados, el precio se establece por colección y no se puede cambiar aquí. + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 92 + + Los atributos aparecen debajo de tu objeto. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 102 + + Nombre del atributo (ej. Carácter) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 103 + + Valor (Ej. Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 115 + + + src/app/pages/nft/pages/new/single/single.page.html + 151 + + + src/app/pages/nft/pages/new/single/single.page.html + 158 + + Nombre del atributo + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 126,125 + + + src/app/pages/nft/pages/new/single/single.page.html + 163 + + + src/app/pages/nft/pages/new/single/single.page.html + 171,170 + + + src/app/pages/nft/pages/new/single/single.page.html + 228,227 + + + src/app/pages/nft/pages/new/single/single.page.html + 266 + + + src/app/pages/nft/pages/new/single/single.page.html + 272,271 + + Valor + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 142 + + Atributo + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 185 + + Añadir propiedad + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 194 + + Los atributos aparecen debajo de tu objeto. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Nombre del atributo (Ej. Energía) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 205 + + Valor (Ej. 10, 1/10 , etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 217 + + + src/app/pages/nft/pages/new/single/single.page.html + 254 + + + src/app/pages/nft/pages/new/single/single.page.html + 261 + + Nombre del atributo + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 245 + + Atributo + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287 + + Añadir estadísticas + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 303 + + Sube la imagen de tu NFT. Tipos de archivo soportados: PNG, JPEG, WEBP, MP4. Tamaño máximo: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 333 + + Se requiere Media + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 348 + + Selecciona una de tus colecciones para mostrar este NFT. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 383,384 + + Crear NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 393,394 + + Previsualizar NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 168 + + El nombre de archivo no es válido + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 7 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 48 + + + src/app/pages/nft/pages/nft/nft.page.html + 516 + + Mira nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 109 + + Puja más alta actual + + + remaining + + src/app/pages/nft/pages/nft/nft.page.html + 155 + + restante + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 165 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 173 + + Sale hasn't started yet + + + NFT is pending other member's transaction + + src/app/pages/nft/pages/nft/nft.page.html + 181 + + NFT is pending other member's transaction + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 190 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 198 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 213 + + Vender NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 218 + + Cambiar Precio Fijo + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 223 + + Cambiar Subasta + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 240,241 + + Pujar + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 263,264 + + Comprar ahora + + + Bidding + + src/app/pages/nft/pages/nft/nft.page.html + 281 + + Bidding + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 290 + + Pujas actuales + + + Past bids + + src/app/pages/nft/pages/nft/nft.page.html + 298 + + Ofertas pasadas + + + My biddings + + src/app/pages/nft/pages/nft/nft.page.html + 307 + + Mis pujas + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 321 + + Miembro + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 322 + + Pujado en + + + There are no current bids + + src/app/pages/nft/pages/nft/nft.page.html + 369,370 + + There are no current bids + + + There are no past bids + + src/app/pages/nft/pages/nft/nft.page.html + 419,420 + + There are no past bids + + + There are no records. + + src/app/pages/nft/pages/nft/nft.page.html + 469,470 + + There are no records. + + + Withdraw NFT + + src/app/pages/nft/pages/nft/nft.page.html + 509,510 + + Withdraw NFT + + + History + + src/app/pages/nft/pages/nft/nft.page.html + 522 + + Historial + + + Minting in Progress + + src/app/pages/nft/pages/nft/nft.page.html + 556 + + Minting in Progress + + + Available for specific Member Only + + src/app/pages/nft/pages/nft/nft.page.html + 619 + + Available for specific Member Only + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 647 + + Ver todos los detalles de la transacción de este NFT en el Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 685 + + Sobre la colección + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 694 + + Mostrar + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 695 + + colección + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 707,706 + + por + + + Are you sure you want to withdraw NFT from Soonaverse? + + src/app/pages/nft/pages/nft/nft.page.html + 800 + + Are you sure you want to withdraw NFT from Soonaverse? + + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + src/app/pages/nft/pages/nft/nft.page.html + 802 + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + + Confirm with Metamask + + src/app/pages/nft/pages/nft/nft.page.html + 804 + + Confirm with Metamask + + + View + + src/app/pages/nft/pages/nft/nft.page.ts + 82 + + Ver + + + NFT Withdrawn. + + src/app/pages/nft/pages/nft/nft.page.ts + 688 + + NFT Withdrawn. + + + Oops, it's in another universe + + src/app/pages/nft/pages/not-found/not-found.page.html + 8 + + Oops, it's in another universe + + + NFT you are looking for no longer exists on Soonaverse. + + src/app/pages/nft/pages/not-found/not-found.page.html + 12,14 + + NFT you are looking for no longer exists on Soonaverse. + + + Back to Marketplace + + src/app/pages/nft/pages/not-found/not-found.page.html + 22,24 + + Back to Marketplace + + + Auction Starts + + src/app/pages/nft/services/helper.service.ts + 145 + + Comienza la subasta + + + Auction Ends + + src/app/pages/nft/services/helper.service.ts + 148 + + Finaliza la subasta + + + Pool by + + src/app/pages/pool/pages/market/pool.page.html + 3,12 + + Pool by + + + What is Pool? + + src/app/pages/pool/pages/market/pool.page.html + 20,21 + + What is Pool? + + + Anyone can become a liquidity provider (LP) by depositing an equivalent value of each underlying token in return for pool tokens. These tokens track pro-rata LP shares of the total reserves, and can be redeemed for the underlying assets at any time. + + src/app/pages/pool/pages/market/pool.page.html + 23,26 + + Cualquiera puede convertirse en un proveedor de liquidez (LP) depositando un valor equivalente a cada token subyacente a cambio de tokens del fondo. Estos tokens rastrean pro-rata activos del LP de las reservas totales y pueden ser canjeados por los activos subyacentes en cualquier momento. + + + Coming SOON + + src/app/pages/pool/pages/market/pool.page.html + 35 + + + src/app/pages/swap/pages/market/swap.page.html + 35 + + Próximamente + + + See Pool on iotabee + + src/app/pages/pool/pages/market/pool.page.html + 37,39 + + See Pool on iotabee + + + What is iotabee? + + src/app/pages/pool/pages/market/pool.page.html + 49 + + + src/app/pages/swap/pages/market/swap.page.html + 49 + + What is iotabee? + + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + src/app/pages/pool/pages/market/pool.page.html + 51,54 + + + src/app/pages/swap/pages/market/swap.page.html + 51,54 + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + + iotabee.com + + src/app/pages/pool/pages/market/pool.page.html + 61,62 + + + src/app/pages/swap/pages/market/swap.page.html + 61,62 + + iotabee.com + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2 + + Nueva propuesta + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 3 + + Información de la propuesta + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19 + + Título y descripción se incluirán en la Propuesta. Las fechas de inicio y fin determinan la duración de la Propuesta. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 39 + + + src/app/pages/proposal/pages/new/new.page.html + 50,49 + + Iniciar + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 40 + + La fecha de inicio es obligatoria. + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 93 + + Información de la pregunta + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 95 + + El título y la descripción sólo se mostrarán para esta pregunta. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 104 + + Título de la pregunta es requerido. + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 143 + + Texto y descripción por cada respuesta individual. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 157 + + Texto de respuesta es requerido. + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 192 + + Agregar opción + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 207 + + Este es el espacio que incluirá la propuesta. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 259 + + Configuración de propuesta + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 261 + + Define quién tiene acceso a la propuesta y cuál es el método de votación. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 269 + + Participantes a los que va dirigido + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 276 + + Todos los Guardianes + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 283 + + Solo los guardianes pueden votar en esta propuesta + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 289 + + Todos los Miembros + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 296 + + Todos los miembros pueden votar en esta propuesta + + + Space's Native Token + + src/app/pages/proposal/pages/new/new.page.html + 302 + + + src/app/pages/proposal/services/helper.service.ts + 23 + + Space's Native Token + + + You must have minted token linked to your space first! + + src/app/pages/proposal/pages/new/new.page.html + 313 + + You must have minted token linked to your space first! + + + All token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 321 + + All token holders can vote. + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 343,344 + + Crear Propuesta + + + Proposal - New + + src/app/pages/proposal/pages/new/new.page.ts + 136 + + + src/app/pages/proposal/pages/new/new.page.ts + 151 + + Proposal - New + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + src/app/pages/proposal/pages/new/new.page.ts + 137 + + + src/app/pages/proposal/pages/new/new.page.ts + 152 + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 321 + + Opción + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 328 + + insignia + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 332 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 5 + + Resultados finales + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 74 + + Descripción de la propuesta + + + Proposal - + + src/app/pages/proposal/pages/overview/overview.page.ts + 59 + + Proposal - + + + Change Vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 23,24 + + Change Vote + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 26,27 + + Vote Now + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 38 + + La votación comienza + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 51 + + No formas parte del voto + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 55 + + Para poder votar, debes ser parte del espacio antes de que se haya creado la propuesta. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 64 + + Iniciar sesión para votar + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 68 + + Para votar, primero debe iniciar sesión. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 79 + + Pendiente de aprobación de Guardián + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 83 + + Esta propuesta aún no ha sido aprobada por ningún guardián. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 102 + + Peso + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 48 + + Voto Pendiente + + + Voted + + src/app/pages/proposal/pages/participants/participants.page.ts + 49 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 156 + + Votado + + + Proposal - Participants + + src/app/pages/proposal/pages/participants/participants.page.ts + 83 + + Proposal - Participants + + + See all participants within the proposal + + src/app/pages/proposal/pages/participants/participants.page.ts + 84 + + See all participants within the proposal + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 151 + + se unió a Soonaverse en + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 12,13 + + Aprobar + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 23,24 + + Rechazar + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 67 + + Tipo de votación de esta propuesta. + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 75 + + Peso total en esta propuesta para todos los participantes. + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 22 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 22 + + Hito actual + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 23 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 23 + + Fecha de Comienzo + + + Voting Type + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 26 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 26 + + Tipo de Votación + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 27 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 27 + + Peso total + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 79 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 152 + + Ver propuesta + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 87 + + Resultados actuales + + + (weight: ) + + src/app/pages/proposal/pages/proposal/proposal.page.html + 101,102 + + (weight: ) + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 124 + + Insignias seleccionadas + + + Votes + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 42 + + Votes + + + Voter + + src/app/pages/proposal/pages/votes/votes.page.html + 14 + + Votante + + + Option (Weight) + + src/app/pages/proposal/pages/votes/votes.page.html + 16 + + Option (Weight) + + + Expired On + + src/app/pages/proposal/pages/votes/votes.page.html + 18 + + Expired On + + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + src/app/pages/proposal/pages/votes/votes.page.html + 24 + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + + One Member One Vote + + src/app/pages/proposal/services/helper.service.ts + 25 + + One Member One Vote + + + XP Reputation - Space + + src/app/pages/proposal/services/helper.service.ts + 27 + + Reputación XP - Espacio + + + XP Reputation - Selected Badges + + src/app/pages/proposal/services/helper.service.ts + 29 + + Reputación XP - Insignias Seleccionadas + + + Staking + + src/app/pages/soon-staking/pages/staking/staking.page.html + 3,4 + + Staking + + + How much I earn? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 13 + + How much I earn? + + + How it works? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 135 + + How it works? + + + Stake your tokens to earn rewards and unlock new features. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 137,139 + + Stake your tokens to earn rewards and unlock new features. + + + Unique Perks for stakers + + src/app/pages/soon-staking/pages/staking/staking.page.html + 160 + + Unique Perks for stakers + + + Rewards + + src/app/pages/soon-staking/pages/staking/staking.page.html + 167,168 + + Rewards + + + Trading Bonuses + + src/app/pages/soon-staking/pages/staking/staking.page.html + 180 + + Trading Bonuses + + + Unique Features + + src/app/pages/soon-staking/pages/staking/staking.page.html + 193 + + Unique Features + + + Earn more er than you think + + src/app/pages/soon-staking/pages/staking/staking.page.html + 209 + + Earn more er than you think + + + The more you hold, the more rewards you get. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 214,215 + + The more you hold, the more rewards you get. + + + New + + src/app/pages/space/pages/awards/awards.page.html + 43 + + + src/app/pages/space/pages/collections/collections.page.html + 48 + + + src/app/pages/space/pages/proposals/proposals.page.html + 42 + + Nuevo + + + award + + src/app/pages/space/pages/awards/awards.page.html + 44 + + premio + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 31 + + + src/app/pages/space/pages/members/members.page.html + 45 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 31 + + Activo + + + Space - Awards + + src/app/pages/space/pages/awards/awards.page.ts + 54 + + Space - Awards + + + Space's awards + + src/app/pages/space/pages/awards/awards.page.ts + 55 + + Space's awards + + + No Collections + + src/app/pages/space/pages/collections/collections.page.html + 69,70 + + Sin Colecciones + + + Space - Collections + + src/app/pages/space/pages/collections/collections.page.ts + 65 + + Space - Collections + + + Space's collections + + src/app/pages/space/pages/collections/collections.page.ts + 66 + + Space's collections + + + Space Options + + src/app/pages/space/pages/manage/manage.page.html + 2 + + Space Options + + + Token Options + + src/app/pages/space/pages/manage/manage.page.html + 6 + + Token Options + + + Edit Space + + src/app/pages/space/pages/manage/manage.page.html + 21 + + Edit Space + + + Manage Guardians + + src/app/pages/space/pages/manage/manage.page.html + 38 + + Manage Guardians + + + Export Current Members + + src/app/pages/space/pages/manage/manage.page.html + 44 + + Export Current Members + + + Create New Award + + src/app/pages/space/pages/manage/manage.page.html + 57 + + Create New Award + + + Create New Proposal + + src/app/pages/space/pages/manage/manage.page.html + 68 + + Create New Proposal + + + Create New Collection + + src/app/pages/space/pages/manage/manage.page.html + 79 + + Create New Collection + + + Edit Token + + src/app/pages/space/pages/manage/manage.page.html + 105 + + Edit Token + + + Create Airdrop + + src/app/pages/space/pages/manage/manage.page.html + 127 + + Create Airdrop + + + Staking Reward Schedule + + src/app/pages/space/pages/manage/manage.page.html + 135 + + Staking Reward Schedule + + + Export Current Stakers + + src/app/pages/space/pages/manage/manage.page.html + 141 + + Export Current Stakers + + + Active + + src/app/pages/space/pages/members/members.page.html + 18,19 + + Activo + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 35,36 + + Bloqueado + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 52 + + Bloqueado + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 67 + + + src/app/pages/space/pages/members/members.page.html + 82 + + Buscar Miembro + + + No Members + + src/app/pages/space/pages/members/members.page.html + 110,111 + + Sin Miembros + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 118 + + se unió al espacio en + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 161,162 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 174,175 + + Make Guardian + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 184,185 + + Block Member + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 187,188 + + Accept Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 190,191 + + Unblock Member + + + Space - Members + + src/app/pages/space/pages/members/members.page.ts + 76 + + Space - Members + + + Space's members + + src/app/pages/space/pages/members/members.page.ts + 77 + + Space's members + + + Upcoming Sale + + src/app/pages/space/pages/overview/overview.page.html + 7 + + Próxima venta + + + Live Token Sale + + src/app/pages/space/pages/overview/overview.page.html + 9 + + Venta de token en vivo + + + Space - + + src/app/pages/space/pages/overview/overview.page.ts + 55 + + Space - + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 43 + + propuesta + + + No Proposals + + src/app/pages/space/pages/proposals/proposals.page.html + 62,63 + + Aún no hay Propuestas + + + Space - Proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 54 + + Space - Proposals + + + Space's proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 55 + + Space's proposals + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 34 + + Ver espacio + + + pending + + src/app/pages/space/pages/space/space-about/space-about.component.html + 153 + + pendiente + + + Export members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 168 + + Exportar miembros + + + Exporting members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 172 + + Exportando miembros + + + Open to join instantly + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Abrir para unirse al instante + + + Requires approval to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 183 + + Requiere aprobación para unirse + + + Requires + + src/app/pages/space/pages/space/space-about/space-about.component.html + 187 + + Requires + + + staked value to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 193 + + staked value to join + + + Related Links + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 92 + + Enlaces relacionados + + + Claim ownership + + src/app/pages/space/pages/space/space-about/space-about.component.html + 259,260 + + Claim ownership + + + Space's Wallet Addresses + + src/app/pages/space/pages/space/space-about/space-about.component.html + 290 + + Space's Wallet Addresses + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 321 + + Dejar Espacio + + + About space + + src/app/pages/space/pages/space/space.page.html + 3 + + Acerca del espacio + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 55,56 + + + src/app/pages/space/pages/space/space.page.html + 118,119 + + Unirse al Espacio + + + Pending Request + + src/app/pages/space/pages/space/space.page.html + 68 + + + src/app/pages/space/pages/space/space.page.html + 131 + + Petición pendiente + + + Ask to join Space + + src/app/pages/space/pages/space/space.page.html + 70 + + + src/app/pages/space/pages/space/space.page.html + 133 + + Ask to join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 82,83 + + + src/app/pages/space/pages/space/space.page.html + 160,161 + + Editar Espacio + + + Stake + + src/app/pages/space/pages/space/space.page.html + 144 + + Stake + + + to Join + + src/app/pages/space/pages/space/space.page.html + 147 + + to Join + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2 + + Añadir nuevo Espacio + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3 + + Editar espacio + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17 + + Información del espacio + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19 + + El título y la descripción se incluirán en el Espacio. + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 56 + + Los enlaces se incluirán en los detalles del Espacio. Utilice los nombres de usuario de su cuenta de Github, Twitter y Discord (nombre#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 97 + + Sólo código de invitación a discord aceptado (por ejemplo, RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 104 + + Escribe tu código de invitación de Discord + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 125 + + Tipo de Espacio + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 127 + + Cada tipo tiene características diferentes. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 137,138 + + Abrir para que cualquiera se una al instante + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 142 + + Requiere aprobación de miembro + + + Requires stake value (in space's token) + + src/app/pages/space/pages/upsert/upsert.page.html + 146 + + Requires stake value (in space's token) + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 174 + + El avatar es obligatorio + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 243,244 + + Crear espacio + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 256,257 + + Guardar espacio + + + Space - New + + src/app/pages/space/pages/upsert/upsert.page.ts + 76 + + Space - New + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/space/pages/upsert/upsert.page.ts + 77 + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 210 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 216 + + Subir nuevo para reemplazar existente. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 211 + + Tu marca es clave. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 217 + + Hacerlo personal. + + + Swap by + + src/app/pages/swap/pages/market/swap.page.html + 3,12 + + Swap by + + + What is Swap? + + src/app/pages/swap/pages/market/swap.page.html + 20,21 + + What is Swap? + + + See Swap on iotabee + + src/app/pages/swap/pages/market/swap.page.html + 37,39 + + See Swap on iotabee + + + Create airdrop + + src/app/pages/token/pages/airdrops/airdrops.page.html + 8,9 + + Create airdrop + + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/pages/token/pages/airdrops/airdrops.page.html + 17,19 + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + + Some rows have been removed + + src/app/pages/token/pages/airdrops/airdrops.page.html + 92 + + Some rows have been removed + + + Submit airdrop + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 118,119 + + Submit airdrop + + + + row is not valid + + src/app/pages/token/pages/airdrops/airdrops.page.ts + 73 + + row is not valid + + + Breakdown + + src/app/pages/token/pages/metrics/metrics.page.html + 1 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 284 + + Breakdown + + + Token distribution + + src/app/pages/token/pages/metrics/metrics.page.html + 5 + + Distribución del token + + + Total token supply + + src/app/pages/token/pages/metrics/metrics.page.ts + 56 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 96 + + Total token supply + + + Launchpad price per token + + src/app/pages/token/pages/metrics/metrics.page.ts + 67 + + Launchpad price per token + + + Initial Cap + + src/app/pages/token/pages/metrics/metrics.page.ts + 74 + + Initial Cap + + + Total melted tokens + + src/app/pages/token/pages/metrics/metrics.page.ts + 82 + + Total melted tokens + + + You can create only ONE token per space and it can never be changed. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 14,15 + + You can create only ONE token per space and it can never be changed. + + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 23,26 + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + + Continue + + src/app/pages/token/pages/new/introduction/introduction.component.html + 38,39 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 191,192 + + + src/app/pages/token/pages/new/overview/overview.component.html + 104,105 + + Continue + + + Token Sale Requirements + + src/app/pages/token/pages/new/introduction/introduction.component.html + 50 + + Token Sale Requirements + + + To create a public sale or use the Token Exchange you must complete our KYC process. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 52 + + To create a public sale or use the Token Exchange you must complete our KYC process. + + + Begin Process + + src/app/pages/token/pages/new/introduction/introduction.component.html + 58 + + Begin Process + + + Continue + + + src/app/pages/token/pages/new/introduction/introduction.component.html + 73,74 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 330,331 + + + src/app/pages/token/pages/new/overview/overview.component.html + 214,215 + + Continue + + + + Token info + + src/app/pages/token/pages/new/metrics/metrics.component.html + 9 + + + src/app/pages/token/pages/new/summary/summary.component.html + 14 + + + src/app/pages/token/pages/token/token.page.html + 3 + + Información del token + + + Name is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 16 + + El nombre no es válido. + + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + src/app/pages/token/pages/new/metrics/metrics.component.html + 33 + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + + Token supply + + src/app/pages/token/pages/new/metrics/metrics.component.html + 47 + + + src/app/pages/token/pages/new/summary/summary.component.html + 53 + + Suministro del token + + + Price per token (MIOTA) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 53 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 58 + + Price per token (MIOTA) + + + Price is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 54 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 38 + + El precio no es válido. + + + Total token supply (up to 6 decimals are supported) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 68 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 74 + + Total token supply (up to 6 decimals are supported) + + + Total supply is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 69 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 107 + + El suministro total no es válido. + + + Allocation title + + src/app/pages/token/pages/new/metrics/metrics.component.html + 111 + + Allocation title + + + % of tokens for sale + + src/app/pages/token/pages/new/metrics/metrics.component.html + 121 + + % of tokens for sale + + + Percentage of tokens is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 122 + + Percentage of tokens is invalid. + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 126 + + % of tokens for sale (Default 100%) + + + Only 1 of the allocations can be public + + src/app/pages/token/pages/new/metrics/metrics.component.html + 149 + + Only 1 of the allocations can be public + + + Sum of the percentages must be 100 + + src/app/pages/token/pages/new/metrics/metrics.component.html + 155 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 166 + + Sum of the percentages must be 100 + + + Invalid sum of percentages + + src/app/pages/token/pages/new/metrics/metrics.component.html + 160 + + Invalid sum of percentages + + + Add allocation + + src/app/pages/token/pages/new/metrics/metrics.component.html + 179 + + Add allocation + + + Token icon + + src/app/pages/token/pages/new/metrics/metrics.component.html + 221 + + + src/app/pages/token/pages/new/summary/summary.component.html + 265 + + Token icon + + + (Recomended size: 400 x 400px) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 223 + + (Recomended size: 400 x 400px) + + + Icon is mandatory + + src/app/pages/token/pages/new/metrics/metrics.component.html + 232 + + Icon is mandatory + + + Token price + + src/app/pages/token/pages/new/metrics/metrics.component.html + 264 + + + src/app/pages/token/pages/new/summary/summary.component.html + 283 + + Token price + + + Distribution of the token happens after the token offering end date. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 266 + + + src/app/pages/token/pages/new/summary/summary.component.html + 285 + + Distribution of the token happens after the token offering end date. + + + Configure the token supply first to see breakdown. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 288 + + Configure the token supply first to see breakdown. + + + Token terms and conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 298 + + + src/app/pages/token/pages/new/summary/summary.component.html + 324 + + Token terms and conditions + + + Provide link for Terms and Conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 300 + + Provide link for Terms and Conditions + + + Terms and Conditions link is invalid. (Start with http:// or https://) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 306 + + Terms and Conditions link is invalid. (Start with http:// or https://) + + + Token allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 75 + + + src/app/pages/token/pages/new/summary/summary.component.html + 165 + + Token allocation + + + Allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 76 + + + src/app/pages/token/pages/new/summary/summary.component.ts + 30 + + Allocation + + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 81,82 + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + + Create token + + src/app/pages/token/pages/new/new.page.html + 2 + + Create token + + + Introduction + + src/app/pages/token/pages/new/new.page.ts + 32 + + Introduction + + + Metrics + + src/app/pages/token/pages/new/new.page.ts + 33 + + + src/app/pages/token/pages/token/token.page.ts + 38 + + Metrics + + + Summary + + src/app/pages/token/pages/new/new.page.ts + 35 + + Summary + + + New Token + + src/app/pages/token/pages/new/new.page.ts + 72 + + New Token + + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + src/app/pages/token/pages/new/new.page.ts + 73 + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + + Token description + + src/app/pages/token/pages/new/overview/overview.component.html + 12 + + + src/app/pages/token/pages/new/summary/summary.component.html + 93 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 6 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 27 + + Token description + + + This text will be displayed on the main token page. + + src/app/pages/token/pages/new/overview/overview.component.html + 14 + + This text will be displayed on the main token page. + + + Title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 23 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 10 + + Title is invalid. + + + Description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 38 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 22 + + La descripción es inválida. + + + Short description + + src/app/pages/token/pages/new/overview/overview.component.html + 55 + + + src/app/pages/token/pages/new/summary/summary.component.html + 129 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 49 + + Breve descripcion + + + Short description of the token which will be displayed on the token trading page. + + src/app/pages/token/pages/new/overview/overview.component.html + 57 + + Short description of the token which will be displayed on the token trading page. + + + Short title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 66 + + El título corto es inválido. + + + Short description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 81 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 68 + + La descripción breve es inválida. + + + Overview graphics + + src/app/pages/token/pages/new/overview/overview.component.html + 121 + + Gráficos generales + + + Token introductory video / image + + src/app/pages/token/pages/new/overview/overview.component.html + 123 + + Token introductory video / image + + + Introductionary media is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 132 + + Introductionary media is invalid. + + + Invalid URL. (Start with http:// or https://) + + src/app/pages/token/pages/new/overview/overview.component.html + 168 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 84 + + Invalid URL. (Start with http:// or https://) + + + Add link + + src/app/pages/token/pages/new/overview/overview.component.html + 191 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 107 + + Añadir enlace + + + Edit + + src/app/pages/token/pages/new/summary/summary.component.html + 22,23 + + + src/app/pages/token/pages/new/summary/summary.component.html + 61,62 + + + src/app/pages/token/pages/new/summary/summary.component.html + 101,102 + + + src/app/pages/token/pages/new/summary/summary.component.html + 137,138 + + + src/app/pages/token/pages/new/summary/summary.component.html + 173,174 + + Editar + + + Name + + src/app/pages/token/pages/new/summary/summary.component.html + 30,31 + + Nombre + + + Symbol + + src/app/pages/token/pages/new/summary/summary.component.html + 41,42 + + Símbolo + + + Total token supply + + src/app/pages/token/pages/new/summary/summary.component.html + 80,81 + + Suministro total del token + + + Description title + + src/app/pages/token/pages/new/summary/summary.component.html + 109,110 + + Título de descripción + + + Description + + src/app/pages/token/pages/new/summary/summary.component.html + 120,121 + + Descripción + + + Short description title + + src/app/pages/token/pages/new/summary/summary.component.html + 145,146 + + Short description title + + + Short description + + src/app/pages/token/pages/new/summary/summary.component.html + 156,157 + + Short description + + + Allocation title + + src/app/pages/token/pages/new/summary/summary.component.html + 187,188 + + Allocation title + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/summary/summary.component.html + 198,199 + + % of tokens for sale (Default 100%) + + + Submit token + + src/app/pages/token/pages/new/summary/summary.component.html + 227,228 + + Submit token + + + (Recommended size: 400 x 400px) + + src/app/pages/token/pages/new/summary/summary.component.html + 267 + + (Recommended size: 400 x 400px) + + + Some description + + src/app/pages/token/pages/new/summary/summary.component.html + 326 + + Some description + + + Terms&conditions + + src/app/pages/token/pages/new/summary/summary.component.html + 340 + + Terms&conditions + + + Submit token + + + src/app/pages/token/pages/new/summary/summary.component.html + 356,357 + + Submit token + + + + Trade token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 15,16 + + Trade token + + + Buy Tokens + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 28,29 + + Buy Tokens + + + Schedule public sale + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 42,43 + + Schedule public sale + + + Allow Trading + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 57,58 + + Allow Trading + + + Edit token info + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 86 + + Edit token info + + + Check out token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 100 + + Check out token + + + Mint & Approve Token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 132,133 + + Mint & Approve Token + + + Minting in progress + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 144,145 + + Minting in progress + + + Token was not made available on decentralised network yet. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 150 + + Token was not made available on decentralised network yet. + + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 153,154 + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + + Trading enabled. + + src/app/pages/token/pages/token/token-buy/token-buy.component.ts + 86 + + Trading enabled. + + + Short description title is invalid. + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 56 + + Short description title is invalid. + + + Short description title + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 61 + + Título de descripción breve + + + Short token description + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 73 + + Short token description + + + Sale Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 4 + + Sale Info + + + Sale schedule + + src/app/pages/token/pages/token/token-info/token-info.component.html + 10 + + Sale schedule + + + During cooldown period you are able to trigger refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 41 + + During cooldown period you are able to trigger refund. + + + No Cooldown. Participants can't refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 75,76 + + No Cooldown. Participants can't refund. + + + Token Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 80 + + + src/app/pages/token/pages/trade/trade.page.html + 57 + + + src/app/pages/token/pages/trade/trade.page.html + 624 + + Información del token + + + My purchased tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 4 + + My purchased tokens + + + + + + + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 78,80 + + + + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 90,92 + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + + Your Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 21 + + Your Deposit + + + Potential Tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 22 + + Potential Tokens + + + Token Owned + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 23 + + Token Owned + + + Total Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 24 + + Total Deposit + + + Total Participants + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 25 + + Total Participants + + + Sale ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 45 + + Sale ends in + + + Cooldown in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 62 + + Cooldown in progress + + + Sale in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 64 + + Venta en curso + + + Sale starts in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 69 + + Sale starts in + + + Cooldown ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 73 + + Cooldown ends in + + + + + + + src/app/pages/token/pages/token/token.page.html + 47,48 + + + + + Airdrops + + src/app/pages/token/pages/token/token.page.ts + 41 + + Airdrops + + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + src/app/pages/token/pages/token/token.page.ts + 100 + + + src/app/pages/token/pages/trade/trade.page.ts + 275 + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + + Ongoing Sale + + src/app/pages/token/pages/token/token.page.ts + 248 + + Venta en curso + + + Scheduled + + src/app/pages/token/pages/token/token.page.ts + 250 + + Programado + + + Cooldown + + src/app/pages/token/pages/token/token.page.ts + 252 + + Cooldown + + + Processing + + src/app/pages/token/pages/token/token.page.ts + 254 + + Procesando + + + Order book + + src/app/pages/token/pages/trade/trade.page.html + 94 + + + src/app/pages/token/pages/trade/trade.page.html + 644 + + Order book + + + Token chart + + src/app/pages/token/pages/trade/trade.page.html + 102 + + + src/app/pages/token/pages/trade/trade.page.html + 795 + + Token chart + + + My trading + + src/app/pages/token/pages/trade/trade.page.html + 158 + + My trading + + + Open buy orders + + src/app/pages/token/pages/trade/trade.page.html + 166 + + Open buy orders + + + Open sell orders + + src/app/pages/token/pages/trade/trade.page.html + 174 + + Open sell orders + + + Order history + + src/app/pages/token/pages/trade/trade.page.html + 182 + + Order history + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 213 + + + src/app/pages/token/pages/trade/trade.page.html + 287 + + Fulfilled + + + There are no buys + + src/app/pages/token/pages/trade/trade.page.html + 257,258 + + There are no buys + + + Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 321,322 + + + src/app/pages/token/pages/trade/trade.page.html + 416,417 + + Cancelled + + + Expired + + src/app/pages/token/pages/trade/trade.page.html + 324,325 + + + src/app/pages/token/pages/trade/trade.page.html + 422,423 + + Expired + + + There are no sells + + src/app/pages/token/pages/trade/trade.page.html + 345,346 + + There are no sells + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 388 + + + src/app/pages/token/pages/trade/trade.page.html + 1213 + + Sell + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 404,405 + + Fulfilled + + + Partially Fulfilled / Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 410,411 + + Partially Fulfilled / Cancelled + + + Fulfilled / Cancelled (unfulfillable) + + src/app/pages/token/pages/trade/trade.page.html + 419,420 + + Fulfilled / Cancelled (unfulfillable) + + + There is no order history + + src/app/pages/token/pages/trade/trade.page.html + 434,435 + + There is no order history + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 477,478 + + + src/app/pages/token/pages/trade/trade.page.html + 488,489 + + + src/app/pages/token/pages/trade/trade.page.html + 919,920 + + Vender + + + Available + + src/app/pages/token/pages/trade/trade.page.html + 530,531 + + Disponible + + + Current Price + + src/app/pages/token/pages/trade/trade.page.html + 542 + + Precio actual + + + Change 24h + + src/app/pages/token/pages/trade/trade.page.html + 564,565 + + Cambio 24h + + + ( ~ ) + + src/app/pages/token/pages/trade/trade.page.html + 729,732 + + ( ~ ) + + + current price + + src/app/pages/token/pages/trade/trade.page.html + 737,738 + + Precio actual + + + There is no activity yet + + src/app/pages/token/pages/trade/trade.page.html + 788,789 + + Aún no hay actividad + + + Trade history + + src/app/pages/token/pages/trade/trade.page.html + 829,830 + + Historial de operaciones + + + There is no trade history + + src/app/pages/token/pages/trade/trade.page.html + 894,895 + + There is no trade history + + + You don’t have enough tokens + + src/app/pages/token/pages/trade/trade.page.html + 928 + + No tienes suficientes tokens + + + Amount to + + src/app/pages/token/pages/trade/trade.page.html + 935,936 + + Amount to + + + Balance + + src/app/pages/token/pages/trade/trade.page.html + 979 + + Balance + + + Set your price per 1 + + src/app/pages/token/pages/trade/trade.page.html + 998,1000 + + Set your price per 1 + + + LIMIT PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1009,1010 + + Precio límite + + + MARKET PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1017,1018 + + PRECIO DE MARCADO + + + ~ + + src/app/pages/token/pages/trade/trade.page.html + 1038,1041 + + + src/app/pages/token/pages/trade/trade.page.html + 1145,1148 + + ~ + + + Set Current Price + + src/app/pages/token/pages/trade/trade.page.html + 1069 + + Establecer precio actual + + + Set BID + + src/app/pages/token/pages/trade/trade.page.html + 1093,1104 + + Set BID + + + The bid price is the highest price that a particular buyer is willing to pay. + + src/app/pages/token/pages/trade/trade.page.html + 1100 + + The bid price is the highest price that a particular buyer is willing to pay. + + + Set ASK + + src/app/pages/token/pages/trade/trade.page.html + 1109,1120 + + Set ASK + + + The asking price is the minimum price that an individual would be willing to sell their asset. + + src/app/pages/token/pages/trade/trade.page.html + 1116 + + The asking price is the minimum price that an individual would be willing to sell their asset. + + + You will spend + + src/app/pages/token/pages/trade/trade.page.html + 1129,1130 + + You will spend + + + Minimum total has to be at least + + src/app/pages/token/pages/trade/trade.page.html + 1163 + + Minimum total has to be at least + + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + src/app/pages/token/pages/trade/trade.page.html + 1179 + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + + 1h + + src/app/pages/token/pages/trade/trade.page.ts + 118 + + 1h + + + 4h + + src/app/pages/token/pages/trade/trade.page.ts + 119 + + 4h + + + 1d + + src/app/pages/token/pages/trade/trade.page.ts + 120 + + 1d + + + 1w + + src/app/pages/token/pages/trade/trade.page.ts + 121 + + 1s + + + Bids + + src/app/pages/token/pages/trade/trade.page.ts + 563 + + Ofertas + + + Asks + + src/app/pages/token/pages/trade/trade.page.ts + 567 + + Demanda + + + Cancelled + + src/app/pages/token/services/helper.service.ts + 201 + + Cancelled + + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 42 + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + + Go to trading pairs to add your favourite tokens. + + src/app/pages/tokens/pages/favourites/favourites.page.html + 47,48 + + Go to trading pairs to add your favourite tokens. + + + Add favourites + + src/app/pages/tokens/pages/favourites/favourites.page.html + 56,57 + + Añadir favoritos + + + Tokens - Favourite + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 52 + + Tokens - Favourite + + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 53 + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + + Tokens - Launchpad + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 41 + + Tokens - Launchpad + + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 42 + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/tokens/pages/tokens/tokens.page.html + 11,13 + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + + Highlighted Token + + src/app/pages/tokens/pages/tokens/tokens.page.html + 49 + + Highlighted Token + + + Favorites + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 17 + + Favoritos + + + All tokens + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 20 + + Todos los tokens + + + Trading pairs + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 21 + + Trading pairs + + + Launchpad + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 22 + + Launchpad + + + Tokens - Trading Pairs + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 43 + + Tokens - Trading Pairs + + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 44 + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + + AuditOne Validation + + src/app/service-modules/audit-one/components/modal/modal.component.html + 3 + + AuditOne Validation + + + Requested On + + src/app/service-modules/audit-one/components/modal/modal.component.html + 22 + + Solicitado en + + + Last Update + + src/app/service-modules/audit-one/components/modal/modal.component.html + 23 + + Last Update + + + There are no records. + + src/app/service-modules/audit-one/components/modal/modal.component.html + 52 + + No hay registros. + + + AuditOne + + src/app/service-modules/audit-one/components/widget/widget.component.html + 11 + + AuditOne + + + Verified + + src/app/service-modules/audit-one/components/widget/widget.component.html + 47 + + Verificado + + + See more + + src/app/service-modules/audit-one/components/widget/widget.component.html + 52 + + Ver más + + + + diff --git a/src/locale/messages.fr-FR.xlf b/src/locale/messages.fr-FR.xlf new file mode 100644 index 0000000..1c53d9c --- /dev/null +++ b/src/locale/messages.fr-FR.xlf @@ -0,0 +1,13271 @@ + + + + + + Top Members + + src/app/@core/services/filter-storage/filter-storage.service.ts + 97 + + Membres Principaux + + + Recent + + src/app/@core/services/filter-storage/filter-storage.service.ts + 98 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 116 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 133 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 147 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 165 + + Ordre chronologique croissant + + + Oldest + + src/app/@core/services/filter-storage/filter-storage.service.ts + 99 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 117 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 134 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 148 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 166 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 188 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 209 + + Ordre chronologique décroissant + + + Ending Soon + + src/app/@core/services/filter-storage/filter-storage.service.ts + 115 + + Bientôt terminé! + + + Ending SOON + + src/app/@core/services/filter-storage/filter-storage.service.ts + 164 + + Ending SOON + + + Available Date + + src/app/@core/services/filter-storage/filter-storage.service.ts + 182 + + Période de Disponibilité + + + Recently Created + + src/app/@core/services/filter-storage/filter-storage.service.ts + 183 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 208 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 57 + + NFT récemment Créés + + + Price: Low to High + + src/app/@core/services/filter-storage/filter-storage.service.ts + 184 + + Prix : du Plus Bas au Plus Élevé + + + Price: High to Low + + src/app/@core/services/filter-storage/filter-storage.service.ts + 185 + + Prix : du Plus Élevé au Plus Bas + + + Top Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 186 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 206 + + Top des NFT les plus Négociés + + + Recently Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 187 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 207 + + Récemment Négocié + + + Public Vote + + src/app/@core/services/filter-storage/filter-storage.service.ts + 202 + + Vote Public + + + Community Rank + + src/app/@core/services/filter-storage/filter-storage.service.ts + 203 + + Classement Mondial de la Communauté + + + SOON on Sale + + src/app/@core/services/filter-storage/filter-storage.service.ts + 204 + + SOON on Sale + + + Recently Minted + + src/app/@core/services/filter-storage/filter-storage.service.ts + 205 + + Récemment Mint + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 74 + + Retour + + + Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products. + + src/app/@core/services/seo/seo.service.ts + 7 + + Soonaverse est une plateforme communautaire qui s'appuie sur la structure du réseau IOTA, visant à permettre à ses membres de créer et de gérer des organisations autonomes décentralisées (DAO), des NFT, des projets, ainsi que des entreprises et des marchés, à titre gratuit. Toute organisation pourra ainsi lancer son projet et échanger ses liquidités par le biais de nos produits tels que le Launchpad, la plateforme d'Échanges de tokens et la Marketplace. + + + Bill Payment + + src/app/@core/services/transaction/transaction.service.ts + 18 + + Paiement de la Facture + + + Bill (royalty) + + src/app/@core/services/transaction/transaction.service.ts + 20 + + Bill (redevance) + + + Credit + + src/app/@core/services/transaction/transaction.service.ts + 26 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 336 + + Solde disponible + + + Payment + + src/app/@core/services/transaction/transaction.service.ts + 28 + + Paiement + + + Credit NFT + + src/app/@core/services/transaction/transaction.service.ts + 30 + + Créditer le NFT + + + Mint Collection + + src/app/@core/services/transaction/transaction.service.ts + 32 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 36 + + Minter la Collection + + + Mint Token + + src/app/@core/services/transaction/transaction.service.ts + 34 + + + src/app/pages/space/pages/manage/manage.page.html + 116 + + Mintez votre propre Token + + + Withdraw Asset + + src/app/@core/services/transaction/transaction.service.ts + 36 + + Opération de Retrait d'Actifs Tokenisés + + + Unlock + + src/app/@core/services/transaction/transaction.service.ts + 38 + + Débloquer + + + Vote + + src/app/@core/services/transaction/transaction.service.ts + 40 + + Participer aux Votes + + + Order + + src/app/@core/services/transaction/transaction.service.ts + 42 + + Ordre + + + (Mint Alias) + + src/app/@core/services/transaction/transaction.service.ts + 49 + + (Mint Alias) + + + (Mint NFTs) + + src/app/@core/services/transaction/transaction.service.ts + 51 + + (Mint des NFT) + + + (Mint Foundry) + + src/app/@core/services/transaction/transaction.service.ts + 53 + + (Mint Foundry) + + + (Send Alias to Guardian) + + src/app/@core/services/transaction/transaction.service.ts + 55 + + (Envoyer Alias au Gardian) + + + (Lock Collection) + + src/app/@core/services/transaction/transaction.service.ts + 57 + + (Verrouiller la Collection) + + + Discover + + src/app/@shell/ui/header/header.component.html + 76 + + + src/app/components/auth/services/auth.service.ts + 83 + + Découvrir + + + Create new + + src/app/@shell/ui/header/header.component.html + 91 + + Nouvelle création + + + Space + + src/app/@shell/ui/header/header.component.html + 97 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100 + + + src/app/pages/collection/pages/collection/collection.page.html + 110 + + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 206,205 + + + src/app/pages/token/pages/new/summary/summary.component.html + 242,241 + + Espace + + + Proposal + + src/app/@shell/ui/header/header.component.html + 103 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 29 + + Offre + + + Award + + src/app/@shell/ui/header/header.component.html + 106 + + + src/app/pages/award/pages/award/award.page.html + 29 + + + src/app/pages/award/pages/award/award.page.ts + 100 + + Prime + + + Collection + + src/app/@shell/ui/header/header.component.html + 110 + + + src/app/@shell/ui/header/header.component.html + 129 + + + src/app/pages/collection/pages/collection/collection.page.html + 37 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136 + + + src/app/pages/nft/pages/new/single/single.page.html + 346 + + + src/app/pages/space/pages/collections/collections.page.html + 49 + + Collection + + + Token + + src/app/@shell/ui/header/header.component.html + 113 + + + src/app/@shell/ui/header/header.component.html + 132 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 321 + + + src/app/pages/token/pages/token/token.page.html + 29 + + + src/app/pages/token/pages/token/token.page.ts + 99 + + + src/app/pages/token/pages/trade/trade.page.ts + 274 + + Token + + + To unlock more features you have to stake SOON token. + + src/app/@shell/ui/header/header.component.html + 124,126 + + Pour pouvoir débloquer plus de fonctionnalités, vous devez staker des tokens SOON. + + + VIP LEVEL + + src/app/@shell/ui/header/header.component.html + 197,198 + + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 37,38 + + + src/app/pages/member/pages/activity/activity.page.html + 146,147 + + NIVEAU VIP + + + None. + + src/app/@shell/ui/header/header.component.html + 232 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 77 + + Aucun résultat. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 240 + + + src/app/components/auth/services/auth.service.ts + 551 + + Mon Profil + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 265,266 + + Le processus d'achat n'a pas été achevé + + + You have + + src/app/@shell/ui/header/header.component.html + 270 + + Vous disposez de + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 272 + + pour achever la transaction + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 282,283 + + Ouvrir la Procédure de Vérification + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 334 + + Vous avez gagné le NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 335 + + Félicitations ! Vous êtes l'heureux propriétaire d'un nouveau NFT ! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 342 + + Votre soumission n'a pas été retenue ! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 343 + + Votre soumission sur + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 344 + + a été surenchérie. Veuillez réessayer ! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 351 + + vient d'être proposé + + + for + + src/app/@shell/ui/header/header.component.ts + 352 + + + src/app/components/timeline/timeline.component.html + 171 + + pour + + + Your + + src/app/@shell/ui/header/header.component.ts + 353 + + Votre + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 354 + + a reçu une nouvelle soumission pour + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 377 + + Non soutenu + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 378 + + Cette notification ne permet pas encore de couvrir votre langue + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27,28 + + Espace + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 38,39 + + Offre + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 49,50 + + Prime + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 60,61 + + Pièces de collection + + + Token + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 70,71 + + Token + + + Stake more SOON to create tokens and collections. + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 81,84 + + Stakez un nombre grandissant de tokens SOON, afin de pouvoir créer des collections de tokens. + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 57,58 + + Connectez-vous à votre Wallet en sélectionnant MetaMask + + + Connect via TanglePay + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 73 + + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 47 + + Connectez-vous via TanglePay + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 97 + + Se déconnecter + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 103 + + Fourni par + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8 + + La page que vous avez recherchée ne peut être obtenue + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 9,11 + + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Découvrez Soonaverse + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 19 + + État du réseau + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 30,31 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 84,85 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 140,141 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 197,198 + + État du réseau + + + Operational + + src/app/@shell/ui/sider/network-status/network-status.component.html + 36 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 90 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 146 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 203 + + Opérationnel + + + Degraded Performance + + src/app/@shell/ui/sider/network-status/network-status.component.html + 43 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 97 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 153 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 210 + + Dégradation des Performances + + + Down + + src/app/@shell/ui/sider/network-status/network-status.component.html + 50 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 104 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 160 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 217 + + Bas débit + + + Last milestone + + src/app/@shell/ui/sider/network-status/network-status.component.html + 57,58 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 111,112 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 170,171 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 224,225 + + Dernière boucle + + + Devnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 78,79 + + + src/app/components/network/components/select-network/select-network.component.html + 61,63 + + Devnet + + + Shimmer Mainnet Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 132,133 + + Shimmer Mainnet Coming SOON + + + Testnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 191,192 + + + src/app/components/network/components/select-network/select-network.component.html + 33,35 + + Testnet + + + Assembly + + src/app/@shell/ui/sider/network-status/network-status.component.html + 237 + + Regroupement + + + Assembly Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 244,245 + + Assembly Coming SOON + + + Shimmer EVM Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 266,267 + + Shimmer EVM Coming SOON + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 48 + + Voir Doc. + + + Show more + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 47 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 27 + + + src/app/components/timeline/timeline.component.html + 304 + + Afficher plus + + + Show less + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 48 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 28 + + + src/app/components/timeline/timeline.component.html + 303 + + Afficher moins + + + Search here... + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 50 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 30 + + Cliquez ici pour effectuer votre recherche... + + + Reset + + + src/app/components/algolia/algolia-clear/algolia-clear.component.html + 5,7 + + Réinitialisation + + + + Search + + src/app/components/algolia/search/search.component.html + 20,19 + + + src/app/components/collection/components/select-collection/select-collection.component.html + 95,94 + + + src/app/components/space/components/select-space/select-space.component.html + 95,94 + + Rechercher + + + Start typing... + + src/app/components/algolia/search/search.component.html + 36 + + Commencer la saisie... + + + Open + + src/app/components/algolia/services/algolia.service.ts + 32 + + Accéder + + + Guardians of Space Only + + src/app/components/algolia/services/algolia.service.ts + 34 + + Gardiens de l'Espace Uniquement + + + Members of Space Only + + src/app/components/algolia/services/algolia.service.ts + 36 + + Membres de l'Espace Uniquement + + + Members With Badge Only + + src/app/components/algolia/services/algolia.service.ts + 38 + + Membres détenant un Badge Uniquement + + + Members With NFT only + + src/app/components/algolia/services/algolia.service.ts + 40 + + Membres détenant un NFT Uniquement + + + Unavailable for sale + + src/app/components/algolia/services/algolia.service.ts + 53 + + Non disponible à la vente + + + On Auction + + src/app/components/algolia/services/algolia.service.ts + 55 + + Mise aux Enchères + + + Available + + src/app/components/algolia/services/algolia.service.ts + 57 + + + src/app/components/award/components/award-status/award-status.component.html + 23 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 61 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 162 + + + src/app/pages/space/pages/collections/collections.page.ts + 31 + + + src/app/pages/token/pages/token/token.page.ts + 256 + + Disponible + + + On Sale + + src/app/components/algolia/services/algolia.service.ts + 59 + + En Vente + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 19 + + MetaMask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23 + + Connectez-vous à votre Wallet en sélectionnant Metamask + + + TanglePay + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 43 + + TanglePay + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 67 + + Veillez bien à sélectionner une chaîne publique IOTA compatible EVM, dans MetaMask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 69 + + Nom du Réseau : IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 70 + + URL RPC : https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 71 + + ID de chaîne : 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 89,90 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 120,121 + + Révoquer + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 8,10 + + Connexion + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Déconnexion + + + Staking + + src/app/components/auth/services/auth.service.ts + 90 + + Staking + + + Tokens + + src/app/components/auth/services/auth.service.ts + 97 + + + src/app/pages/discover/pages/awards/awards.page.html + 145,144 + + + src/app/pages/member/pages/member/member.page.ts + 66 + + + src/app/pages/member/pages/tokens/tokens.page.html + 49 + + + src/app/pages/member/pages/tokens/tokens.page.html + 235 + + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 41 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 2 + + Tokens + + + Swap + + src/app/components/auth/services/auth.service.ts + 104 + + Swap + + + Pool + + src/app/components/auth/services/auth.service.ts + 111 + + Pool + + + Marketplace + + src/app/components/auth/services/auth.service.ts + 118 + + Place de marché + + + My Overview + + src/app/components/auth/services/auth.service.ts + 125 + + + src/app/pages/dashboard/dashboard.page.html + 2 + + Vue d'Ensemble de Mon Tableau de Bord + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 232 + + Impossible de signer la transaction. Veuillez recharger la page et réessayer. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 278 + + Tout d'abord, vous devez déverrouiller votre MetaMask ! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 290 + + Vous devez autoriser l'accès à l'authentification de votre adresse de compte. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 298 + + Veillez à bien sélectionner une adresse dans MetaMask ! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 307 + + + src/app/components/auth/services/auth.service.ts + 378 + + Impossible d'obtenir de la nonce pour s'authentifier ! + + + Unable to connect your TanglePay wallet. + + src/app/components/auth/services/auth.service.ts + 343 + + + src/app/components/auth/services/auth.service.ts + 482 + + Impossible d'interagir avec votre wallet TanglePay pour confirmer la connexion. + + + Unable to detect address in TanglePay! + + src/app/components/auth/services/auth.service.ts + 349 + + Impossible de localiser l'adresse dans TanglePay ! + + + You have to open Soonaverse in wallet app. + + src/app/components/auth/services/auth.service.ts + 443 + + Accédez à l'interface de Soonaverse depuis l'appli du wallet. + + + Failed to initialize wallet, try to reload page. + + src/app/components/auth/services/auth.service.ts + 445 + + Échec d'initialisation de la vérification du wallet, essayez de recharger la page. + + + Give badges + + src/app/components/award/components/award-awards/award-awards.component.html + 11 + + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 16 + + Offre de badges + + + Once issued, this badge is sent to the rewarded participant's wallet. + + src/app/components/award/components/award-awards/award-awards.component.html + 36 + + Lorsqu'il aura été émis, ce badge sera envoyé sur le wallet du participant récompensé. + + + Upload CSV + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 31,32 + + Chargement du fichier CSV + + + Download CSV template + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 34 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 85 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 10 + + Téléchargement Schéma de construction CSV + + + You can create badge airdrops for any user. You can upload CSV with users addresses and they will be properly reward. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 42,44 + + Vous pouvez créer des airdrops de badges pour tout utilisateur. Il est aussi possible d'importer des fichiers d'adresses CSV des utilisateurs qui, par conséquent, seront bien récompensés. + + + If you don’t know how to prepare CSV file, you can download our template made for you. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 50,51 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 101,102 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 25,26 + + Si vous envisagez de créer un fichier CSV, mais vous ne savez pas comment procéder, notre schéma de construction du fichier téléchargeable, conçu pour vous, vous aidera à le faire. + + + Confirm schedule + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 77 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 128 + + Confirmer le programme + + + Address + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 97 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 21 + + Adresse + + + Action + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 98 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 288 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 153 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 22 + + + src/app/pages/token/pages/trade/trade.page.html + 214 + + + src/app/pages/token/pages/trade/trade.page.html + 288 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 24 + + Action + + + Badge + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 104 + + + src/app/pages/award/pages/new/new.page.html + 298,297 + + Badge + + + Submitted. + + src/app/components/award/components/award-give-badges/award-give-badges.component.ts + 103 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 137 + + Demande soumise. + + + Fund Award & Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 3 + + Fund Award & Mint + + + Reward Token + + src/app/components/award/components/award-mint/award-mint.component.html + 21 + + Token de Récompense + + + Reward to be funded + + src/app/components/award/components/award-mint/award-mint.component.html + 43 + + Récompense de parrainage + + + Confirm & Start + + src/app/components/award/components/award-mint/award-mint.component.html + 98,99 + + Confirmer& Démarrer + + + Once you agree with the terms, the generated address will remain active during the whole process. + + src/app/components/award/components/award-mint/award-mint.component.html + 105,107 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 181,183 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 93,95 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 146,148 + + L'adresse générée demeurera en vigueur tout au long du processus de création, lorsque vous aurez accepté les termes d'achat. + + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + src/app/components/award/components/award-mint/award-mint.component.html + 120,121 + + Utilisez deeplink pour effectuer le transfert. La saisie manuelle des données n'est malheureusement pas appuyée par Firefly. + + + Transaction history + + src/app/components/award/components/award-mint/award-mint.component.html + 159 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 252 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 246 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 134 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 176 + + + src/app/components/space/components/space-claim/space-claim.component.html + 113 + + + src/app/components/space/components/space-claim/space-claim.component.html + 135 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 122 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 144 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 207 + + + src/app/components/token/components/token-bid/token-bid.component.html + 212 + + + src/app/components/token/components/token-bid/token-bid.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 256 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 249 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 254 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 276 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 209 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 269 + + + src/app/components/token/components/token-stake/token-stake.component.html + 319 + + + src/app/components/token/components/token-stake/token-stake.component.html + 341 + + + src/app/components/token/components/token-vote/token-vote.component.html + 271 + + + src/app/components/token/components/token-vote/token-vote.component.html + 293 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 110 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 146 + + Historique de transaction + + + Transaction complete. Congratulations. + + src/app/components/award/components/award-mint/award-mint.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 271 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 235 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 277 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 294 + + Félicitations ! La transaction est terminée. + + + Finish Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 191,192 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 289,290 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 281,282 + + Achever le Processus de Mint + + + Funding info + + src/app/components/award/components/award-mint/award-mint.component.ts + 83 + + Dispositions Budgétaires : Infos + + + Make transaction + + src/app/components/award/components/award-mint/award-mint.component.ts + 84 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 92 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 87 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 101 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 77 + + Initiation de paiement + + + Wait for confirmation + + src/app/components/award/components/award-mint/award-mint.component.ts + 85 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 93 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 87 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 109 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 88 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 102 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 78 + + En attente de vérification de l'adresse + + + Confirmed + + src/app/components/award/components/award-mint/award-mint.component.ts + 86 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 94 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 88 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 110 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 89 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 103 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 79 + + L'adresse a été confirmée + + + Payment received. + + src/app/components/award/components/award-mint/award-mint.component.ts + 141 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 150 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 196 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 136 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 136 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 145 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 155 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 140 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 159 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 157 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 131 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 224 + + Confirmation de réception de paiement. + + + Confirming transaction. + + src/app/components/award/components/award-mint/award-mint.component.ts + 158 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 167 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 213 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 164 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 189 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 153 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 153 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 162 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 172 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 157 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 176 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 174 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 148 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 241 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 208 + + Transaction en cours de validation. + + + Transaction confirmed. + + src/app/components/award/components/award-mint/award-mint.component.ts + 167 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 176 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 222 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 173 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 198 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 162 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 162 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 171 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 181 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 166 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 185 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 183 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 157 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 250 + + Confirmation de la transaction. + + + Invalid amount received. Refunding transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 186 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 203 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 258 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 182 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 190 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 210 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 186 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 204 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 212 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 190 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 270 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 247 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 159 + + Réception d'un montant non autorisé. Remboursement de la transaction... + + + Invalid transaction.You must gift storage deposit. + + src/app/components/award/components/award-mint/award-mint.component.ts + 209 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 218 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 281 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 206 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 205 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 213 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 225 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 209 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 227 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 227 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 206 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 293 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 262 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 175 + + La transaction n'est pas autorisée. Vous avez l'obligation de vous doter d'un portefeuille de stockage. + + + Invalid payment refunded. + + src/app/components/award/components/award-mint/award-mint.component.ts + 224 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 233 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 296 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 220 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 228 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 241 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 224 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 242 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 243 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 221 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 308 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 279 + + Remboursement de paiement non autorisé. + + + Waiting for transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 300 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 321 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 442 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 290 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 317 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 311 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 316 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 306 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 348 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 327 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 319 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 350 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 336 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 415 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 398 + + Transaction en attente... + + + Pending Funding + + + src/app/components/award/components/award-status/award-status.component.html + 5,6 + + Demande d'Approbation de Financement Pendante + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 11,12 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 11,12 + + Déclinée + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 17 + + + src/app/pages/space/pages/awards/awards.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 32 + + Terminées + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 570 + + Membres de l'Espace Uniquement + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 557 + + Gardiens de l'Espace Uniquement + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 29 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 583 + + Membres de l'Espace détenant un Badge Uniquement + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 39 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 595 + + Au moins un NFT de toutes les Collections + + + Specific members only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 53 + + Membres déterminés uniquement + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 28 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 95 + + + src/app/components/token/components/token-card/token-card.component.html + 70 + + Démarre dans + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 30 + + + src/app/components/countdown/countdown.component.html + 56 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 109 + + jours + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 33 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 122 + + NFT qui sortent aujourd'hui + + + Collection is not yet migrated to the decentralized network. + + src/app/components/collection/components/collection-card/collection-card.component.html + 59 + + La collection n'a pas encore été transférée vers le réseau décentralisé. + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 76 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 611 + + Limite de Création + + + Floor Price + + src/app/components/collection/components/collection-card/collection-card.component.html + 104 + + + src/app/pages/collection/pages/collection/collection.page.html + 207 + + Prix Plancher + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 56 + + Validation pendante + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 66 + + + src/app/pages/space/pages/awards/awards.page.ts + 33 + + + src/app/pages/space/pages/collections/collections.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 33 + + Repoussées + + + Remaining + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 42 + + NFT restants + + + NFTs + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 49 + + + src/app/pages/market/pages/market/market.page.ts + 13 + + + src/app/pages/market/pages/market/market.page.ts + 34 + + + src/app/pages/member/pages/member/member.page.ts + 67 + + NFT + + + Mint collection on network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 3 + + Mint la collection sur le réseau + + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 43,45 + + Toutes les pièces de cette collection de NFT ne pourront être transférées vers les réseaux sélectionnés par leurs propriétaires qu'au moment du reveal et lorsqu'elles auront été créées. + + + Unsold NFT's + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 60,61 + + Pièces NFT non vendues + + + Decide what should happen with all NFTs that were not sold yet. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 67 + + Faites preuve de leadership en prenant des décisions sur tous les NFT qui n'ont pas encore été vendus. + + + Keep the same price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 76 + + Garder le même prix + + + Take Ownership + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 86 + + Entrez en Possession + + + Set new price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 96 + + Fixer un nouveau prix + + + Burn all unsold + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 103 + + Effectuez le Burn de Tokens pour tous les invendus + + + Note that the collection ownership will be granted only to your profile. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 130,131 + + Remarque : en ce qui concerne l'affectation des droits de propriété sur la collection, l'exercice de ces derniers sera assorti de conditions applicables à votre profil uniquement. + + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 141,143 + + Dès que le processus de création de token aura été parachevé, les paramètres de la collection ne pourront plus être modifiés et vous ne pourrez plus ajouter de nouveaux NFT à la collection + + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 150 + + En cochant cette case, vous consentez que toutes les activités de vente opérationnelle des pièces de la collection de NFT soient annulées. + + + Confirm & Start minting + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 174,175 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 139,140 + + Confirmer & Démarrer le minting + + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 196,198 + + Lorsque la transaction aura été enregistrée, on procédera au retrait de toutes les pièces de collection de NFT en vue d'annuler la vente en cours et tous les NFT (qui auront été sélectionnés) n'ayant pas été vendus, seront brûlés. + + + remaining to make the transfer. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 171 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 90 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 132 + + + src/app/components/space/components/space-claim/space-claim.component.html + 78 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 87 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 140 + + + src/app/components/token/components/token-bid/token-bid.component.html + 170 + + + src/app/components/token/components/token-claim/token-claim.component.html + 199 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 194 + + + src/app/components/token/components/token-stake/token-stake.component.html + 279 + + + src/app/components/token/components/token-vote/token-vote.component.html + 209 + + Tokens restants pour effectuer le transfert. + + + Expired + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 213 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 174 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 93 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 135 + + + src/app/components/space/components/space-claim/space-claim.component.html + 81 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 90 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 143 + + + src/app/components/token/components/token-bid/token-bid.component.html + 173 + + + src/app/components/token/components/token-claim/token-claim.component.html + 202 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 197 + + + src/app/components/token/components/token-stake/token-stake.component.html + 282 + + + src/app/components/token/components/token-vote/token-vote.component.html + 212 + + + src/app/pages/token/services/helper.service.ts + 204 + + Expiré + + + NFT's from this collection are now being migrated. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 284,285 + + Le transfert des pièces de la collection de NFT en question, vient d'être réalisé. + + + NFT's in collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 308,309 + + Pièces NFT de la collection + + + Total Storage Fee + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 318 + + Montant Total des Frais de Stockage + + + (NFTs Storage Fee + Collection Storage Fee) + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 319 + + (Frais de Stockage de NFT + Frais de Stockage de Collection) + + + Select network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 91 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 86 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 100 + + Sélectionnez le réseau + + + Pending + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5,6 + + Pendante + + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 4 + + + src/app/pages/nft/pages/new/single/single.page.html + 352 + + Une collection est exigée. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 13 + + Sélectionner Collection + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 83 + + Sélectionner une Collection + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 114 + + + src/app/components/space/components/select-space/select-space.component.html + 114 + + Aucun résultat pour + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 20 + + Toutes les Collections + + + + + + + src/app/components/confirm-modal/confirm-modal.component.html + 48,50 + + + src/app/components/confirm-modal/confirm-modal.component.html + 51,53 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 246,251 + + + src/app/components/token/components/token-vote/token-vote.component.html + 46,47 + + + src/app/pages/collection/pages/collection/collection.page.html + 130,131 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 55,56 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 71,72 + + + + + Are you sure? + + src/app/components/confirm-modal/confirm-modal.component.ts + 30 + + Si tel est votre choix, donnez votre consentement + + + Close + + src/app/components/confirm-modal/confirm-modal.component.ts + 33 + + Fermer + + + Confirm + + src/app/components/confirm-modal/confirm-modal.component.ts + 34 + + + src/app/components/token/components/token-bid/token-bid.component.html + 146 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 170 + + + src/app/components/token/components/token-vote/token-vote.component.html + 181 + + Consentir à + + + Connect wallet + + src/app/components/connect-wallet/connect-wallet.component.html + 7 + + Connectez votre portefeuille + + + d + + src/app/components/countdown/countdown.component.html + 55 + + j + + + h + + src/app/components/countdown/countdown.component.html + 68 + + h + + + hours + + src/app/components/countdown/countdown.component.html + 69 + + heures + + + m + + src/app/components/countdown/countdown.component.html + 81 + + m + + + min + + src/app/components/countdown/countdown.component.html + 82 + + mn + + + s + + src/app/components/countdown/countdown.component.html + 94 + + s + + + sec + + src/app/components/countdown/countdown.component.html + 95 + + s + + + Ends + + src/app/components/date-tag/date-tag.component.ts + 11 + + Prend fin + + + Price + + src/app/components/iota-input/iota-input.component.html + 3 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 139 + + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 81 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 19 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 124 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 49 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 75 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 37 + + + src/app/pages/token/pages/trade/trade.page.html + 209 + + + src/app/pages/token/pages/trade/trade.page.html + 283 + + + src/app/pages/token/pages/trade/trade.page.html + 372 + + + src/app/pages/token/pages/trade/trade.page.html + 659 + + + src/app/pages/token/pages/trade/trade.page.html + 846 + + Prix + + + Verified addresses + + src/app/components/member/components/member-about/member-about.component.html + 90 + + Les adresses ont été vérifiées + + + Manage + + src/app/components/member/components/member-about/member-about.component.html + 96 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 297 + + + src/app/pages/space/pages/space/space.page.ts + 53 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 18 + + Gérer + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 119 + + Espaces auxquels vous vous êtes récemment joint + + + All + + src/app/components/member/components/member-about/member-about.component.html + 124 + + Tout + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 155 + + Il N'existe Encore Aucune Contribution . + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 74 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 22 + + primes + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 14 + + Nom d'Affichage + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19 + + Définissez un nom d’affichage. Cela n'apportera pas de changements au nom d’utilisateur. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 26 + + Nom d'affichage (optionnel) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 36 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 208 + + + src/app/pages/space/pages/space/space.page.ts + 44 + + Zoom sur + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 41 + + Une courte présentation de vous-même exposée sur votre profil. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 48 + + Votre présentation (optionnelle) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 57 + + + src/app/pages/space/pages/upsert/upsert.page.html + 166 + + Avatar + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 62 + + Personnalisez votre identifiant Soonaverse. + + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,78 + + Créez un avatar unique et gratuit pour votre photo de profil. De nouveaux types d'avatars prestigieux, considérés comme extrêmement rares et des avatars qui pourront être négociés en tant qu'objets de collection/accessoires seront BIENTÔT disponibles. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 92 + + Quelle SURPRISE ! Eh bien, Félicitations. Apparemment, vous êtes le détenteur de l'avatar le plus beau. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 97 + + + src/app/pages/space/pages/upsert/upsert.page.html + 54 + + Mise en réseau + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 99 + + + src/app/pages/space/pages/upsert/upsert.page.html + 61 + + Le nom d'utilisateur fourni sur Github n'est pas autorisé. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 105 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67 + + Tapez votre nom d'utilisateur de votre compte Github + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 117 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 177 + + + src/app/pages/space/pages/upsert/upsert.page.html + 78 + + Le nom d'utilisateur fourni sur Twitter n'est pas autorisé. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 123 + + + src/app/pages/space/pages/upsert/upsert.page.html + 84 + + Tapez votre nom d'utilisateur de votre compte Twitter + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 135 + + Seul le format username#1234 est pris en charge. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 141 + + Tapez votre nom d'utilisateur de votre compte Discord + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 155 + + Paramètres + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 157,158 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 123,124 + + Sauvegarder les modifications + + + + + + + src/app/components/network/components/select-network/select-network.component.html + 4,6 + + + + + + Shimmer + + src/app/components/network/components/select-network/select-network.component.html + 17 + + + src/app/components/network/components/select-network/select-network.component.html + 28 + + + src/app/components/network/components/selected-network/selected-network.component.html + 11 + + + src/app/pages/award/pages/award/award.page.html + 44 + + + src/app/pages/collection/pages/collection/collection.page.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 575 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 169 + + Shimmer + + + IOTA + + src/app/components/network/components/select-network/select-network.component.html + 45 + + + src/app/components/network/components/select-network/select-network.component.html + 56 + + + src/app/components/network/components/selected-network/selected-network.component.html + 19 + + + src/app/pages/award/pages/award/award.page.html + 52 + + + src/app/pages/collection/pages/collection/collection.page.html + 59 + + + src/app/pages/nft/pages/nft/nft.page.html + 583 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 177 + + IOTA + + + Selected Network + + src/app/components/network/components/selected-network/selected-network.component.html + 4,6 + + Réseau Sélectionné + + + Shimmer Testnet + + src/app/components/network/components/selected-network/selected-network.component.html + 15 + + + src/app/pages/award/pages/award/award.page.html + 48 + + + src/app/pages/collection/pages/collection/collection.page.html + 55 + + + src/app/pages/nft/pages/nft/nft.page.html + 579 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 173 + + Testnet Shimmer + + + IOTA Devnet + + src/app/components/network/components/selected-network/selected-network.component.html + 23 + + + src/app/pages/award/pages/award/award.page.html + 56 + + + src/app/pages/collection/pages/collection/collection.page.html + 63 + + + src/app/pages/nft/pages/nft/nft.page.html + 587 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 181 + + Devnet IOTA + + + Send + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + Envoyer + + + to following address: + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + à l'adresse suivante : + + + Copied + + src/app/components/network/components/send-funds/send-funds.component.html + 25 + + + src/app/components/share/share.component.html + 27 + + + src/app/components/wallet-address/wallet-address.component.html + 29 + + Chargée + + + Copy + + src/app/components/network/components/send-funds/send-funds.component.html + 26 + + Charger + + + Do not send funds from an exchange, always use wallets you fully control. + + + src/app/components/network/components/send-funds/send-funds.component.html + 34,36 + + Le transfert de fonds ne doit pas être réalisé par l'intermédiaire d'une plateforme d'Échanges, utilisez toujours des portefeuilles que vous contrôlez entièrement. + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 3 + + Faire une soumission + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 15 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 16 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 25 + + Reproduction NFT + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 38 + + Prend fin + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 48 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 36 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46 + + Redevances + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 55 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 43 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 53 + + Les redevances sont automatiquement soumises à retenue et payées aux artistes. + + + Royalties goes to + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 73,74 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 61,62 + + Les redevances seront versées à + + + + + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 75,76 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 63,64 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 262,263 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 188,189 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 264,265 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 306,307 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 344,345 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 45 + + + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 109 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Soumission actuelle la plus élevée + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 111 + + + src/app/pages/nft/pages/nft/nft.page.html + 111 + + Minimum de soumission + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 127 + + + src/app/pages/nft/pages/nft/nft.page.html + 116 + + Votre soumission est la plus élevée + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 172,173 + + Le prix actuel est rafraîchi en temps réel + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 208,209 + + L'adresse de votre NFT désiré sera verrouillée pour vous pendant toute la durée de la vente aux enchères. Dès que votre paiement sera effectué, votre offre sera verrouillée. Une soumission plus élevée que la vôtre, sera retenue et, le cas échéant, vous serez remboursé immédiatement. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 216,218 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,257 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 321,323 + + Une soumission plus élevée que la vôtre, sera retenue et, le cas échéant, vous serez remboursé immédiatement. Si vous souhaitez déposer une nouvelle soumission, envoyez le montant supérieur directement à la même adresse. + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 237,238 + + Déposer une soumission + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 278 + + Mes opérations de paiement + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 286 + + Date d'Envoi + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 287 + + + src/app/pages/token/pages/trade/trade.page.html + 854 + + Unité de temps + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 289 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 33 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 110 + + + src/app/pages/member/pages/tokens/tokens.page.html + 328 + + + src/app/pages/member/pages/transactions/transactions.page.html + 25 + + + src/app/pages/nft/pages/nft/nft.page.html + 323 + + + src/app/pages/nft/pages/nft/nft.page.html + 385 + + + src/app/pages/nft/pages/nft/nft.page.html + 435 + + + src/app/pages/token/pages/trade/trade.page.html + 200 + + + src/app/pages/token/pages/trade/trade.page.html + 274 + + + src/app/pages/token/pages/trade/trade.page.html + 363 + + + src/app/pages/token/pages/trade/trade.page.html + 664 + + + src/app/pages/token/pages/trade/trade.page.html + 851 + + Montant + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 55 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 96 + + Particularité + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 311,310 + + + src/app/pages/nft/pages/nft/nft.page.html + 324 + + + src/app/pages/nft/pages/nft/nft.page.html + 360,359 + + + src/app/pages/nft/pages/nft/nft.page.html + 386 + + + src/app/pages/nft/pages/nft/nft.page.html + 410,409 + + + src/app/pages/nft/pages/nft/nft.page.html + 436 + + + src/app/pages/nft/pages/nft/nft.page.html + 460,459 + + Lien + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 345 + + Félicitations, vous avez gagné le NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 357,358 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 283,284 + + + src/app/components/token/components/token-bid/token-bid.component.html + 271,272 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 313,314 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 306,307 + + + src/app/components/token/components/token-vote/token-vote.component.html + 330,331 + + Achevez la commande + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 368,369 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 294,295 + + Visualiser mon NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 384 + + Le délai de soumission des offres est expiré. Dommage :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 272 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 459 + + NFT généré + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 274 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 461 + + SFT + + + NFT is not yet migrated to the decentralized network. + + src/app/components/nft/components/nft-card/nft-card.component.html + 65 + + Le NFT n'a pas encore été transféré vers le réseau décentralisé. + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 118 + + jour + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 156 + + Soumission à l'heure actuelle + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 191 + + + src/app/pages/nft/pages/nft/nft.page.html + 594 + + Appartenant à + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 229,231 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 167 + + NFT nouveau + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 3 + + Finalisation de la commande + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 74,75 + + Prix total  + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150,151 + + Confirmer et Verrouiller + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 156 + + Votre NFT sera verrouillé pour l'achat pendant + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + minutes + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 185 + + Le montant reçu dépasse la limite autorisée ou n'est pas suffisant. Veuillez réessayer. + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 237,238 + + Vérification de paiement... + + + Order created. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 437 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 332 + + Ordre placé. + + + Deposit NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 215 + + Dépôt de NFT + + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 46,48 + + Vous avez la possibilité de déposer à nouveau votre NFT sur la plateforme Soonaverse, afin de pouvoir pratiquer le trading. Lorsqu'un processus de traitement des données aura été mené à son terme, votre NFT sera verrouillé sur Soonaverse. Le retrait peut intervenir à tout moment. + + + Confirm & Start deposit + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 76,77 + + Confirmer & Commencer le dépôt de NFT + + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 113,115 + + Dans le cas où le NFT n'est pas identifié au sein de la plateforme Soonaverse : Nous lancerons un processus de création de nouvelles Collections et des Espaces qui leur sont associés. Si vous êtes bien le créateur de ce NFT, n'oubliez pas de revendiquer cet espace. + + + NFT has been deposited. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 165 + + Un NFT a été déposé. + + + See NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 169,170 + + Voir le NFT + + + Terms & Conditions + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 85 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 107 + + Termes & Conditions + + + Send NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 86 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 108 + + Envoyez votre NFT + + + NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 147 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 172 + + Confirmation de réception du NFT. + + + Invalid NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 191 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 216 + + Confirmation de réception du NFT non autorisé. + + + Invalid NFT refunded. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 205 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 230 + + Confirmation de remboursement du NFT non autorisé. + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 19 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 37 + + Accès en Avant-première + + + Sale Starts + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 57 + + + src/app/pages/nft/services/helper.service.ts + 142 + + Ouverture de la Vente + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 60 + + + src/app/pages/nft/pages/nft/nft.page.html + 70 + + Prix actuel + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 80 + + Créateur + + + System info + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 119 + + + src/app/pages/nft/pages/nft/nft.page.html + 634 + + Système d'exploitation : Infos + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 130 + + + src/app/pages/nft/pages/nft/nft.page.html + 654 + + L'adresse actuelle n'identifie pas de connexion à un mainnet opérationnel. Dès que la mise en fonction opérationnelle du réseau principal sera assurée par IOTA/Shimmer, vous aurez la possibilité de transférer en un clic le NFT en question vers le réseau de votre choix. + + + Properties + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 135 + + + src/app/pages/nft/pages/new/single/single.page.html + 90 + + Attributs + + + Stats + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 139 + + + src/app/pages/nft/pages/new/single/single.page.html + 193,192 + + Statistiques + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149 + + + src/app/pages/nft/pages/new/single/single.page.html + 301 + + + src/app/pages/nft/pages/nft/nft.page.html + 27 + + Image visuelle NFT + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + Métadonnées sur IPFS + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + Image visuelle sur IPFS + + + Available once minted... + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 64 + + + src/app/pages/nft/pages/nft/nft.page.ts + 81 + + Disponible une fois mint... + + + Set your floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 6,7 + + Fixez votre prix d'entrée + + + Available time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 42,43 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 42,43 + + Disponibilité horaire + + + NOW + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 54,55 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 54,55 + + À PRÉSENT + + + Select Date/Time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Sélectionnez Date/Heure + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 71 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 71 + + + src/app/pages/nft/pages/new/single/single.page.html + 69 + + Disponible Dès est exigé. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 80 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 80 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 70 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 81 + + + src/app/pages/nft/pages/new/single/single.page.html + 68 + + + src/app/pages/nft/pages/new/single/single.page.html + 79 + + Disponible dès + + + Auction length + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 91,92 + + Durée de l'enchère + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 98 + + Pour le prochain sprint, au cours duquel des durées différentes de vente aux enchères vont s'enchaîner, il est avant tout indispensable pour la communauté de voter ! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 115 + + La période de temps des enchères est de 3 jours + + + Auction can't be canceled after start date + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 125 + + À partir de la date d'ouverture des enchères, la vente ne pourra plus être annulée + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 129 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 145 + + Lorsque vous aurez terminé d'annoncer les NFT dans la liste à prix fixe, un message de confirmation vous sera envoyé. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 138,139 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 154,155 + + Confirmez les NFT annoncés + + + Set your price + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 6,7 + + Fixez votre prix + + + Sale type + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Types de ventes + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 103,104 + + Vente Ouverte + + + Specific member(s) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 113,114 + + Membre(s) déterminé(s) + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2 + + + src/app/pages/token/pages/trade/trade.page.html + 110 + + Historique d'achat/vente + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 8,10 + + Cet élément est le vôtre, et seulement le vôtre + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 16 + + Cela rendra votre élément non disponible à la vente. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 17 + + Bloquer la vente ! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 15 + + Liste des Éléments destinés à la vente + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 80 + + Non destiné à la vente + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 88 + + + src/app/pages/token/services/new.service.ts + 29 + + Prix fixe + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 96 + + Enchères + + + Stake NFT + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 221 + + Faites du Staking avec votre NFT + + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 46,48 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 147,149 + + Votre NFT sera envoyé à nouveau sur votre wallet à l'aide du facteur de verrouillage temporel. Il est important d'indiquer des montants adéquats que vous allez devoir stocker afin de pouvoir activer la fonction de verrouillage temporel. Il suffit d'ajouter une balise directement à "soonaverse", dans votre portefeuille. + + + For how long you want to stake? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 56,57 + + + src/app/components/token/components/token-stake/token-stake.component.html + 174,175 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 57,58 + + Pendant combien de temps désirez-vous staker vos tokens ? + + + Stake type? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 77,78 + + Variante du proof of stake ? + + + Confirm & Start Stake + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 118,119 + + Confirmer & Démarrer le Staking + + + NFT has been staked. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 207 + + Le NFT a été staké. + + + See Collection + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 218,219 + + Voir la Collection + + + Dynamic + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 76 + + Évolutif + + + Static + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 80 + + Stable + + + More + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 97,98 + + Plus loin... + + + Pending + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 6,7 + + + src/app/pages/token/pages/token/token.page.html + 36 + + + src/app/pages/token/pages/trade/trade.page.html + 524 + + Pendant + + + Rejected + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 12,13 + + + src/app/pages/token/pages/token/token.page.html + 42 + + Repoussé + + + Commencing + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 18,19 + + Débute + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 24,25 + + En Préparation + + + Completed + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 31,32 + + Terminée + + + Share + + src/app/components/share/share.component.html + 16 + + + src/app/components/share/share.component.html + 39 + + + src/app/pages/token/pages/trade/trade.page.html + 64 + + + src/app/pages/token/pages/trade/trade.page.html + 635,634 + + Partager + + + Copy to clipboard + + src/app/components/share/share.component.html + 28 + + Copier dans le presse-papiers + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 4 + + + src/app/pages/award/pages/new/new.page.html + 121 + + + src/app/pages/proposal/pages/new/new.page.html + 211 + + Un Espace est Exigé. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 13 + + Sélectionnez l'Espace + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 83 + + + src/app/pages/award/pages/new/new.page.html + 152 + + + src/app/pages/proposal/pages/new/new.page.html + 242 + + Sélectionner un Espace + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 20 + + Tous les Espaces + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 19,20 + + Rejoint le + + + members + + src/app/components/space/components/space-card/space-card.component.html + 44 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 23 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + membres + + + Space Claim + + src/app/components/space/components/space-claim/space-claim.component.html + 3 + + Demande d'Espace + + + Confirm and generate address + + src/app/components/space/components/space-claim/space-claim.component.html + 54,55 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 52,53 + + + src/app/components/token/components/token-claim/token-claim.component.html + 138,139 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 96,97 + + + src/app/components/token/components/token-stake/token-stake.component.html + 251,252 + + Confirmez et générez une adresse + + + Claim complete. Congratulations. + + src/app/components/space/components/space-claim/space-claim.component.html + 160 + + + src/app/components/token/components/token-claim/token-claim.component.html + 281 + + Félicitations ! Votre demande est complète. + + + Close + + src/app/components/space/components/space-claim/space-claim.component.html + 172,173 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 181,182 + + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 29,30 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 79,80 + + + src/app/components/token/components/token-claim/token-claim.component.html + 293,294 + + + src/app/components/token/components/token-stake/token-stake.component.html + 378,379 + + Fermer + + + Invalid amount or invalid senders address. Refunding transaction... + + src/app/components/space/components/space-claim/space-claim.component.ts + 183 + + La somme fournie ou l'adresse du destinataire n'est pas autorisée. Remboursement de la transaction... + + + Funds refunded. + + src/app/components/space/components/space-claim/space-claim.component.ts + 222 + + Fonds remboursés. + + + Space claim submitted. + + src/app/components/space/components/space-claim/space-claim.component.ts + 306 + + Votre demande d'espace a été soumise. + + + Token Reward Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 16 + + Programme de Récompenses en Tokens + + + Existing Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 29 + + Programme Actuel + + + Upload New + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 37 + + Télécharger nouveau + + + Vault address: + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 55,64 + + Adresse du Vault : + + + Schedule a new Reward + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 82,83 + + Planifier une nouvelle Récompense + + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 93,95 + + Pour une planification de programme de nouvelles récompenses de staking, veuillez cliquer ici. Dans ce but, il paraît nécessaire de charger un fichier CSV, comprenant des renseignements sur la distribution et les adresses des utilisateurs. + + + Start Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 148 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 24 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 24 + + Date de Mise en Place + + + End Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 149 + + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 19 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 25 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 25 + + Date Butoir + + + Vesting Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 150 + + Période de Vesting + + + Tokens to Distribute + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 151 + + Tokens à Allouer + + + Status + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 152 + + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 110,109 + + + src/app/pages/token/pages/trade/trade.page.html + 376 + + État + + + Proposal created to remove the reward. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 154 + + Initiative créée pour retirer la récompense. + + + By checking this box, you agree with + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 12 + + En cochant cette case, vous consentez aux + + + Terms and Conditions + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 13 + + Termes et Conditions + + + Timeline + + src/app/components/timeline/timeline.component.html + 2 + + + src/app/components/timeline/timeline.component.html + 8 + + Chronologie + + + Earned Badge + + src/app/components/timeline/timeline.component.html + 66 + + Badge Gagné + + + with + + src/app/components/timeline/timeline.component.html + 66 + + avec + + + Listed by + + src/app/components/timeline/timeline.component.html + 109 + + Listés par + + + Made available for auction by + + src/app/components/timeline/timeline.component.html + 112 + + Mis aux enchères par + + + Purchased by + + src/app/components/timeline/timeline.component.html + 170 + + Achetés par + + + See + + src/app/components/timeline/timeline.component.html + 181 + + Voir + + + Hide + + src/app/components/timeline/timeline.component.html + 182 + + Masquer + + + Listed by space + + src/app/components/timeline/timeline.component.html + 287 + + Listés par espace + + + Refund blocked funds + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 3 + + Récupération de fonds bloqués + + + Total available tokens to refund + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 29 + + Nombre total de tokens disponibles à récupérer + + + Refund complete. Congratulations. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 169 + + Félicitations ! Le processus de récupération des fonds a été achevé. + + + Credit refund submitted. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 309 + + Une demande de récupération des avoirs a été déposée. + + + Airdrop tokens on the network + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 3 + + Airdrop de tokens sur le réseau + + + Tokens to airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 56,57 + + Tokens à distribuer via un airdrop + + + Confirm & Start Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 86,87 + + Confirmer & Démarrer Airdrop + + + Tokens to Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 120,121 + + Tokens à Distribuer via un Airdrop + + + Finish Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 239,240 + + Achever Airdrop + + + Detail + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 60,61 + + Particularité + + + Trade + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 70,71 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 201,202 + + Trade + + + Price (USD) + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 101 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 145 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 86 + + Prix (USD) + + + 24h Change + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 126,127 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 115,116 + + Échange 24h + + + 24h Volume + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 154 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 146 + + Volume 24h + + + M. Cap + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 172 + + mCap + + + Open buy order + + src/app/components/token/components/token-bid/token-bid.component.html + 3 + + Ouvrir un ordre d'achat + + + Summary + + src/app/components/token/components/token-bid/token-bid.component.html + 29,30 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 39,40 + + + src/app/components/token/components/token-offer/token-offer.component.html + 46,47 + + Récapitulatif + + + Token amount to buy + + src/app/components/token/components/token-bid/token-bid.component.html + 34,35 + + Montant de tokens que vous souhaitez acheter + + + Offered price per token + + src/app/components/token/components/token-bid/token-bid.component.html + 44,45 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 44,45 + + + src/app/components/token/components/token-offer/token-offer.component.html + 51,52 + + Prix proposé par token + + + Token amount to send + + src/app/components/token/components/token-bid/token-bid.component.html + 73,74 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 117,118 + + Montant de tokens que vous souhaitez envoyer + + + ~ + + src/app/components/token/components/token-bid/token-bid.component.html + 89,98 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 60,69 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 90,99 + + + src/app/pages/token/pages/trade/trade.page.html + 553,556 + + ~ + + + I agree with + + src/app/components/token/components/token-bid/token-bid.component.html + 129 + + + src/app/components/token/components/token-claim/token-claim.component.html + 115 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 153 + + + src/app/components/token/components/token-offer/token-offer.component.html + 133 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 78 + + + src/app/components/token/components/token-refund/token-refund.component.html + 65 + + J'accepte + + + Token terms and Conditions + + src/app/components/token/components/token-bid/token-bid.component.html + 131 + + + src/app/components/token/components/token-claim/token-claim.component.html + 117 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 155 + + + src/app/components/token/components/token-offer/token-offer.component.html + 135 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 80 + + + src/app/components/token/components/token-refund/token-refund.component.html + 67 + + Les termes et les Conditions du Token + + + and generate address + + src/app/components/token/components/token-bid/token-bid.component.html + 147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 171 + + + src/app/components/token/components/token-vote/token-vote.component.html + 182 + + et générer une adresse + + + Once you agree with the terms, the generated address will remain active during the whole sale. + + src/app/components/token/components/token-bid/token-bid.component.html + 154,155 + + + src/app/components/token/components/token-claim/token-claim.component.html + 146,147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 178,179 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 103,104 + + L'adresse générée demeurera en vigueur tout au long de la période de vente, lorsque vous aurez accepté les termes d'achat. + + + Buy complete. Congratulations. + + src/app/components/token/components/token-bid/token-bid.component.html + 259 + + Félicitations ! Le processus d'achat a été achevé. + + + Bid created. + + src/app/components/token/components/token-bid/token-bid.component.ts + 344 + + Une soumission a été placée. + + + Are you sure you want to cancel the sale? + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 17 + + Voulez-vous vraiment annuler la vente ? + + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 23,25 + + Un processus de demande automatique, permettant aux investisseurs d'être remboursés immédiatement, se déclenchera lorsque la vente sera annulée. + + + Cancel sale + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 32,33 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 74,75 + + Annulation de la vente + + + Canceled public sale. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts + 56 + + La vente publique a été annulée. + + + Total () + + src/app/components/token/components/token-cancel/token-cancel.component.html + 51,52 + + Nombre total () + + + Are you sure you want to cancel your buy order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 66 + + Voulez-vous vraiment annuler l'ordre d'achat ? + + + Are you sure you want to cancel your sell order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 69 + + Voulez-vous vraiment annuler l'ordre de vente ? + + + Confirm + + src/app/components/token/components/token-cancel/token-cancel.component.html + 76,77 + + Consentir à + + + Cancelled. + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 48 + + + src/app/pages/token/pages/trade/trade.page.ts + 589 + + Révoqué. + + + Cancel your buy + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 80 + + Annuler mon achat + + + Cancel your sell + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 81 + + Annuler ma vente + + + Ongoing sale + + src/app/components/token/components/token-card/token-card.component.html + 22 + + Vente en cours + + + Sale ends soon + + src/app/components/token/components/token-card/token-card.component.html + 23 + + La vente va bientôt se terminer + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 24 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 21 + + Fin du refroidissement + + + Sale starts + + src/app/components/token/components/token-card/token-card.component.html + 55,57 + + Ouverture de la vente + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 115,117 + + + src/app/components/token/components/token-card/token-card.component.html + 175,177 + + Clôture de la vente + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 130 + + + src/app/components/token/components/token-card/token-card.component.html + 190 + + + src/app/components/token/components/token-card/token-card.component.html + 250 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 176 + + + src/app/components/token/components/token-row/token-row.component.html + 79 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 20 + + Clôture de la vente + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 235,237 + + Fin du refroidissement + + + Token Claim + + src/app/components/token/components/token-claim/token-claim.component.html + 3 + + Demande de Token + + + Total available tokens to claim as of today + + src/app/components/token/components/token-claim/token-claim.component.html + 42 + + + src/app/components/token/components/token-claim/token-claim.component.html + 56 + + Nombre total de tokens disponibles qui peuvent être réclamés dès aujourd'hui + + + Tokens available from + + src/app/components/token/components/token-claim/token-claim.component.html + 76 + + Tokens disponibles à partir de + + + Total tokens to claim + + src/app/components/token/components/token-claim/token-claim.component.html + 84 + + Nombre total de tokens pouvant être réclamés + + + Token claim submitted. + + src/app/components/token/components/token-claim/token-claim.component.ts + 320 + + Votre demande de token a été soumise. + + + Guardian's of the space will be able to decide where this token will be minted. + + src/app/components/token/components/token-info/token-info-description.component.html + 41 + + Les gardiens de l'espace auront la faculté de décider où le mint du token en question aura lieu. + + + Icon + + src/app/components/token/components/token-info/token-info-description.component.ts + 25 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 24 + + Icône + + + Name + + src/app/components/token/components/token-info/token-info-description.component.ts + 26 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 25 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 31,30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 74 + + + src/app/pages/nft/pages/new/single/single.page.html + 21 + + + src/app/pages/nft/pages/new/single/single.page.html + 27,26 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 15 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 21,20 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 25 + + Nom du Token + + + Symbol + + src/app/components/token/components/token-info/token-info-description.component.ts + 27 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 30 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 39,38 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 26 + + Symbole du Token + + + Launchpad Price + + src/app/components/token/components/token-info/token-info-description.component.ts + 28 + + Prix de Lancement + + + Network + + src/app/components/token/components/token-info/token-info-description.component.ts + 29 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 20 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 5,4 + + + src/app/pages/nft/pages/nft/nft.page.html + 542 + + + src/app/pages/nft/pages/nft/nft.page.html + 564 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 119 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 160 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 28 + + Réseau + + + Total supply + + src/app/components/token/components/token-info/token-info-description.component.ts + 30 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 29 + + Total supply + + + Current distribution + + src/app/components/token/components/token-info/token-info-description.component.ts + 31 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 30 + + Répartition actuelle + + + Type + + src/app/components/token/components/token-info/token-info-description.component.ts + 32 + + + src/app/pages/member/pages/tokens/tokens.page.html + 58 + + + src/app/pages/member/pages/tokens/tokens.page.html + 325 + + + src/app/pages/member/pages/transactions/transactions.page.html + 24 + + + src/app/pages/nft/pages/nft/nft.page.html + 384 + + + src/app/pages/nft/pages/nft/nft.page.html + 434 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 31 + + + src/app/pages/token/pages/trade/trade.page.html + 361 + + Niveau + + + Coming soon + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 91,92 + + À paraître bientôt + + + In Cooldown + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 98,99 + + + src/app/components/token/components/token-row/token-row.component.html + 245,246 + + En Refroidissement + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 108,109 + + + src/app/components/token/components/token-row/token-row.component.html + 256,257 + + + src/app/pages/token/pages/trade/trade.page.html + 456 + + + src/app/pages/token/pages/trade/trade.page.html + 467 + + + src/app/pages/token/pages/trade/trade.page.html + 909,910 + + Achat + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 116 + + + src/app/pages/token/pages/trade/trade.page.html + 387 + + + src/app/pages/token/pages/trade/trade.page.html + 1210 + + Achat + + + Sale starts + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 167 + + + src/app/components/token/components/token-row/token-row.component.html + 70 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 19 + + Ouverture de la vente + + + Cooldown period ends + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 187,188 + + + src/app/components/token/components/token-row/token-row.component.html + 90,91 + + Fin du cycle de refroidissement + + + Mint token on network + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 3 + + Mint un token sur le réseau + + + Public sale will no longer be available after bringing token to a network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 45,46 + + Dès que le token aura été redirigé vers un réseau, la vente publique ne sera plus disponible. + + + Once minted all owners will have the option to migrate their tokens to the selected network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 56,58 + + Tous les propriétaires n'auront la possibilité de transférer leurs tokens vers le réseau sélectionné, qu'au moment du reveal et lorsque le processus de création du token aura été mené à son terme. + + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 68,70 + + Remarque : tous les tokens n'ayant pas été délivrés, seront déposés dans votre profil de membre et l'exercice des droits de propriété sur les tokens sera assorti de conditions applicables à votre profil. + + + Tokens to migrate + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 92,93 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 173,174 + + Tokens à transférer + + + Locked public tokens + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 107,108 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 189,190 + + Tokens publics verrouillés + + + Open sale order + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 3 + + Ouvrir l'ordre de vente + + + Token ID + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 30,31 + + + src/app/components/token/components/token-offer/token-offer.component.html + 27,28 + + ID Token + + + You will receive + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 74,75 + + + src/app/components/token/components/token-offer/token-offer.component.html + 73,74 + + + src/app/pages/token/pages/trade/trade.page.html + 1132,1133 + + Vous recevez + + + Fee + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 103 + + + src/app/components/token/components/token-offer/token-offer.component.html + 101 + + + src/app/pages/token/pages/trade/trade.page.html + 1172 + + Frais de Transaction + + + No FEES! + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 110,111 + + + src/app/components/token/components/token-offer/token-offer.component.html + 108,109 + + + src/app/pages/token/pages/trade/trade.page.html + 1188,1189 + + 0% COMMISSION ! + + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 232,234 + + + src/app/components/token/components/token-vote/token-vote.component.html + 249,251 + + Veillez bien à ce que les fonctions de bonus de parrainage du dépôt de stockage soient activées à partir des paramètres Firefly dans votre portefeuille lors de l'envoi de tokens. + + + Sell complete. Congratulations. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 301 + + + src/app/components/token/components/token-vote/token-vote.component.html + 318 + + Félicitations ! Le processus de vente a été achevé. + + + Offer order created. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 346 + + Offre pour laquelle une confirmation de commande a été créée. + + + Open Token Sell + + src/app/components/token/components/token-offer/token-offer.component.html + 3 + + Ouvrir la Position de Vente + + + Your Balance + + src/app/components/token/components/token-offer/token-offer.component.html + 35,36 + + Votre Solde + + + Offered amount of tokens + + src/app/components/token/components/token-offer/token-offer.component.html + 64,65 + + Montant proposé de tokens + + + Create a Sell Order + + src/app/components/token/components/token-offer/token-offer.component.html + 151,152 + + Créer un Ordre de Vente + + + Offer created. + + src/app/components/token/components/token-offer/token-offer.component.ts + 102 + + Offre créée. + + + Public sale info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 4 + + Vente publique : Infos + + + Start date is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 7 + + La date d'ouverture est exigée. + + + Start date for the token offering + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 16 + + Date d'ouverture de l'offre de tokens au public + + + Offering length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 23 + + La durée de validité de l'offre au public est exigée. + + + Select token offering length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 48 + + Sélectionnez la durée de validité de l'offre de tokens au public (2 jours par défaut) + + + Token allocation info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 63 + + Distribution de tokens : Infos + + + Sale Setup + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 81 + + Mise en Place de la Vente + + + Enable Cooldown period + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 87,88 + + Activer le cycle de Refroidissement + + + Enable Cooldown with refund option. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 98,99 + + Activer l'option de Refroidissement avec paiement d'indemnités. + + + Cooldown period length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 103 + + La durée du cycle de refroidissement est exigée. + + + Select token cooldown length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 129 + + Sélectionnez la durée de validité de refroidissement du token (2 jours par défaut) + + + No Cooldown. Participants can’t refund. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 149,150 + + Il N'existe Pas de Refroidissement. Les participants ne peuvent pas verser d'indemnités. + + + Enable Oversale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 160,161 + + Activer la Survente + + + No Oversale. Sale ends with 100% reached. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 171,172 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 54,55 + + Il N'existe Pas de Survente. L'enchère s'est terminée, atteignant 100% de la vente. + + + Sale continues after 100% reached + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 179,180 + + L'enchère se poursuivra après avoir atteint 100% de la vente + + + Confirm and schedule sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 195,196 + + Confirmez et organisez la vente + + + Price per token + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 106 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 34 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 42 + + Prix par token + + + Public sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 135 + + + src/app/pages/token/pages/new/summary/summary.component.html + 214 + + Vente publique + + + Purchase token + + src/app/components/token/components/token-purchase/token-purchase.component.html + 3 + + Acquisition de tokens + + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 113 + + Entrez le nombre de tokens que vous souhaitez acheter. La cotation se fera en IOTA. + + + Enter how much you want to spend. Amount of tokens will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 116 + + Entrez le montant que vous souhaitez investir. Le volume de tokens sera facturé. + + + Purchased tokens + + src/app/components/token/components/token-purchase/token-purchase.component.html + 243,244 + + Tokens achetés + + + Price + + src/app/components/token/components/token-purchase/token-purchase.component.html + 260,261 + + Prix + + + Cooldown period ends + + src/app/components/token/components/token-refund/token-refund.component.html + 23 + + Fin du cycle de refroidissement + + + Confirm and refund + + src/app/components/token/components/token-refund/token-refund.component.html + 82,83 + + Validation et versement d'indemnités + + + Refund token + + src/app/components/token/components/token-refund/token-refund.component.ts + 61 + + Indemnisation + + + Initial Price + + src/app/components/token/components/token-row/token-row.component.html + 39 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 27 + + Prix Initial + + + Avg. Price + + src/app/components/token/components/token-row/token-row.component.html + 47 + + Dernier prix + + + Change (24h) + + src/app/components/token/components/token-row/token-row.component.html + 107,108 + + Transfert (24h) + + + Volume 24h + + src/app/components/token/components/token-row/token-row.component.html + 150 + + Volume 24h + + + Market Cap + + src/app/components/token/components/token-row/token-row.component.html + 166 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 169 + + + src/app/pages/token/pages/trade/trade.page.html + 582 + + Market Cap + + + Claim + + src/app/components/token/components/token-row/token-row.component.html + 210,211 + + Réclamer + + + Refund + + src/app/components/token/components/token-row/token-row.component.html + 222,223 + + Indemnisation + + + Launching soon + + src/app/components/token/components/token-row/token-row.component.html + 238,239 + + Lancement sous peu + + + Buy / Sell + + src/app/components/token/components/token-row/token-row.component.html + 259,260 + + Acheter / Vendre + + + Stake your token + + src/app/components/token/components/token-stake/token-stake.component.html + 3 + + Stakez votre token + + + Select or define the amount you want to stake and the period for how long you want to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 13,15 + + Sélectionnez ou indiquez le montant de tokens que vous souhaitez staker, ainsi que la durée de verrouillage préconisée pour le processus de staking. + + + Since you are a guardian you can also + + src/app/components/token/components/token-stake/token-stake.component.html + 17 + + Compte tenu de votre rôle en tant que gardien, vous pouvez aussi + + + - Choose an amount and for how long you’d like to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 50 + + - Veuillez choisir le montant et la durée de stockage durant laquelle vous aimeriez verrouiller vos tokens. + + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + src/app/components/token/components/token-stake/token-stake.component.html + 52,54 + + - Votre capital est placé dans votre portefeuille, mais vous ne pourrez pas toucher à votre argent tant que la phase de staking ne sera pas achevée. + + + - You will get staked points based on your input. + + src/app/components/token/components/token-stake/token-stake.component.html + 56,57 + + - Des points destinés à être stakés vous seront accordés en fonction de la contribution que vous aurez apportée. + + + See Staking reward page for more info + + src/app/components/token/components/token-stake/token-stake.component.html + 62 + + Pour plus d'informations, veuillez consulter la page Récompenses de Staking + + + here. + + src/app/components/token/components/token-stake/token-stake.component.html + 63 + + ici. + + + How it works + + src/app/components/token/components/token-stake/token-stake.component.html + 71 + + Comment fonctionne-t-il + + + How much you want to stake? + + src/app/components/token/components/token-stake/token-stake.component.html + 87,88 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 21,22 + + Indiquez le montant que vous souhaitez staker. + + + Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 192 + + Calculatrice de Récompenses + + + Staking Value + + src/app/components/token/components/token-stake/token-stake.component.html + 210,219 + + Rendements en Staking + + + Staked amount * Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 216 + + + src/app/pages/member/pages/activity/activity.page.html + 36 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 107 + + Montant staké* Calculatrice de Récompenses + + + You will earn + + src/app/components/token/components/token-stake/token-stake.component.html + 230 + + Vous gagnez + + + Stake complete. Congratulations. + + src/app/components/token/components/token-stake/token-stake.component.html + 366 + + Félicitations ! Le processus de staking a été achevé. + + + Token stake submitted. + + src/app/components/token/components/token-stake/token-stake.component.ts + 410 + + La demande de staking de tokens a été soumise. + + + Trade details + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 3 + + Particularité du Trade + + + Traded amount + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 29,30 + + Volume négocié + + + Price per token + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 48,49 + + + src/app/pages/token/pages/new/summary/summary.component.html + 69,70 + + Prix par token + + + Date and Time + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 79,80 + + Horodatage + + + Fullfilled + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 94,95 + + Réalisé + + + Date + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 109 + + + src/app/pages/member/pages/transactions/transactions.page.html + 22 + + + src/app/pages/nft/pages/nft/nft.page.html + 383 + + + src/app/pages/nft/pages/nft/nft.page.html + 433 + + + src/app/pages/proposal/pages/votes/votes.page.html + 15 + + + src/app/pages/token/pages/trade/trade.page.html + 198 + + + src/app/pages/token/pages/trade/trade.page.html + 272 + + + src/app/pages/token/pages/trade/trade.page.html + 360 + + Horodatage + + + State + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 111 + + État + + + Storage deposit fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 144 + + Frais de dépôt et de stockage + + + Fullfilment + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 171 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 252 + + Exécution + + + Seller + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 176 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 247 + + Vendeur + + + Transaction + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 204 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 280 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 314 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 358 + + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 41 + + + src/app/pages/member/pages/transactions/transactions.page.html + 74 + + Opération de paiement + + + Non Transferable + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 153 + + + src/app/pages/member/pages/transactions/transactions.page.html + 77 + + Non Transférable + + + Processing... + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 155 + + + src/app/pages/member/pages/transactions/transactions.page.html + 87 + + Traitement d'images... + + + Soonaverse Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 170 + + Les Frais de Transaction sur Soonaverse + + + Exchange Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 172 + + Frais de Changes + + + 24h change/Price + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 46 + + Échange 24h/Prix + + + Markets + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 6 + + + src/app/pages/token/pages/trade/trade.page.html + 1242 + + Marchés + + + No Tokens + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 38,39 + + + src/app/pages/tokens/pages/favourites/favourites.page.html + 25,26 + + Il N'existe Pas de Tokens + + + Cast Vote + + src/app/components/token/components/token-vote/token-vote.component.html + 3 + + Participer au Vote + + + Question + + src/app/components/token/components/token-vote/token-vote.component.html + 16,17 + + Question + + + Selected option + + src/app/components/token/components/token-vote/token-vote.component.html + 23,24 + + Choix retenu + + + How do you set your votes? + + src/app/components/token/components/token-vote/token-vote.component.html + 33,34 + + Comment avez vous votez? + + + Total native tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 88,89 + + Montant total de tokens natifs + + + Total staked tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 105,106 + + Nombre total de tokens stakés + + + Voting is active on + + src/app/components/token/components/token-vote/token-vote.component.html + 119,120 + + Le système de vote sera opérationnel le + + + Your total voting weight + + src/app/components/token/components/token-vote/token-vote.component.html + 131,132 + + Votre poids du vote dans son intégralité + + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + src/app/components/token/components/token-vote/token-vote.component.html + 151,153 + + Veuillez noter que les tokens stakés ne pourront être utilisés que pour participer qu'une seule fois au vote. Un poids de vote deux fois moins important pourra être accordé à votre participation si des tokens stakés auront déjà été utilisés sur une autre offre. + + + Cast Votes + + src/app/components/token/components/token-vote/token-vote.component.html + 193 + + Participer aux Votes + + + Send Native Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 124 + + Envoyez des Tokens Natifs + + + Use Staked Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 128 + + Utilisez des Tokens Stakés + + + Vote received. + + src/app/components/token/components/token-vote/token-vote.component.ts + 191 + + Confirmation de Réception du Vote. + + + Transaction confirmed and funds refunded. + + src/app/components/token/components/token-vote/token-vote.component.ts + 217 + + Confirmation de la transaction et versements d'indemnités effectués. + + + Token vote executed. + + src/app/components/token/components/token-vote/token-vote.component.ts + 375 + + Un vote associé au token a été effectué. + + + Token vote order created. + + src/app/components/token/components/token-vote/token-vote.component.ts + 392 + + Ordre de vote du jeton créé. + + + Type + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 13,14 + + Niveau + + + Date + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 22,23 + + Horodatage + + + Manage addresses + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 3 + + Gestion des adresses + + + Not yet verified + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 59 + + La vérification n'a pas encore été effectuée + + + Change + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 66 + + Renouveler + + + Verify + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 67 + + Vérifier + + + You will be asked to send funds to the new + + src/app/components/wallet-address/verify-address/verify-address.component.html + 33 + + Vous serez invité à envoyer des fonds à la nouvelle + + + address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/verify-address/verify-address.component.html + 36,37 + + adresse pour le processus de vérification. L'adresse de retrait sera reliée à votre + + + space + + src/app/components/wallet-address/verify-address/verify-address.component.html + 41 + + espace + + + profile + + src/app/components/wallet-address/verify-address/verify-address.component.html + 43 + + profil + + + for future transactions. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 44 + + pour les prochaines opérations de paiement. + + + Generate new address + + src/app/components/wallet-address/verify-address/verify-address.component.html + 55,56 + + Créer une nouvelle adresse + + + Send a small + + src/app/components/wallet-address/verify-address/verify-address.component.html + 66 + + Envoyer un petit + + + amount to validate your address. This expires in + + src/app/components/wallet-address/verify-address/verify-address.component.html + 67 + + montant pour la vérification de l'existence de votre adresse. Sa durée de validité expire dans + + + Expired. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 70 + + Expiré. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/verify-address/verify-address.component.html + 106,107 + + Veuillez patienter jusqu'à ce que le paiement soit validé. Dès que le traitement de votre transaction sera complété, vous recevrez par retour une notification de validation de votre transaction + + + Validating address... + + src/app/components/wallet-address/verify-address/verify-address.component.html + 136 + + Vérification de l'adresse... + + + Now you can deal with NFTs and participate in token trading. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 174 + + Vous pouvez désormais traiter des NFT et participer au trading de tokens. + + + Your new address has been verified! + + src/app/components/wallet-address/verify-address/verify-address.component.html + 176 + + Le processus de vérification de votre nouvelle adresse est achevé ! + + + Finish Verification + + src/app/components/wallet-address/verify-address/verify-address.component.html + 181,182 + + Achever le Processus de Vérification + + + Generate address + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 76 + + Créer une adresse + + + Refunding your payment... + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 192 + + Remboursement de paiement... + + + Address is not verified + + src/app/components/wallet-address/wallet-address.component.html + 4 + + Vérification d'adresse non effectuée + + + wallet + + src/app/components/wallet-address/wallet-address.component.html + 25 + + portefeuille numérique + + + Copy address + + src/app/components/wallet-address/wallet-address.component.html + 30 + + Charger l'adresse + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + Vérifiez votre + + + address + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + adresse + + + This network is currently not enabled. + + src/app/components/wallet-address/wallet-address.component.ts + 82 + + Actuellement, le réseau n'est pas opérationnel. + + + Award Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Prime : Infos + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 20 + + Propriétaire + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 18 + + Badges utilisés/disponibles + + + Badge lock period + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 20 + + Durée de verrouillage du badge + + + Award info + + src/app/pages/award/pages/award/award.page.html + 3 + + + src/app/pages/award/pages/new/new.page.html + 17 + + Prime : Infos + + + Minted on: + + src/app/pages/award/pages/award/award.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 47 + + La collection a été mint le + + + Fund Award + + src/app/pages/award/pages/award/award.page.html + 121,122 + + Financement de la Prime + + + Minting in Progress + + src/app/pages/award/pages/award/award.page.html + 129,130 + + Processus de Minting en Cours + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 136 + + + src/app/pages/award/pages/award/award.page.html + 210 + + Vérifier la prime + + + Reject Award + + src/app/pages/award/pages/award/award.page.html + 157 + + Rejeter la Prime + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 166 + + Confirmez votre participation + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 174,176 + + L'axe de gestion des relations se déplacera maintenant vers l'extérieur de la plateforme. Veuillez communiquer avec le créateur de la prime afin qu'il sache comment vous contacter. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 180 + + Veuillez joindre une description ou fournir un lien vers votre activité de travail. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 188 + + Avancer sa prime + + + Cancel + + src/app/pages/award/pages/award/award.page.html + 189 + + + src/app/pages/token/pages/trade/trade.page.html + 245 + + + src/app/pages/token/pages/trade/trade.page.html + 333 + + Révoquer + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 41 + + + src/app/pages/token/pages/new/new.page.ts + 34 + + + src/app/pages/token/pages/token/token.page.ts + 36 + + Vue d'ensemble + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 105 + + Participants + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2 + + Nouvelle Prime + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14 + + + src/app/pages/award/pages/new/new.page.html + 77 + + + src/app/pages/proposal/pages/new/new.page.html + 24 + + Une dénomination est exigée. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19 + + Des spécifications techniques seront incluses dans la Prime. La date de clôture définira la durée d'obtention de la Prime. + + + Title + + src/app/pages/award/pages/new/new.page.html + 23 + + + src/app/pages/award/pages/new/new.page.html + 29,28 + + + src/app/pages/award/pages/new/new.page.html + 76 + + + src/app/pages/award/pages/new/new.page.html + 83,82 + + + src/app/pages/proposal/pages/new/new.page.html + 23 + + + src/app/pages/proposal/pages/new/new.page.html + 29,28 + + + src/app/pages/proposal/pages/new/new.page.html + 103 + + + src/app/pages/proposal/pages/new/new.page.html + 109,108 + + + src/app/pages/proposal/pages/new/new.page.html + 156 + + + src/app/pages/proposal/pages/new/new.page.html + 162,161 + + + src/app/pages/space/pages/upsert/upsert.page.html + 24 + + + src/app/pages/space/pages/upsert/upsert.page.html + 30,29 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 106 + + + src/app/pages/token/pages/new/overview/overview.component.html + 22 + + + src/app/pages/token/pages/new/overview/overview.component.html + 29,28 + + + src/app/pages/token/pages/new/overview/overview.component.html + 65 + + + src/app/pages/token/pages/new/overview/overview.component.html + 72,71 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 9 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 16,15 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 55 + + Dénomination + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 24 + + Saisie du nom requise. + + + End + + src/app/pages/award/pages/new/new.page.html + 36 + + + src/app/pages/award/pages/new/new.page.html + 47,46 + + + src/app/pages/proposal/pages/new/new.page.html + 56 + + + src/app/pages/proposal/pages/new/new.page.html + 68,67 + + Clôture + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 37 + + + src/app/pages/proposal/pages/new/new.page.html + 57 + + La Date de Clôture est exigée. + + + Description + + src/app/pages/award/pages/new/new.page.html + 52 + + + src/app/pages/award/pages/new/new.page.html + 58 + + + src/app/pages/award/pages/new/new.page.html + 91 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 40 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 45 + + + src/app/pages/nft/pages/new/single/single.page.html + 33 + + + src/app/pages/nft/pages/new/single/single.page.html + 38 + + + src/app/pages/proposal/pages/new/new.page.html + 76 + + + src/app/pages/proposal/pages/new/new.page.html + 82 + + + src/app/pages/proposal/pages/new/new.page.html + 119 + + + src/app/pages/proposal/pages/new/new.page.html + 124 + + + src/app/pages/proposal/pages/new/new.page.html + 171 + + + src/app/pages/proposal/pages/new/new.page.html + 176 + + + src/app/pages/space/pages/upsert/upsert.page.html + 36 + + + src/app/pages/space/pages/upsert/upsert.page.html + 41 + + + src/app/pages/token/pages/new/overview/overview.component.html + 37 + + + src/app/pages/token/pages/new/overview/overview.component.html + 43 + + + src/app/pages/token/pages/new/overview/overview.component.html + 80 + + + src/app/pages/token/pages/new/overview/overview.component.html + 86 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 21 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 67 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 21 + + Désignation du Token + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 69 + + Spécification du badge + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 71 + + La dénomination et la description seront incluses dans le badge. + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 97 + + Désignation du badge + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 115 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 369 + + + src/app/pages/proposal/pages/new/new.page.html + 205 + + Espace : Infos + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 117 + + Dans cet espace, vous trouverez la liste des primes. + + + Reward info + + src/app/pages/award/pages/new/new.page.html + 170 + + Récompense : Infos + + + You need to fund this award with native token. Select which token will be used as reward. + + src/app/pages/award/pages/new/new.page.html + 172 + + Il est indispensable de financer la prime via l'utilisation d'un token natif. Veuillez choisir le token qui sera utilisé pour vous récompenser. + + + Token is required. + + src/app/pages/award/pages/new/new.page.html + 176 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 247 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + Il est nécessaire d'utiliser des tokens. + + + Select a token + + src/app/pages/award/pages/new/new.page.html + 207 + + Sélectionnez un token + + + Defines the amount of tokens for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 222,223 + + Cela fournit des éclaircissements sur la quantité de tokens pour chaque badge et le nombre de badges disponibles. + + + Invalid token amount per badge + + src/app/pages/award/pages/new/new.page.html + 226 + + Montant de tokens par badge non autorisé + + + Tokens per badge + + src/app/pages/award/pages/new/new.page.html + 234 + + Tokens par badge + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 251 + + + src/app/pages/award/pages/new/new.page.html + 338 + + Nombre minimum : 1. Nombre maximum : 10000. + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 273 + + Le nombre de badges que vous voulez rendre disponible pour cette prime, c'est-à-dire des primes dont la distribution de la quantité souhaitée reste à déterminer. + + + Total to be funded + + src/app/pages/award/pages/new/new.page.html + 284,285 + + Montant total destiné à être financé + + + Upload image that will be used as a Reward Badge. + + src/app/pages/award/pages/new/new.page.html + 299 + + Chargez l'image qui sera utilisée en tant que Badge de Récompense. + + + Badge is required. + + src/app/pages/award/pages/new/new.page.html + 328,329 + + Il est nécessaire d'utiliser des badges. + + + Set the duration for which the badge will be locked in the Firefly wallet. + + src/app/pages/award/pages/new/new.page.html + 334,335 + + Fixez une période durant laquelle le badge sera verrouillé dans le portefeuille Firefly. + + + Create award + + src/app/pages/award/pages/new/new.page.html + 369,370 + + Créer une prime + + + Award - New + + src/app/pages/award/pages/new/new.page.ts + 119 + + + src/app/pages/award/pages/new/new.page.ts + 134 + + Prime - Nouveautés + + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/award/pages/new/new.page.ts + 120 + + + src/app/pages/award/pages/new/new.page.ts + 135 + + Prenez l'initiative d'élargir vos engagements et faites monter en puissance vos DAO et toutes les communautés numériques. Mise en place de systèmes de prime et de vote sans frais d'inscription, en UN clic. Adhérez dès aujourd'hui. + + + Member seems to log out during the file upload request. + + src/app/pages/award/pages/new/new.page.ts + 184 + + + src/app/pages/collection/pages/upsert/upsert.page.ts + 403 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 240 + + + src/app/pages/nft/pages/new/single/single.page.ts + 180 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 131 + + + src/app/pages/token/services/new.service.ts + 202 + + Impossible de télécharger le fichier, un problème de déconnexion à l'espace membre est survenu. + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2 + + Description de la Prime + + + Award - + + src/app/pages/award/pages/overview/overview.page.ts + 17 + + + src/app/pages/award/pages/participants/participants.page.ts + 83 + + Prime - + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 49 + + + src/app/pages/award/pages/participants/participants.page.html + 63 + + + src/app/pages/proposal/pages/participants/participants.page.html + 49 + + + src/app/pages/proposal/pages/participants/participants.page.html + 63 + + Rechercher un Participant + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 72 + + + src/app/pages/proposal/pages/participants/participants.page.html + 72 + + + src/app/pages/space/pages/members/members.page.html + 92 + + Visualiser seulement quelques-uns parmi les meilleurs enregistrements... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 90,91 + + + src/app/pages/proposal/pages/participants/participants.page.html + 90,91 + + Il N'y a Pas de Participants + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 118,119 + + Récompense + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 138,139 + + Nouvelle récompense + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 50 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 158 + + + src/app/pages/space/pages/awards/awards.page.ts + 30 + + + src/app/pages/space/pages/collections/collections.page.ts + 30 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 30 + + Pendantes + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 51 + + Émise + + + See all participants within the award. + + src/app/pages/award/pages/participants/participants.page.ts + 84 + + + src/app/pages/proposal/pages/overview/overview.page.ts + 60 + + Voir tous les participants à la prime. + + + applied on + + src/app/pages/award/pages/participants/participants.page.ts + 257 + + votre demande de participation a été soumise le + + + Make NFT’s from this collection available on decentralised network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 12,13 + + Rendre disponibles les pièces de la collection de NFT en question sur le réseau décentralisé. + + + Minting + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 29 + + Minting + + + NFTs left + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 32 + + Pièces NFT subsistantes + + + Collection is not yet migrated to the decentralized network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 47,48 + + La collection n'a pas encore été transférée vers le réseau décentralisé. + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 611 + + Qui peut faire appel aux achats ? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 63,64 + + Vente ouverte + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 76,77 + + Membres de l'Espace Uniquement + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89,90 + + Gardiens de l'Espace Uniquement + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 102,103 + + Membres de l'Espace détenant un Badge Uniquement + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 118,119 + + Il faut détenir au moins un NFT de chaque Collection sélectionnée + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 126,127 + + (Un NFT par membre) + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 175 + + AirDrop et Remises aux membres + + + discount for members with rewards from this space in total value of + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 190 + + de réduction réservée aux membres ayant gagné des récompenses depuis cet espace pour un montant total correspondant à la valeur de + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 5 + + À propos de la collection + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 22,23 + + Limite de Création + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 81,82 + + + src/app/pages/collection/pages/collection/collection.page.html + 301,302 + + Exposition de la Collection + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 93,94 + + + src/app/pages/collection/pages/collection/collection.page.html + 313,314 + + Éditer la Collection + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Les redevances seront versées à + + + Rank + + src/app/pages/collection/pages/collection/collection.page.html + 170,171 + + + src/app/pages/token/pages/token/token.page.html + 73,74 + + Rank + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 189 + + La vente débutera à + + + Deposited + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + Déposée + + + Staked + + src/app/pages/collection/pages/collection/collection.page.html + 218 + + Stakée + + + Links + + src/app/pages/collection/pages/collection/collection.page.html + 227 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 154,153 + + + src/app/pages/token/pages/new/overview/overview.component.html + 160,159 + + + src/app/pages/token/pages/new/summary/summary.component.html + 307,306 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 79 + + Liens + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 330 + + + src/app/pages/collection/pages/collection/collection.page.html + 376 + + Rejeter la Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 346 + + + src/app/pages/collection/pages/collection/collection.page.html + 392 + + Supprimer la Collection + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 413 + + + src/app/pages/nft/pages/new/new.page.html + 2 + + Créer un NFT + + + Rank amount must be between + + src/app/pages/collection/pages/collection/collection.page.ts + 285 + + + src/app/pages/token/pages/token/token.page.ts + 195 + + La valeur du classement mondial doit être comprise entre + + + records + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 13 + + + src/app/pages/discover/pages/awards/awards.page.html + 13 + + + src/app/pages/discover/pages/members/members.page.html + 13 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 13 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 13 + + + src/app/pages/market/pages/collections/collections.page.html + 13 + + + src/app/pages/member/pages/nfts/nfts.page.html + 13 + + enregistrements + + + Filters&Sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 30 + + + src/app/pages/discover/pages/awards/awards.page.html + 30 + + + src/app/pages/discover/pages/members/members.page.html + 30 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 30 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 30 + + + src/app/pages/market/pages/collections/collections.page.html + 30 + + Filtres&Tri + + + Filters&sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 71 + + + src/app/pages/discover/pages/awards/awards.page.html + 78 + + + src/app/pages/discover/pages/members/members.page.html + 78 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 78 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 79 + + + src/app/pages/market/pages/collections/collections.page.html + 79 + + Filtres&tri + + + Sort by + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 93,92 + + + src/app/pages/discover/pages/awards/awards.page.html + 94,93 + + + src/app/pages/discover/pages/members/members.page.html + 94,93 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 94,93 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 95,94 + + + src/app/pages/market/pages/collections/collections.page.html + 95,94 + + Obtenir l'Affichage par + + + Price range + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 131 + + Fourchette de prix + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2 + + Créer une nouvelle collection + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3 + + Éditer la collection + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18 + + Collection : Infos + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20 + + La dénomination et la description seront incluses dans la Collection. + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 58 + + + src/app/pages/nft/pages/new/single/single.page.html + 51 + + Ventes : Info + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 60 + + Les décalages horaires seront reportés sur la même zone horaire de l'utilisateur. En ce qui concerne les NFT et les SFT ayant été générés, le prix fixé dans cette zone ne pourra plus être modifié sur le NFT. Le prix à caractère purement indicatif de la collection classique de NFT, pourra être modifié sur le NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 90 + + Redevance + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 93,95 + + Le pourcentage de la redevance en question sera appliqué sur la première création de NFT et sur toutes les ventes secondaires. L'adresse IOTA bénéficiant des redevances, sera toujours subordonnée au solde disponible représentant au minimum 1 Mi (en raison du mécanisme de protection contre la poussière du protocole IOTA). + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 106 + + Frais de redevances exprimés en Pourcentage + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 116 + + Exemple : 10 %, 20 %, etc. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 124 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 131 + + Les redevances seront reversées dans un espace différent + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 155 + + Au niveau du détail, des liens seront inclus sur le NFT. Pour Twitter ou Discord, veuillez utiliser les noms d'usagers (name#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 160 + + L'URL fournie n'est pas autorisée. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 167,166 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 312,311 + + + src/app/pages/token/pages/new/overview/overview.component.html + 175,174 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 91,90 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 183 + + Lien vers votre compte Twitter + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + Le nom d'utilisateur fourni sur Discord n'est pas autorisé. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 200 + + Lien vers votre compte Discord + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 215 + + AirDrop et Remises + + + The discount applies only to members who have earned tokens from awards issued by this space. + + src/app/pages/collection/pages/upsert/upsert.page.html + 217 + + La réduction ne s'applique qu'aux membres ayant gagné des tokens de récompense émis dans cet espace. + + + Token amount higher than + + src/app/pages/collection/pages/upsert/upsert.page.html + 231 + + Montant de jeton supérieur à + + + Type awarded token... + + src/app/pages/collection/pages/upsert/upsert.page.html + 257 + + Saisir le token que vous avez reçu en récompenses... + + + Discount % + + src/app/pages/collection/pages/upsert/upsert.page.html + 271 + + Remise % + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 299 + + Remise + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 310 + + XP de Remise + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 330,331 + + Montant de Remise + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 356 + + Ajouter le niveau de remise + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 371 + + Il constitue un espace à l'intérieur duquel la collection de NFT sera créée. Seuls les espaces dont les portefeuilles auront été vérifiés, apparaîtront dans la liste déroulante. Assurez-vous de choisir le bon espace, car c'est bien dans cet espace qu'aura lieu la vérification du portefeuille vers lequel tous les fonds de la vente de NFT seront transférés. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 389 + + Type de Collection + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 391 + + Chaque collection présente des spécificités propres, ce qui la différencie des autres. Dès sa création, il ne sera plus possible d'apporter des modifications à la collection. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 423,422 + + + src/app/pages/space/pages/upsert/upsert.page.html + 200 + + Bannière + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + Une bannière est exigée. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 463 + + Espace réservé + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 493,494 + + Un espace réservé est requis. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 503 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 516 + + + src/app/pages/market/pages/collections/collections.page.html + 177 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138 + + Catégorie + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 505 + + La catégorie est utilisée lors du filtrage du contenu. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 509 + + Catégorie. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 534 + + Configuration de la collection + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 536 + + Qui a accès à une collection donnée. + + + Open Sale + + src/app/pages/collection/pages/upsert/upsert.page.html + 545 + + Vente Ouverte + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 551 + + Tout le monde a accès à cette collection. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 563 + + Seuls les Gardiens de l'espace peuvent y accéder. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 576 + + Seuls les Membres de l'Espace y ont accès. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 589 + + Seuls les Membres de l'Espace détenant un Badge y ont accès. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 607 + + Options de collection + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 625 + + Un NFT par Membre Uniquement + + + Select collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 650 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 147 + + + src/app/pages/nft/pages/new/single/single.page.html + 361 + + Sélectionner une collection + + + Select award + + src/app/pages/collection/pages/upsert/upsert.page.html + 669 + + Sélectionnez votre prime + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 691,692 + + Créer une collection + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 704,705 + + Sauvegarde Collection + + + Check out collection + + src/app/pages/collection/services/helper.service.ts + 68 + + Jetez un coup d'œil à la collection + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 5 + + Demandes Membre Pendantes + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 16 + + Vos espaces + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 32,33 + + Il N'existe Pas encore d'Espaces + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 41,42 + + Découvrez Espaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 56 + + Primes opérationnelles + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 68 + + Offres opérationnelles + + + Spaces + + src/app/pages/discover/pages/awards/awards.page.html + 115,114 + + + src/app/pages/discover/pages/discover/discover.page.ts + 9 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 115,114 + + + src/app/pages/market/pages/collections/collections.page.html + 146,145 + + + src/app/pages/member/pages/member/member.page.ts + 65 + + Espaces + + + Discover - Awards + + src/app/pages/discover/pages/awards/awards.page.ts + 58 + + Découvrez - Primes + + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/discover/pages/awards/awards.page.ts + 59 + + Examinez les meilleurs moyens de vous rapprocher de la DAO, en élargissant vos engagements par la montée en puissance de ses membres. Mise en place de systèmes de prime et de vote sans frais d'inscription, en UN clic. Adhérez dès aujourd'hui. + + + Awards + + src/app/pages/discover/pages/discover/discover.page.ts + 10 + + + src/app/pages/member/pages/member/member.page.ts + 64 + + + src/app/pages/space/pages/space/space.page.ts + 47 + + Primes + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 11 + + + src/app/pages/space/pages/space/space.page.ts + 46 + + Offres + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 12 + + + src/app/pages/space/pages/space/space.page.ts + 48 + + Membres + + + Discover - Members + + src/app/pages/discover/pages/members/members.page.ts + 51 + + Découvrez - Membres + + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + src/app/pages/discover/pages/members/members.page.ts + 52 + + Faites partie d'une communauté, qui occupe une position de premier plan en matière d'entrepreneuriat et qui est porteuse d'innovation majeure parmi toutes les communautés, dans le domaine des crypto-actifs. Pour se joindre de façon instantanée, veuillez utiliser votre MetaMask. + + + Discover - Proposals + + src/app/pages/discover/pages/proposals/proposals.page.ts + 57 + + Découvrez - Offres + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + src/app/pages/discover/pages/proposals/proposals.page.ts + 58 + + Apportez votre soutien aux communautés en participant aux créations et aux votes sur les offres, afin qu'on puisse donner forme à l'avenir des DAO et du métavers. Mise en place en UN seul clic. Adhérez dès aujourd'hui. + + + Discover - Spaces + + src/app/pages/discover/pages/spaces/spaces.page.ts + 54 + + Découvrez - Espaces + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/discover/pages/spaces/spaces.page.ts + 55 + + Inscrivez-vous pour une mise en place immédiate du système des DAO sur Demande, en quelques minutes. Outils de vote blockchain gratuits. Découvrez les communautés DAO les plus surprenantes sur la plateforme Soonaverse. + + + Sale type + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Type de vente + + + Collections - NFT + + src/app/pages/market/pages/collections/collections.page.ts + 68 + + Collections - NFT + + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + src/app/pages/market/pages/collections/collections.page.ts + 69 + + Une marketplace de Jetons Non Fongibles (NFT), d'objets de collection numériques, de l'art numérique, des droits de propriété, et d'autres encore, entièrement gratuite. + + + NFT Collections + + src/app/pages/market/pages/market/market.page.html + 2 + + Collections de NFT + + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/market/pages/market/market.page.html + 11,13 + + Plusieurs collections pourraient ne pas encore avoir été transférées vers le réseau décentralisé. Soyez au fait de ce que vous êtes en train d'acheter. + + + I understand + + src/app/pages/market/pages/market/market.page.html + 22,23 + + + src/app/pages/member/pages/tokens/tokens.page.html + 43,44 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 22,23 + + Compris + + + Collections + + src/app/pages/market/pages/market/market.page.ts + 12 + + + src/app/pages/market/pages/market/market.page.ts + 33 + + + src/app/pages/space/pages/space/space.page.ts + 45 + + Pièces de collections + + + Total staked + + src/app/pages/member/pages/activity/activity.page.html + 17,18 + + Montant total staké + + + Staking Value: + + src/app/pages/member/pages/activity/activity.page.html + 29,39 + + Staking Value: + + + Claimable Reward + + src/app/pages/member/pages/activity/activity.page.html + 47,48 + + Récompenses à réclamer + + + Stake more + + src/app/pages/member/pages/activity/activity.page.html + 104,105 + + Stakez plus + + + Stake + + src/app/pages/member/pages/activity/activity.page.html + 107,108 + + Staker + + + My Staking + + src/app/pages/member/pages/activity/activity.page.html + 133 + + Mon Staking + + + until + + src/app/pages/member/pages/activity/activity.page.html + 138 + + jusqu'au + + + My Favourites + + src/app/pages/member/pages/activity/activity.page.html + 152 + + Mes Favoris + + + View All + + src/app/pages/member/pages/activity/activity.page.html + 155 + + Tout Afficher + + + Profile Options + + src/app/pages/member/pages/activity/activity.page.html + 172 + + Options de profil + + + Edit Profile + + src/app/pages/member/pages/activity/activity.page.html + 185 + + Modifier le profil + + + Manage Addresses + + src/app/pages/member/pages/activity/activity.page.html + 191 + + + src/app/pages/space/pages/manage/manage.page.html + 27 + + Gérer les adresses + + + Export All Transactions + + src/app/pages/member/pages/activity/activity.page.html + 202 + + Exporter toutes les transactions + + + Request Verification + + src/app/pages/member/pages/activity/activity.page.html + 227 + + + src/app/pages/space/pages/manage/manage.page.html + 85 + + Demander une vérification + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + Pendantes + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 18,19 + + Émises + + + No Awards + + src/app/pages/member/pages/awards/awards.page.html + 34,35 + + + src/app/pages/space/pages/awards/awards.page.html + 63,64 + + Il N'existe Pas de Primes + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 44,45 + + Découvrir des Primes + + + Reputation + + src/app/pages/member/pages/badges/badges.page.html + 2 + + + src/app/pages/member/pages/member/member.page.ts + 63 + + Réputation + + + Spaces + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Espaces + + + Awards + + src/app/pages/member/pages/badges/badges.page.html + 27,28 + + Primes + + + Total Rewards + + src/app/pages/member/pages/badges/badges.page.html + 33,34 + + Récompenses totale + + + My profile + + src/app/pages/member/pages/member/member.page.html + 13 + + Mon profil + + + Profile + + src/app/pages/member/pages/member/member.page.html + 15 + + Profil + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 27,28 + + Mes informations + + + Joined + + src/app/pages/member/pages/member/member.page.html + 49 + + Il a rejoint + + + Member - + + src/app/pages/member/pages/member/member.page.ts + 83 + + Membre - + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 145 + + Activité + + + Transactions + + src/app/pages/member/pages/member/member.page.ts + 147 + + + src/app/pages/member/pages/transactions/transactions.page.html + 18 + + Opérations de paiement + + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + src/app/pages/member/pages/nfts/nfts.page.html + 25,26 + + Procédez à l'importation du NFT d'un autre réseau vers la plateforme Soonaverse en débloquant toutes ses options de trading. + + + Deposit NFT + + src/app/pages/member/pages/nfts/nfts.page.html + 29,30 + + Dépôt de NFT + + + No NFTs + + src/app/pages/member/pages/nfts/nfts.page.html + 59,60 + + + src/app/pages/nft/pages/nft/nft.page.html + 744,745 + + Il N'existe Pas de NFT + + + Tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 11,12 + + Tokens + + + Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 20,21 + + Staking + + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + src/app/pages/member/pages/tokens/tokens.page.html + 32,34 + + Les tokens pouvant être réclamés ou n'ayant pas encore été créés, pourront être recherchés uniquement ici. Le reveal de tokens créés aura lieu toujours dans des portefeuilles conjoints tels que Firefly ou TanglePay. + + + Item + + src/app/pages/member/pages/tokens/tokens.page.html + 57 + + + src/app/pages/member/pages/tokens/tokens.page.html + 324 + + + src/app/pages/member/pages/transactions/transactions.page.html + 23 + + Élément + + + Total + + src/app/pages/member/pages/tokens/tokens.page.html + 59 + + + src/app/pages/token/pages/trade/trade.page.html + 204 + + + src/app/pages/token/pages/trade/trade.page.html + 278 + + + src/app/pages/token/pages/trade/trade.page.html + 367 + + + src/app/pages/token/pages/trade/trade.page.html + 668 + + Solde total + + + Owned + + src/app/pages/member/pages/tokens/tokens.page.html + 87 + + + src/app/pages/member/pages/tokens/tokens.page.html + 170 + + + src/app/pages/nft/pages/nft/nft.page.html + 17 + + Droits de Propriété + + + Airdropped + + src/app/pages/member/pages/tokens/tokens.page.html + 118 + + + src/app/pages/member/pages/tokens/tokens.page.html + 172 + + Distribué via un Airdrop + + + from + + src/app/pages/member/pages/tokens/tokens.page.html + 120 + + depuis + + + Deposit for purchase + + src/app/pages/member/pages/tokens/tokens.page.html + 215 + + Ajout de fonds + + + No tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 258,259 + + Il N'existe Pas de tokens + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 297 + + Staking actif + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 300 + + Staking expiré + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 307,308 + + Staking actif + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 310,311 + + Staking expiré + + + Staked From + + src/app/pages/member/pages/tokens/tokens.page.html + 326 + + Staké Depuis + + + Staked Until + + src/app/pages/member/pages/tokens/tokens.page.html + 327 + + Staké Jusqu'au + + + Multiplier + + src/app/pages/member/pages/tokens/tokens.page.html + 329 + + Multiplicateur + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 330 + + Valeur Stakée + + + Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 380 + + Staké + + + No Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 403,404 + + Non staké + + + Staked from - to + + src/app/pages/member/pages/tokens/tokens.page.html + 432,433 + + Staké de - à + + + Amount (Multiplier) + + src/app/pages/member/pages/tokens/tokens.page.html + 445,446 + + Montant (multiplicateur) + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 457,458 + + Valeur Stakée + + + Claim + + src/app/pages/member/pages/tokens/tokens.page.ts + 57 + + Réclamer + + + Refund + + src/app/pages/member/pages/tokens/tokens.page.ts + 58 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 19 + + Remboursement + + + Export CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 9 + + Exporter sous CSV + + + Exporting CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 13 + + Export sous CSV + + + No transactions + + src/app/pages/member/pages/transactions/transactions.page.html + 120,121 + + Il N'existe Pas de transactions + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 40 + + Le téléchargement de certains fichiers n'a pas été effectué + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 51,52 + + Veuillez utiliser des chaînes de caractères composées uniquement des caractères suivants : a-z, A-Z, _, -, 0-9. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + CSV Téléchargé + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 67 + + Plusieurs NFT sont faux ! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 73 + + Nom de fichier + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 101 + + Erreur + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 160 + + Télécharger le CSV existant + + + Upload back once you generate below + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 162 + + Après avoir créé votre NFT ci-dessous, chargez-le à nouveau + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 193,194 + + Premièrement, vous devez télécharger les images. + + + Generate CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 211 + + Créer un fichier CSV + + + Publish NFTs + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 212 + + Exposition NFT + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 224,225 + + Utilisez la version web de Soonaverse pour accroître la capacité de création de NFT classiques. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Individuel + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Multiple + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14 + + Infos NFT + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16 + + Le nom et la description seront inclus dans le NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 22 + + Le nom est requis. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 34 + + + src/app/pages/proposal/pages/new/new.page.html + 77 + + La description est requise. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 53 + + Les décalages horaires seront reportés sur la même zone horaire de l'utilisateur. En ce qui concerne les NFT et les SFT ayant été générés, il y aura un prix à fixer pour chaque collection, qui ne pourra plus être modifié ici. + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 92 + + Des biens sont reproduits au-dessous de votre élément. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 102 + + Nom du bien (p. ex. Character) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 103 + + Valeur (p. ex. Soonaunaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 115 + + + src/app/pages/nft/pages/new/single/single.page.html + 151 + + + src/app/pages/nft/pages/new/single/single.page.html + 158 + + Nom du Bien + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 126,125 + + + src/app/pages/nft/pages/new/single/single.page.html + 163 + + + src/app/pages/nft/pages/new/single/single.page.html + 171,170 + + + src/app/pages/nft/pages/new/single/single.page.html + 228,227 + + + src/app/pages/nft/pages/new/single/single.page.html + 266 + + + src/app/pages/nft/pages/new/single/single.page.html + 272,271 + + Valeur + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 142 + + Bien + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 185 + + Ajouter un bien + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 194 + + Des statistiques sont reproduites au-dessous de votre élément. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Nom de l'Institut des Statistiques (p. ex. Stamina) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 205 + + Valeur (p. ex. 10, 1/10, etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 217 + + + src/app/pages/nft/pages/new/single/single.page.html + 254 + + + src/app/pages/nft/pages/new/single/single.page.html + 261 + + Nom de l'Institut de la Statistique + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 245 + + Statistique + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287 + + Ajouter une donnée statistique + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 303 + + Téléchargez votre image numérique sous forme de NFT. Parmi les formats de fichiers pris en charge figurent : PNG, JPEG, WEBP, MP4. Taille maximale : 100 Mbit. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 333 + + Support requis + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 348 + + Faites votre choix parmi vos collections en sélectionnant celle qui vous permettra d'afficher le NFT en question. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 383,384 + + Créer un NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 393,394 + + Accès en avant-première NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 168 + + Les caractères suivants ne sont pas autorisés dans le nom du fichier + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 7 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 48 + + + src/app/pages/nft/pages/nft/nft.page.html + 516 + + Jetez un coup d'œil sur le nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 109 + + Soumission actuelle la plus élevée + + + remaining + + src/app/pages/nft/pages/nft/nft.page.html + 155 + + nft restants + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 165 + + La vente a été clôturée + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 173 + + La vente n'a pas encore débuté + + + NFT is pending other member's transaction + + src/app/pages/nft/pages/nft/nft.page.html + 181 + + Transaction Membre pendante engendrée par l'utilisation d'un NFT + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 190 + + Collection en attente de validation + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 198 + + La Collection a été repoussée ! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 213 + + Vente de NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 218 + + Modification du Prix Fixe + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 223 + + Changer la Mise aux Enchères + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 240,241 + + Déposez une soumission + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 263,264 + + En vente maintenant + + + Bidding + + src/app/pages/nft/pages/nft/nft.page.html + 281 + + Soumission + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 290 + + Soumissions Actuelles + + + Past bids + + src/app/pages/nft/pages/nft/nft.page.html + 298 + + Dernières soumissions + + + My biddings + + src/app/pages/nft/pages/nft/nft.page.html + 307 + + Mes soumissions + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 321 + + Membre + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 322 + + Soumissionné le + + + There are no current bids + + src/app/pages/nft/pages/nft/nft.page.html + 369,370 + + Il n'existe pas de soumissions actuelles + + + There are no past bids + + src/app/pages/nft/pages/nft/nft.page.html + 419,420 + + Il n'existe pas de soumissions passées + + + There are no records. + + src/app/pages/nft/pages/nft/nft.page.html + 469,470 + + Il n'existe pas d'enregistrements. + + + Withdraw NFT + + src/app/pages/nft/pages/nft/nft.page.html + 509,510 + + Retrait de NFT + + + History + + src/app/pages/nft/pages/nft/nft.page.html + 522 + + Historique + + + Minting in Progress + + src/app/pages/nft/pages/nft/nft.page.html + 556 + + Processus de Minting en Cours + + + Available for specific Member Only + + src/app/pages/nft/pages/nft/nft.page.html + 619 + + Uniquement Disponible pour des Membres déterminés + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 647 + + Visualiser tous les détails de la transaction liée au transfert du NFT en question sur le protocole Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 685 + + À propos de la collection + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 694 + + Visualiser + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 695 + + pièces de collection + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 707,706 + + par + + + Are you sure you want to withdraw NFT from Soonaverse? + + src/app/pages/nft/pages/nft/nft.page.html + 800 + + Si tel est votre choix, veuillez effectuer le retrait de NFT de la plateforme Soonaverse. + + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + src/app/pages/nft/pages/nft/nft.page.html + 802 + + Lorsque le retrait de NFT aura été effectué, il ne sera plus disponible sur la plateforme Soonaverse, votre NFT apparaîtra ainsi uniquement dans votre portefeuille Firefly. Vous aurez toujours la possibilité de procéder ultérieurement à la réimportation du NFT sur Soonaverse. + + + Confirm with Metamask + + src/app/pages/nft/pages/nft/nft.page.html + 804 + + Confirmer par le biais du Metamask + + + View + + src/app/pages/nft/pages/nft/nft.page.ts + 82 + + Visualiser + + + NFT Withdrawn. + + src/app/pages/nft/pages/nft/nft.page.ts + 688 + + NFT Retiré. + + + Oops, it's in another universe + + src/app/pages/nft/pages/not-found/not-found.page.html + 8 + + Nous avons gaffé, nous sommes bien dans un autre univers + + + NFT you are looking for no longer exists on Soonaverse. + + src/app/pages/nft/pages/not-found/not-found.page.html + 12,14 + + Il n'existe plus de NFT similaire à celui que vous recherchez sur la plateforme Soonaverse. + + + Back to Marketplace + + src/app/pages/nft/pages/not-found/not-found.page.html + 22,24 + + Retourner à la Marketplace + + + Auction Starts + + src/app/pages/nft/services/helper.service.ts + 145 + + Ouverture des Ventes aux Enchères + + + Auction Ends + + src/app/pages/nft/services/helper.service.ts + 148 + + Clôture des Ventes aux Enchères + + + Pool by + + src/app/pages/pool/pages/market/pool.page.html + 3,12 + + Pool par + + + What is Pool? + + src/app/pages/pool/pages/market/pool.page.html + 20,21 + + Qu'est-ce qu'un Pool ? + + + Anyone can become a liquidity provider (LP) by depositing an equivalent value of each underlying token in return for pool tokens. These tokens track pro-rata LP shares of the total reserves, and can be redeemed for the underlying assets at any time. + + src/app/pages/pool/pages/market/pool.page.html + 23,26 + + Tout le monde peut devenir fournisseur de liquidité (LP) en déposant des fonds d'une valeur égale à la valeur de chaque token sous-jacent et recevoir des jetons LP en récompense du dépôt de tokens. Le montant de ces-derniers sera calculé en proportion du montant total de liquidités qui aura été fourni au pool, et les tokens pourront également être échangés contre les actifs sous-jacents à tout moment. + + + Coming SOON + + src/app/pages/pool/pages/market/pool.page.html + 35 + + + src/app/pages/swap/pages/market/swap.page.html + 35 + + Bientôt disponible + + + See Pool on iotabee + + src/app/pages/pool/pages/market/pool.page.html + 37,39 + + Voir le Pool sur iotabee + + + What is iotabee? + + src/app/pages/pool/pages/market/pool.page.html + 49 + + + src/app/pages/swap/pages/market/swap.page.html + 49 + + Qu'est-ce que iotabee ? + + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + src/app/pages/pool/pages/market/pool.page.html + 51,54 + + + src/app/pages/swap/pages/market/swap.page.html + 51,54 + + Iotabee est l'union d'un protocole pair-à-pair décentralisé DEX et d'un exchange semi-centralisé cross-chain SWAP. À partir de ce dernier, il est possible à toute personne de créer des liquidités et de trader des tokens sur IOTA, Shimmer, Shimmer EVM et sur d'autres chaînes compatibles EVM telles que le BSC. + + + iotabee.com + + src/app/pages/pool/pages/market/pool.page.html + 61,62 + + + src/app/pages/swap/pages/market/swap.page.html + 61,62 + + iotabee.com + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2 + + Nouvelle Offre + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 3 + + Guide d'Information sur l'offre + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19 + + Des spécifications techniques seront incluses dans le dossier d'appel d'offres. La date limite de réponse à l'appel d'offre se répercutera sur la durée de l'offre. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 39 + + + src/app/pages/proposal/pages/new/new.page.html + 50,49 + + Lancement + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 40 + + La Date d'Ouverture est exigée. + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 93 + + Mon guide de réponses + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 95 + + Des spécifications techniques ne seront affichées que pour l'objet en question. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 104 + + Une Dénomination de l'Objet en Question est exigée. + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 143 + + Des spécifications techniques individuelles en réponse à vos questions. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 157 + + Le texte de la réponse est requis. + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 192 + + Ajoutez à votre Sélection + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 207 + + Dans cet espace, vous trouverez le dossier d'appel d'offres. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 259 + + Mise en Place de l'Offre + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 261 + + Cet outil fournit des éclaircissements sur la méthode de vote à mettre en place et le droit d'accès au dossier d'appel d'offres. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 269 + + Participants Visés + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 276 + + Tous les Gardiens + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 283 + + Seuls les gardiens peuvent voter sur cette offre + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 289 + + Tous les Membres + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 296 + + Tous les membres peuvent voter sur cette offre + + + Space's Native Token + + src/app/pages/proposal/pages/new/new.page.html + 302 + + + src/app/pages/proposal/services/helper.service.ts + 23 + + Jeton natif de l'espace + + + You must have minted token linked to your space first! + + src/app/pages/proposal/pages/new/new.page.html + 313 + + Vous devez d'abord avoir minté un jeton lié à votre espace ! + + + All token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 321 + + Tous les détenteurs de jetons peuvent voter. + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 343,344 + + Créer une Offre + + + Proposal - New + + src/app/pages/proposal/pages/new/new.page.ts + 136 + + + src/app/pages/proposal/pages/new/new.page.ts + 151 + + Nouveautés - Offre + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + src/app/pages/proposal/pages/new/new.page.ts + 137 + + + src/app/pages/proposal/pages/new/new.page.ts + 152 + + Apportez votre soutien aux communautés en participant aux créations et aux votes sur les offres, afin qu'on puisse donner forme à l'avenir des DAO et du métavers. Mise en place instantanée, et en UN seul clic. Adhérez dès aujourd'hui. + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 321 + + Sélection + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 328 + + badge + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 332 + + code d'identification + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 5 + + Derniers Résultats + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 74 + + Description de l'Offre + + + Proposal - + + src/app/pages/proposal/pages/overview/overview.page.ts + 59 + + Proposition - + + + Change Vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 23,24 + + Modifier le Vote + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 26,27 + + Votez dès Maintenant + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 38 + + Ouverture du vote + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 51 + + Vous n'êtes pas partie prenante du vote + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 55 + + Avant la création de l'offre, il est essentiel d'être partie prenante de l'espace, afin de pouvoir procéder au vote . + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 64 + + Se connecter pour procéder au vote + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 68 + + Il est avant tout essentiel de se connecter, afin de pouvoir procéder au vote. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 79 + + Procédure de Validation du Gardien Pendante + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 83 + + L'offre en question n'a encore été validée par aucun Gardien. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 102 + + Poids de la participation + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 48 + + Procédure de Vote Pendante + + + Voted + + src/app/pages/proposal/pages/participants/participants.page.ts + 49 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 156 + + L'Offre a été Soumise au Vote + + + Proposal - Participants + + src/app/pages/proposal/pages/participants/participants.page.ts + 83 + + Participants - Offre + + + See all participants within the proposal + + src/app/pages/proposal/pages/participants/participants.page.ts + 84 + + Voir tous les participants à l'offre + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 151 + + il a rejoint Soonaverse le + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 12,13 + + Approuver + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 23,24 + + Refuser + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 67 + + Types de Procédure de Vote pour cette offre. + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 75 + + Poids total de l'ensemble des participants à cette offre. + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 22 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 22 + + Stade Actuel + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 23 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 23 + + Date d'Ouverture + + + Voting Type + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 26 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 26 + + Type de Vote + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 27 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 27 + + Poids Total + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 79 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 152 + + Vérifiez votre offre + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 87 + + Résultats actuels + + + (weight: ) + + src/app/pages/proposal/pages/proposal/proposal.page.html + 101,102 + + (poids : ) + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 124 + + Badges Sélectionnés + + + Votes + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 42 + + Votes + + + Voter + + src/app/pages/proposal/pages/votes/votes.page.html + 14 + + Électeur + + + Option (Weight) + + src/app/pages/proposal/pages/votes/votes.page.html + 16 + + Option (Poids) + + + Expired On + + src/app/pages/proposal/pages/votes/votes.page.html + 18 + + Expiré le + + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + src/app/pages/proposal/pages/votes/votes.page.html + 24 + + Lorsque le versement d'indemnités aura été effectué et que les sommes correspondant à ces dernières auront été liquidées, le vote est terminé et la pondération des votes sera appliquée selon un système proportionnel. Pour pouvoir exprimer votre vote, vous devrez voter à nouveau. + + + One Member One Vote + + src/app/pages/proposal/services/helper.service.ts + 25 + + Un Vote par Membre + + + XP Reputation - Space + + src/app/pages/proposal/services/helper.service.ts + 27 + + Espace - Points d'Expérience et de Réputation + + + XP Reputation - Selected Badges + + src/app/pages/proposal/services/helper.service.ts + 29 + + Badges sélectionnés - Points d'Expérience et de Réputation + + + Staking + + src/app/pages/soon-staking/pages/staking/staking.page.html + 3,4 + + Staking + + + How much I earn? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 13 + + Quel est le montant des gains en capital ? + + + How it works? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 135 + + Comment fonctionne-t-il ? + + + Stake your tokens to earn rewards and unlock new features. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 137,139 + + Stakez vos tokens pour pouvoir gagner des récompenses et débloquer de nouvelles fonctionnalités. + + + Unique Perks for stakers + + src/app/pages/soon-staking/pages/staking/staking.page.html + 160 + + Des Avantages Exceptionnels pour les stakers + + + Rewards + + src/app/pages/soon-staking/pages/staking/staking.page.html + 167,168 + + Récompenses + + + Trading Bonuses + + src/app/pages/soon-staking/pages/staking/staking.page.html + 180 + + Bonus de Récompenses en Trading + + + Unique Features + + src/app/pages/soon-staking/pages/staking/staking.page.html + 193 + + Des Fonctionnalités Exceptionnelles + + + Earn more er than you think + + src/app/pages/soon-staking/pages/staking/staking.page.html + 209 + + Gagnez plus que vous ne le pensez + + + The more you hold, the more rewards you get. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 214,215 + + Plus vous détenez de , plus vous obtenez de récompenses. + + + New + + src/app/pages/space/pages/awards/awards.page.html + 43 + + + src/app/pages/space/pages/collections/collections.page.html + 48 + + + src/app/pages/space/pages/proposals/proposals.page.html + 42 + + Nouveautés + + + award + + src/app/pages/space/pages/awards/awards.page.html + 44 + + récompense + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 31 + + + src/app/pages/space/pages/members/members.page.html + 45 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 31 + + Opérationnelles + + + Space - Awards + + src/app/pages/space/pages/awards/awards.page.ts + 54 + + Espace - Primes + + + Space's awards + + src/app/pages/space/pages/awards/awards.page.ts + 55 + + Primes de l'espace + + + No Collections + + src/app/pages/space/pages/collections/collections.page.html + 69,70 + + Aucune collection + + + Space - Collections + + src/app/pages/space/pages/collections/collections.page.ts + 65 + + Espace - Collections + + + Space's collections + + src/app/pages/space/pages/collections/collections.page.ts + 66 + + Collections de l'espace + + + Space Options + + src/app/pages/space/pages/manage/manage.page.html + 2 + + Options d'espacement + + + Token Options + + src/app/pages/space/pages/manage/manage.page.html + 6 + + Options du jeton + + + Edit Space + + src/app/pages/space/pages/manage/manage.page.html + 21 + + Éditer l'Espace + + + Manage Guardians + + src/app/pages/space/pages/manage/manage.page.html + 38 + + Désigner le Gardien + + + Export Current Members + + src/app/pages/space/pages/manage/manage.page.html + 44 + + Exporter les membres actuels + + + Create New Award + + src/app/pages/space/pages/manage/manage.page.html + 57 + + Créer une nouvelle récompense + + + Create New Proposal + + src/app/pages/space/pages/manage/manage.page.html + 68 + + Créer une nouvelle proposition + + + Create New Collection + + src/app/pages/space/pages/manage/manage.page.html + 79 + + Créer une nouvelle collection + + + Edit Token + + src/app/pages/space/pages/manage/manage.page.html + 105 + + Modifier les Tokens + + + Create Airdrop + + src/app/pages/space/pages/manage/manage.page.html + 127 + + Créer un AirDrop + + + Staking Reward Schedule + + src/app/pages/space/pages/manage/manage.page.html + 135 + + Programme de Récompenses de Staking + + + Export Current Stakers + + src/app/pages/space/pages/manage/manage.page.html + 141 + + Exporter les membres stakant actuels + + + Active + + src/app/pages/space/pages/members/members.page.html + 18,19 + + Actif + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 35,36 + + Bloqué + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 52 + + Bloqué + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 67 + + + src/app/pages/space/pages/members/members.page.html + 82 + + Trouver un membre + + + No Members + + src/app/pages/space/pages/members/members.page.html + 110,111 + + Pas de membres + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 118 + + a rejoint l'espace le + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 161,162 + + Retirer le Gardien + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 174,175 + + Désigner le Gardien + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 184,185 + + Bloquer l'accès au contenu aux Membres + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 187,188 + + Accepter de nouveaux Membres + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 190,191 + + Débloquer l'accès au contenu aux Membres + + + Space - Members + + src/app/pages/space/pages/members/members.page.ts + 76 + + Espace - Membres + + + Space's members + + src/app/pages/space/pages/members/members.page.ts + 77 + + Membres de l'espace + + + Upcoming Sale + + src/app/pages/space/pages/overview/overview.page.html + 7 + + Ventes Programmées + + + Live Token Sale + + src/app/pages/space/pages/overview/overview.page.html + 9 + + Token Vente en Ligne + + + Space - + + src/app/pages/space/pages/overview/overview.page.ts + 55 + + Espace - + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 43 + + offre + + + No Proposals + + src/app/pages/space/pages/proposals/proposals.page.html + 62,63 + + Il N'existe Pas d'Offres + + + Space - Proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 54 + + Espace - Offres + + + Space's proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 55 + + Offres de l'espace + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 34 + + Vérifiez l'Espace Composants + + + pending + + src/app/pages/space/pages/space/space-about/space-about.component.html + 153 + + pendant + + + Export members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 168 + + Exporter les membres + + + Exporting members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 172 + + Exportation de membres + + + Open to join instantly + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Pour se joindre immédiatement, ouvrez + + + Requires approval to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 183 + + Approbation requise pour se joindre + + + Requires + + src/app/pages/space/pages/space/space-about/space-about.component.html + 187 + + Requis + + + staked value to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 193 + + valeur stakée pour rejoindre + + + Related Links + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 92 + + Liens Appropriés + + + Claim ownership + + src/app/pages/space/pages/space/space-about/space-about.component.html + 259,260 + + Revendiquer la propriété + + + Space's Wallet Addresses + + src/app/pages/space/pages/space/space-about/space-about.component.html + 290 + + Adresses du Portefeuille de l'Espace + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 321 + + Quitter l'Espace + + + About space + + src/app/pages/space/pages/space/space.page.html + 3 + + À propos de l'espace + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 55,56 + + + src/app/pages/space/pages/space/space.page.html + 118,119 + + Se joindre à l'Espace + + + Pending Request + + src/app/pages/space/pages/space/space.page.html + 68 + + + src/app/pages/space/pages/space/space.page.html + 131 + + Demande Pendante + + + Ask to join Space + + src/app/pages/space/pages/space/space.page.html + 70 + + + src/app/pages/space/pages/space/space.page.html + 133 + + Demander de se joindre à l'Espace + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 82,83 + + + src/app/pages/space/pages/space/space.page.html + 160,161 + + Éditer l'Espace + + + Stake + + src/app/pages/space/pages/space/space.page.html + 144 + + Staker + + + to Join + + src/app/pages/space/pages/space/space.page.html + 147 + + pour rejoindre + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2 + + Ajout d'un nouvel espace + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3 + + Éditer l'espace + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17 + + Espace : infos + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19 + + Des spécifications techniques seront incluses dans l'espace. + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 56 + + Au niveau du détail, des liens seront inclus dans l'Espace. Pour Github, Twitter ou Discord, veuillez utiliser les noms d'usagers (name#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 97 + + Seul le code d'invitation discord est soutenu par le système (p. ex. : RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 104 + + Tapez votre code d'invitation Discord + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 125 + + Modèle d'Espace + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 127 + + Chaque modèle présente des spécificités propres, ce qui le différencie des autres. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 137,138 + + Accès libre afin de permettre à tous les intéressés de se joindre immédiatement + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 142 + + Cela exige l'approbation d'un membre + + + Requires stake value (in space's token) + + src/app/pages/space/pages/upsert/upsert.page.html + 146 + + Nécessite une valeur à staker (dans le jeton de l'espace) + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 174 + + La présence d'un Avatar est obligatoire + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 243,244 + + Création d'Espace + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 256,257 + + Espace d'enregistrement + + + Space - New + + src/app/pages/space/pages/upsert/upsert.page.ts + 76 + + Nouveautés - Espace + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/space/pages/upsert/upsert.page.ts + 77 + + Inscrivez-vous pour une mise en place immédiate du système des DAO sur Demande, en quelques minutes. Outils de vote blockchain gratuits, Découvrez les communautés DAO les plus surprenantes sur la plateforme Soonaverse. + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 210 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 216 + + Importer tous les codes du fichier d'import et mise à jour des codes existants. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 211 + + Votre empreinte est la clef. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 217 + + Donnez-lui votre touche personnelle. + + + Swap by + + src/app/pages/swap/pages/market/swap.page.html + 3,12 + + Swap by + + + What is Swap? + + src/app/pages/swap/pages/market/swap.page.html + 20,21 + + Qu'est-ce qu'un Swap ? + + + See Swap on iotabee + + src/app/pages/swap/pages/market/swap.page.html + 37,39 + + Voir le Swap sur iotabee + + + Create airdrop + + src/app/pages/token/pages/airdrops/airdrops.page.html + 8,9 + + Créer un airdrop + + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/pages/token/pages/airdrops/airdrops.page.html + 17,19 + + Vous pouvez instaurer un procédé de gouvernance, tout en créant un AirDrop de tokens pour vos membres. Dans ce but, il paraît nécessaire de charger un fichier CSV comprenant des renseignements sur la distribution et les adresses des utilisateurs. + + + Some rows have been removed + + src/app/pages/token/pages/airdrops/airdrops.page.html + 92 + + Certaines séries ont été supprimées + + + Submit airdrop + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 118,119 + + Soumission d'AirDrop + + + + row is not valid + + src/app/pages/token/pages/airdrops/airdrops.page.ts + 73 + + série non autorisée + + + Breakdown + + src/app/pages/token/pages/metrics/metrics.page.html + 1 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 284 + + Répartition + + + Token distribution + + src/app/pages/token/pages/metrics/metrics.page.html + 5 + + Émission de tokens + + + Total token supply + + src/app/pages/token/pages/metrics/metrics.page.ts + 56 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 96 + + Total supply de tokens + + + Launchpad price per token + + src/app/pages/token/pages/metrics/metrics.page.ts + 67 + + Prix de lancement par token + + + Initial Cap + + src/app/pages/token/pages/metrics/metrics.page.ts + 74 + + Capital de Départ + + + Total melted tokens + + src/app/pages/token/pages/metrics/metrics.page.ts + 82 + + Nombre total de tokens dégelés + + + You can create only ONE token per space and it can never be changed. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 14,15 + + Vous ne pouvez créer qu'UN seul Token par Espace. Il ne sera dès lors plus possible d'effectuer des changements. + + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 23,26 + + Les informations qui suivent peuvent revêtir de l'importance pour la création d'un token sur Soonaverse. Veuillez lire à propos de ce sujet les instructions et remplir le formulaire de demande disponibles sur cet écran, si votre intétêt est bien celui de faire de la vente publique ou de rendre votre token disponible sur la plateforme d'Échanges de Soonaverse . + + + Continue + + src/app/pages/token/pages/new/introduction/introduction.component.html + 38,39 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 191,192 + + + src/app/pages/token/pages/new/overview/overview.component.html + 104,105 + + Progresser + + + Token Sale Requirements + + src/app/pages/token/pages/new/introduction/introduction.component.html + 50 + + Dispositions relatives à la Vente de Tokens + + + To create a public sale or use the Token Exchange you must complete our KYC process. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 52 + + Que vous vouliez créer une vente publique ou utiliser la plateforme d'Échanges de tokens, vous devrez achever notre processus KYC. + + + Begin Process + + src/app/pages/token/pages/new/introduction/introduction.component.html + 58 + + Entamer le Processus + + + Continue + + + src/app/pages/token/pages/new/introduction/introduction.component.html + 73,74 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 330,331 + + + src/app/pages/token/pages/new/overview/overview.component.html + 214,215 + + Progresser + + + + Token info + + src/app/pages/token/pages/new/metrics/metrics.component.html + 9 + + + src/app/pages/token/pages/new/summary/summary.component.html + 14 + + + src/app/pages/token/pages/token/token.page.html + 3 + + Token : infos + + + Name is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 16 + + Le nom n'est pas autorisé. + + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + src/app/pages/token/pages/new/metrics/metrics.component.html + 33 + + Le symbole n'est pas autorisé (quantité de tokens consentie allant de 3 à 10 ; lettres consenties allant de A à Z). + + + Token supply + + src/app/pages/token/pages/new/metrics/metrics.component.html + 47 + + + src/app/pages/token/pages/new/summary/summary.component.html + 53 + + Token Supply + + + Price per token (MIOTA) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 53 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 58 + + Prix par token (MIOTA) + + + Price is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 54 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 38 + + Le prix n'est pas autorisé. + + + Total token supply (up to 6 decimals are supported) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 68 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 74 + + Total supply de tokens (le registre de valeur pris en charge, est divisible en 6 décimales au maximum) + + + Total supply is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 69 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 107 + + La Total Supply n'est pas autorisée. + + + Allocation title + + src/app/pages/token/pages/new/metrics/metrics.component.html + 111 + + Désignation de la distribution + + + % of tokens for sale + + src/app/pages/token/pages/new/metrics/metrics.component.html + 121 + + % de jetons en vente + + + Percentage of tokens is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 122 + + Le pourcentage de Tokens n'est pas autorisé. + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 126 + + % de Tokens destinés à la vente (montant par défaut de 100%) + + + Only 1 of the allocations can be public + + src/app/pages/token/pages/new/metrics/metrics.component.html + 149 + + Seulement une part des Tokens distribués, sera destinée à la vente publique + + + Sum of the percentages must be 100 + + src/app/pages/token/pages/new/metrics/metrics.component.html + 155 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 166 + + La somme des pourcentages doit être égale à 100 + + + Invalid sum of percentages + + src/app/pages/token/pages/new/metrics/metrics.component.html + 160 + + Quantités non autorisées (Somme des pourcentages) + + + Add allocation + + src/app/pages/token/pages/new/metrics/metrics.component.html + 179 + + Part allouée à la distribution + + + Token icon + + src/app/pages/token/pages/new/metrics/metrics.component.html + 221 + + + src/app/pages/token/pages/new/summary/summary.component.html + 265 + + Symbole du Token + + + (Recomended size: 400 x 400px) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 223 + + (Dimensions recommandées : 400 x 400 px) + + + Icon is mandatory + + src/app/pages/token/pages/new/metrics/metrics.component.html + 232 + + La présence du symbole est obligatoire + + + Token price + + src/app/pages/token/pages/new/metrics/metrics.component.html + 264 + + + src/app/pages/token/pages/new/summary/summary.component.html + 283 + + Prix du Token + + + Distribution of the token happens after the token offering end date. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 266 + + + src/app/pages/token/pages/new/summary/summary.component.html + 285 + + La livraison du token n'aura lieu qu'après l'expiration du délai d'appel d'offres de tokens. + + + Configure the token supply first to see breakdown. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 288 + + Pour pouvoir voir la répartition, vous devez avant tout configurer la Supply. + + + Token terms and conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 298 + + + src/app/pages/token/pages/new/summary/summary.component.html + 324 + + Les termes et les conditions du Token + + + Provide link for Terms and Conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 300 + + Insérer un lien vers la page des Termes et Conditions + + + Terms and Conditions link is invalid. (Start with http:// or https://) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 306 + + Les caractères du lien menant vers la page des Termes et Conditions ne sont pas autorisés.(Commencer la saisie des URL http://; https://) + + + Token allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 75 + + + src/app/pages/token/pages/new/summary/summary.component.html + 165 + + Distribution de Tokens + + + Allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 76 + + + src/app/pages/token/pages/new/summary/summary.component.ts + 30 + + Distribution + + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 81,82 + + Veillez à ce qu'il n'y ait qu'une seule distribution par vente publique, car celle-ci sera susceptible d'être vendue par la suite sur Soonaverse. + Lorsque vous aurez créé votre token et qu'une approbation aura été donnée, vous pourrez choisir de rendre publique votre marketplace. + + + Create token + + src/app/pages/token/pages/new/new.page.html + 2 + + Créez votre Token + + + Introduction + + src/app/pages/token/pages/new/new.page.ts + 32 + + Présentation + + + Metrics + + src/app/pages/token/pages/new/new.page.ts + 33 + + + src/app/pages/token/pages/token/token.page.ts + 38 + + Métriques + + + Summary + + src/app/pages/token/pages/new/new.page.ts + 35 + + Récapitulatif + + + New Token + + src/app/pages/token/pages/new/new.page.ts + 72 + + Nouveau Token + + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + src/app/pages/token/pages/new/new.page.ts + 73 + + Lancez votre propre projet crypto sur le réseau Shimmer : le garant de la sécurité et de la protection, à titre gratuit. Créez votre token dès aujourd'hui. + + + Token description + + src/app/pages/token/pages/new/overview/overview.component.html + 12 + + + src/app/pages/token/pages/new/summary/summary.component.html + 93 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 6 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 27 + + Résumé des attributs du Token + + + This text will be displayed on the main token page. + + src/app/pages/token/pages/new/overview/overview.component.html + 14 + + Cette justification textuelle s'affichera sur la page principale du token. + + + Title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 23 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 10 + + Les caractères utilisés pour la Dénomination ne sont pas autorisés. + + + Description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 38 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 22 + + Les caractères utilisés pour la désignation du token ne sont pas autorisés. + + + Short description + + src/app/pages/token/pages/new/overview/overview.component.html + 55 + + + src/app/pages/token/pages/new/summary/summary.component.html + 129 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 49 + + Résumé des spécifications + + + Short description of the token which will be displayed on the token trading page. + + src/app/pages/token/pages/new/overview/overview.component.html + 57 + + Un résumé des spécifications du token s'affichera sur la page dédiée au Trading de tokens. + + + Short title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 66 + + Les caractères utilisés pour la dénomination abrégée ne sont pas autorisés. + + + Short description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 81 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 68 + + Les caractères utilisés pour le résumé des spécifications ne sont pas autorisés. + + + Overview graphics + + src/app/pages/token/pages/new/overview/overview.component.html + 121 + + Représentations graphiques : une vue d'ensemble + + + Token introductory video / image + + src/app/pages/token/pages/new/overview/overview.component.html + 123 + + Vidéo de présentation et de promotion d'image Token + + + Introductionary media is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 132 + + La mise en place du support n'est pas autorisée. + + + Invalid URL. (Start with http:// or https://) + + src/app/pages/token/pages/new/overview/overview.component.html + 168 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 84 + + L'URL fournie n'est pas autorisée. (Commencer la saisie des URL http:// ; https://) + + + Add link + + src/app/pages/token/pages/new/overview/overview.component.html + 191 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 107 + + Ajouter un lien + + + Edit + + src/app/pages/token/pages/new/summary/summary.component.html + 22,23 + + + src/app/pages/token/pages/new/summary/summary.component.html + 61,62 + + + src/app/pages/token/pages/new/summary/summary.component.html + 101,102 + + + src/app/pages/token/pages/new/summary/summary.component.html + 137,138 + + + src/app/pages/token/pages/new/summary/summary.component.html + 173,174 + + Éditer + + + Name + + src/app/pages/token/pages/new/summary/summary.component.html + 30,31 + + Nom du Token + + + Symbol + + src/app/pages/token/pages/new/summary/summary.component.html + 41,42 + + Symbole du Token + + + Total token supply + + src/app/pages/token/pages/new/summary/summary.component.html + 80,81 + + Total supply de tokens + + + Description title + + src/app/pages/token/pages/new/summary/summary.component.html + 109,110 + + Dénomination désignant un Token + + + Description + + src/app/pages/token/pages/new/summary/summary.component.html + 120,121 + + Désignation du Token + + + Short description title + + src/app/pages/token/pages/new/summary/summary.component.html + 145,146 + + Spécifications techniques succinctes + + + Short description + + src/app/pages/token/pages/new/summary/summary.component.html + 156,157 + + Résumé des spécifications du token + + + Allocation title + + src/app/pages/token/pages/new/summary/summary.component.html + 187,188 + + Dénomination de la distribution + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/summary/summary.component.html + 198,199 + + % de Tokens destinés à la vente (montant par défaut de 100%) + + + Submit token + + src/app/pages/token/pages/new/summary/summary.component.html + 227,228 + + Avancer son token + + + + (Recommended size: 400 x 400px) + + src/app/pages/token/pages/new/summary/summary.component.html + 267 + + (Taille suggérée : 400 x 400 px) + + + Some description + + src/app/pages/token/pages/new/summary/summary.component.html + 326 + + Quelques exemples de désignation du token + + + Terms&conditions + + src/app/pages/token/pages/new/summary/summary.component.html + 340 + + Termes& conditions + + + Submit token + + + src/app/pages/token/pages/new/summary/summary.component.html + 356,357 + + Avancer son token + + + + Trade token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 15,16 + + Trade de token + + + Buy Tokens + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 28,29 + + Achat de Tokens + + + Schedule public sale + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 42,43 + + Planifier la vente publique + + + Allow Trading + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 57,58 + + Autoriser le trading + + + Edit token info + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 86 + + Ajustement de l'information du token + + + Check out token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 100 + + Jetez un coup d'œil sur le token + + + Mint & Approve Token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 132,133 + + Mint & Validez le Token + + + Minting in progress + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 144,145 + + Processus de Minting en cours + + + Token was not made available on decentralised network yet. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 150 + + Il n'y a pas encore de disponibilité du token sur le réseau décentralisé. + + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 153,154 + + Le transfert de token vers le réseau décentralisé n'a pas encore eu lieu. Soyez au fait de ce que vous êtes en train d'acheter. + + + Trading enabled. + + src/app/pages/token/pages/token/token-buy/token-buy.component.ts + 86 + + Le trading est activé. + + + Short description title is invalid. + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 56 + + Les caractères utilisés pour le résumé des spécifications techniques ne sont pas autorisés. + + + Short description title + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 61 + + Spécifications techniques succinctes + + + Short token description + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 73 + + Résumé des spécifications du token + + + Sale Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 4 + + Vente : Infos + + + Sale schedule + + src/app/pages/token/pages/token/token-info/token-info.component.html + 10 + + Programme de vente + + + During cooldown period you are able to trigger refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 41 + + Durant la phase de refroidissement, vous pourrez engager une procédure de remboursement. + + + No Cooldown. Participants can't refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 75,76 + + Il N'existe Pas de Refroidissement. Les participants ne peuvent pas rembourser. + + + Token Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 80 + + + src/app/pages/token/pages/trade/trade.page.html + 57 + + + src/app/pages/token/pages/trade/trade.page.html + 624 + + Token : Infos + + + My purchased tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 4 + + Tokens achetés + + + + + + + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 78,80 + + + + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 90,92 + + L'objectif de vente de tokens a été atteint ! Le caractère équitable de la livraison de tokens sera garanti par le remboursement des excédents. + + + Your Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 21 + + Votre Dépôt + + + Potential Tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 22 + + Tokens d'Ampleur + + + Token Owned + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 23 + + Token Protégé par des Droits de Propriété + + + Total Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 24 + + Total des Dépôts + + + Total Participants + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 25 + + Nombre Total de Participants + + + Sale ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 45 + + La vente prendra fin dans + + + Cooldown in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 62 + + Refroidissement en cours + + + Sale in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 64 + + Vente en cours + + + Sale starts in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 69 + + La vente s'ouvrira dans + + + Cooldown ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 73 + + Le refroidissement s'achèvera dans + + + + + + + src/app/pages/token/pages/token/token.page.html + 47,48 + + + + + Airdrops + + src/app/pages/token/pages/token/token.page.ts + 41 + + Airdrops + + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + src/app/pages/token/pages/token/token.page.ts + 100 + + + src/app/pages/token/pages/trade/trade.page.ts + 275 + + Achetez, vendez, et tradez des SOON tokens ainsi que des Shimmer tokens sur un exchange layer 1 : une plateforme d'Échanges décentralisée et autonome, garante de sécurité et de protection. Démarrez en quelques minutes. Rejoignez-nous dès aujourd'hui. + + + Ongoing Sale + + src/app/pages/token/pages/token/token.page.ts + 248 + + Vente en Cours + + + Scheduled + + src/app/pages/token/pages/token/token.page.ts + 250 + + Programmé + + + Cooldown + + src/app/pages/token/pages/token/token.page.ts + 252 + + Refroidissement + + + Processing + + src/app/pages/token/pages/token/token.page.ts + 254 + + Traitement d'images + + + Order book + + src/app/pages/token/pages/trade/trade.page.html + 94 + + + src/app/pages/token/pages/trade/trade.page.html + 644 + + Livre d'ordres + + + Token chart + + src/app/pages/token/pages/trade/trade.page.html + 102 + + + src/app/pages/token/pages/trade/trade.page.html + 795 + + Cours du Token + + + My trading + + src/app/pages/token/pages/trade/trade.page.html + 158 + + Mes ordres d'achat/vente + + + Open buy orders + + src/app/pages/token/pages/trade/trade.page.html + 166 + + Ouvrir les ordres d'achat + + + Open sell orders + + src/app/pages/token/pages/trade/trade.page.html + 174 + + Ouvrir les ordres de vente + + + Order history + + src/app/pages/token/pages/trade/trade.page.html + 182 + + Historique de commande + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 213 + + + src/app/pages/token/pages/trade/trade.page.html + 287 + + Rempli + + + There are no buys + + src/app/pages/token/pages/trade/trade.page.html + 257,258 + + Il n'existe pas de positions ouvertes à l'achat + + + Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 321,322 + + + src/app/pages/token/pages/trade/trade.page.html + 416,417 + + Révoqué + + + Expired + + src/app/pages/token/pages/trade/trade.page.html + 324,325 + + + src/app/pages/token/pages/trade/trade.page.html + 422,423 + + Expiré + + + There are no sells + + src/app/pages/token/pages/trade/trade.page.html + 345,346 + + Il n'existe pas de positions ouvertes à la vente + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 388 + + + src/app/pages/token/pages/trade/trade.page.html + 1213 + + Vente + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 404,405 + + Rempli + + + Partially Fulfilled / Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 410,411 + + Partiellement Rempli / Annulé + + + Fulfilled / Cancelled (unfulfillable) + + src/app/pages/token/pages/trade/trade.page.html + 419,420 + + Réalisé / Annulé (non réalisable) + + + There is no order history + + src/app/pages/token/pages/trade/trade.page.html + 434,435 + + Il n'existe pas d'historique de commandes + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 477,478 + + + src/app/pages/token/pages/trade/trade.page.html + 488,489 + + + src/app/pages/token/pages/trade/trade.page.html + 919,920 + + Vente + + + Available + + src/app/pages/token/pages/trade/trade.page.html + 530,531 + + Disponible + + + Current Price + + src/app/pages/token/pages/trade/trade.page.html + 542 + + Prix Actuel + + + Change 24h + + src/app/pages/token/pages/trade/trade.page.html + 564,565 + + Changement en 24h + + + ( ~ ) + + src/app/pages/token/pages/trade/trade.page.html + 729,732 + + ( ~ ) + + + current price + + src/app/pages/token/pages/trade/trade.page.html + 737,738 + + prix actuel + + + There is no activity yet + + src/app/pages/token/pages/trade/trade.page.html + 788,789 + + Il n'existe pas encore d'activité d'achat ou de vente + + + Trade history + + src/app/pages/token/pages/trade/trade.page.html + 829,830 + + Historique d'achat/vente + + + There is no trade history + + src/app/pages/token/pages/trade/trade.page.html + 894,895 + + Il n'existe pas d'historique d'achat/vente + + + You don’t have enough tokens + + src/app/pages/token/pages/trade/trade.page.html + 928 + + Vous ne possédez pas suffisamment de tokens + + + Amount to + + src/app/pages/token/pages/trade/trade.page.html + 935,936 + + Montant de tokens que vous souhaitez + + + Balance + + src/app/pages/token/pages/trade/trade.page.html + 979 + + Solde + + + Set your price per 1 + + src/app/pages/token/pages/trade/trade.page.html + 998,1000 + + Fixez votre prix à 1 + + + LIMIT PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1009,1010 + + PRIX LIMITE + + + MARKET PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1017,1018 + + PRIX DE MARCHÉ + + + ~ + + src/app/pages/token/pages/trade/trade.page.html + 1038,1041 + + + src/app/pages/token/pages/trade/trade.page.html + 1145,1148 + + ~ + + + Set Current Price + + src/app/pages/token/pages/trade/trade.page.html + 1069 + + Fixer le Prix Actuel + + + Set BID + + src/app/pages/token/pages/trade/trade.page.html + 1093,1104 + + Faire une SOUMISSION + + + The bid price is the highest price that a particular buyer is willing to pay. + + src/app/pages/token/pages/trade/trade.page.html + 1100 + + Le prix de soumission constitue le prix le plus élevé qu'un acheteur déterminé est prêt à payer. + + + Set ASK + + src/app/pages/token/pages/trade/trade.page.html + 1109,1120 + + Fixer le PRIX DE LA DEMANDE + + + The asking price is the minimum price that an individual would be willing to sell their asset. + + src/app/pages/token/pages/trade/trade.page.html + 1116 + + Le prix de la demande constitue le prix de vente minimum souhaité par le particulier pour la vente de ses actifs tokenisés. + + + You will spend + + src/app/pages/token/pages/trade/trade.page.html + 1129,1130 + + Vous investissez + + + Minimum total has to be at least + + src/app/pages/token/pages/trade/trade.page.html + 1163 + + Le montant minimum total doit être d'au moins de + + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + src/app/pages/token/pages/trade/trade.page.html + 1179 + + Le montant de trésorerie perçu par Soonaverse au titre du prix de la vente s'élève à 2,5%. Il n'existe pas de frais supplémentaires ou cachés. Vous pouvez faire vos achats de tokens en toute liberté. + + + 1h + + src/app/pages/token/pages/trade/trade.page.ts + 118 + + 1h + + + 4h + + src/app/pages/token/pages/trade/trade.page.ts + 119 + + 4h + + + 1d + + src/app/pages/token/pages/trade/trade.page.ts + 120 + + 1j + + + 1w + + src/app/pages/token/pages/trade/trade.page.ts + 121 + + 1sem. + + + Bids + + src/app/pages/token/pages/trade/trade.page.ts + 563 + + Soumissions + + + Asks + + src/app/pages/token/pages/trade/trade.page.ts + 567 + + Demandes de vente + + + Cancelled + + src/app/pages/token/services/helper.service.ts + 201 + + Révoqué + + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 42 + + Fouillez parmi les meilleures crypto-monnaies Shimmer, IOTA et les meilleures crypto-monnaies SOON. Des graphiques linéaires, des profils de cryptos, sur L1 : une plateforme d'Échanges décentralisée et autonome, garante de sécurité et de protection ! Inscrivez-vous dès aujourd'hui. + + + Go to trading pairs to add your favourite tokens. + + src/app/pages/tokens/pages/favourites/favourites.page.html + 47,48 + + Rendez-vous sur Paires de Trading pour additionner toutes les paires de tokens préférées. + + + Add favourites + + src/app/pages/tokens/pages/favourites/favourites.page.html + 56,57 + + Ajouter à mes favoris + + + Tokens - Favourite + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 52 + + Tokens - Favori + + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 53 + + Achetez, tradez et conservez vos tokens Shimmer, IOTA et SOON préférés. Notre plateforme d'Échanges L1 décentralisée et autonome, garante de sécurité et de protection n'attend que vous ! Inscrivez-vous dès aujourd'hui. + + + Tokens - Launchpad + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 41 + + Launchpad - Tokens + + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 42 + + Faites votre levée de fonds, accroissez la reconnaissance et faites grimper l'audience en LANÇANT vos tokens Shimmer au travers du projet Soonaverse Launchpad. Rejoignez-nous dès aujourd'hui. + + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/tokens/pages/tokens/tokens.page.html + 11,13 + + Plusieurs tokens pourraient ne pas encore avoir été transférés vers le réseau décentralisé. Soyez au fait de ce que vous êtes en train d'acheter. + + + Highlighted Token + + src/app/pages/tokens/pages/tokens/tokens.page.html + 49 + + Token Fer de Lance + + + Favorites + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 17 + + Favoris + + + All tokens + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 20 + + Tous les tokens + + + Trading pairs + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 21 + + Paires de trading + + + Launchpad + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 22 + + Launchpad + + + Tokens - Trading Pairs + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 43 + + Tokens - Paires de Trading + + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 44 + + Le listing le plus exhaustif des projets Shimmer, des couples de devises SOON et de leurs marchés, sur L1 : une plateforme d'Échanges décentralisée et autonome, garante de sécurité et de protection. Inscrivez-vous dès aujourd'hui ! + + + AuditOne Validation + + src/app/service-modules/audit-one/components/modal/modal.component.html + 3 + + Validation d'AuditOne + + + Requested On + + src/app/service-modules/audit-one/components/modal/modal.component.html + 22 + + Requis le + + + Last Update + + src/app/service-modules/audit-one/components/modal/modal.component.html + 23 + + Dernière mise à jour + + + There are no records. + + src/app/service-modules/audit-one/components/modal/modal.component.html + 52 + + Il n'existe pas d'enregistrements. + + + AuditOne + + src/app/service-modules/audit-one/components/widget/widget.component.html + 11 + + AuditOne + + + Verified + + src/app/service-modules/audit-one/components/widget/widget.component.html + 47 + + Vérifié + + + See more + + src/app/service-modules/audit-one/components/widget/widget.component.html + 52 + + Voir plus + + + + diff --git a/src/locale/messages.hu-HU.xlf b/src/locale/messages.hu-HU.xlf new file mode 100644 index 0000000..1e55add --- /dev/null +++ b/src/locale/messages.hu-HU.xlf @@ -0,0 +1,6844 @@ + + + + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 69 + + Vissza + + + Discover + + src/app/@shell/ui/header/header.component.html + 56,57 + + + src/app/pages/home/home.page.html + 18,19 + + Felfedezés + + + Create new + + src/app/@shell/ui/header/header.component.html + 62 + + Új létrehozása + + + Space + + src/app/@shell/ui/header/header.component.html + 68,69 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 83,84 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 6,7 + + + src/app/pages/collection/pages/collection/collection.page.html + 54,55 + + + src/app/pages/market/pages/collections/collections.page.html + 122,123 + + + src/app/pages/market/pages/nfts/nfts.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 69,70 + + Space + + + Proposal + + src/app/@shell/ui/header/header.component.html + 71,72 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 23,24 + + Ötlet + + + Award + + src/app/@shell/ui/header/header.component.html + 74,75 + + + src/app/pages/award/pages/award/award.page.html + 26,27 + + Díjak + + + Collection + + src/app/@shell/ui/header/header.component.html + 77,78 + + + src/app/pages/collection/pages/collection/collection.page.html + 19,20 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 114,115 + + + src/app/pages/nft/pages/new/single/single.page.html + 336,337 + + + src/app/pages/space/pages/collections/collections.page.html + 26 + + Kollekció + + + None. + + src/app/@shell/ui/header/header.component.html + 128,129 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 52 + + None. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 137,138 + + + src/app/components/auth/services/auth.service.ts + 315 + + Saját profil + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 152,153 + + Purchase has not been completed + + + You have + + src/app/@shell/ui/header/header.component.html + 154 + + You have + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 154,155 + + to finish your transaction + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 156,157 + + Open Checkout + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 272 + + Megnyerted az NFT-t + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 273 + + You are a proud owner of a new NFT. Congratulations! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 280 + + You lost your bid! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 281 + + Your bid on + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 282 + + was outbid. Try again! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 289 + + just offered + + + for + + src/app/@shell/ui/header/header.component.ts + 290 + + + src/app/components/timeline-nft/timeline-nft.component.html + 60 + + for + + + Your + + src/app/@shell/ui/header/header.component.ts + 291 + + Your + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 292 + + has received a new bid for + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 300,299 + + Unsupported + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 301 + + This notification is not yet supported in your language + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 12 + + Space + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 17 + + Proposal + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 22 + + Award + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27 + + Collection + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 34,35 + + Connect to your MetaMask wallet + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 52,53 + + Log out + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 56,57 + + Powered by + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8,10 + + The page you were looking for was not found + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 11,13 + + Discover Soonaverse + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 28,29 + + See Docs + + + Coming SOON + + src/app/@shell/ui/sider/sider.component.html + 35,36 + + + src/app/pages/award/pages/new/new.page.html + 271,272 + + + src/app/pages/award/pages/new/new.page.html + 281,282 + + + src/app/pages/award/pages/new/new.page.html + 291,292 + + Coming SOON + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 8,9 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 9,10 + + Connect to your Metamask wallet + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 20,21 + + Make sure you select public IOTA EVM Chain in MetaMask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 22,23 + + Network Name: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23,24 + + RPC URL: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 24,25 + + Chain ID: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 31,32 + + + src/app/pages/award/pages/award/award.page.html + 154 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 152 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 184 + + Mégse + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 1,3 + + Csatlakozás + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Szétkapcsolás + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 111 + + Nem sikerült aláírni a tranzakciót. Kérjük, próbálja meg újratölteni az oldalt. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 156 + + Először fel kell oldanod a MetaMaszkot! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 167 + + A fiókcím olvasásához engedélyeznie kell a hozzáférést. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 189 + + Kérjük, győződjön meg róla, hogy a MetaMaskban a címet választotta ki! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 196 + + Nem sikerült megszerezni a hitelesítéshez szükséges nonce-t! + + + You have to open Soonaverse in MetaMask app. + + src/app/components/auth/services/auth.service.ts + 239 + + A Soonaverse-t a MetaMask alkalmazásban kell megnyitni. + + + Failed to initialize MetaMask, try to reload page. + + src/app/components/auth/services/auth.service.ts + 241 + + Failed to initialize MetaMask, try to reload page. + + + Pending + + + src/app/components/award/components/award-status/award-status.component.html + 1,2 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 1,2 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 1,2 + + Pending + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 3,4 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 3,4 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 3,4 + + Rejected + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 5 + + + src/app/pages/space/pages/awards/awards.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 25 + + Completed + + + Available + + src/app/components/award/components/award-status/award-status.component.html + 6 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 62 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 150,149 + + + src/app/pages/collection/pages/collection/collection.page.html + 91,92 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 39,37 + + + src/app/pages/space/pages/collections/collections.page.ts + 24 + + Available + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 4 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 553,554 + + Space Members Only + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 542,543 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 14 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 564,565 + + Space Members with Badge Only + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 574,575 + + At least one NFT from Collections + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 19 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 43,44 + + Kezdődik + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 21 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 46,47 + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26,27 + + nap + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 24 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 50,51 + + Ma kezdődik + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 42 + + Limitált kiadás + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 57 + + Elfogadásra vár + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 67 + + + src/app/pages/space/pages/awards/awards.page.ts + 26 + + + src/app/pages/space/pages/collections/collections.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 26 + + Elutasított + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 2,3 + + + src/app/pages/nft/pages/new/single/single.page.html + 342,343 + + Kollekció szükséges. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 11,12 + + Válassza ki a kollekciót + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 65,67 + + Válassza ki a kollekciót + + + Search + + src/app/components/collection/components/select-collection/select-collection.component.html + 74 + + + src/app/components/space/components/select-space/select-space.component.html + 74 + + + src/app/pages/discover/pages/discover/discover.page.html + 22,23 + + + src/app/pages/market/pages/market/market.page.html + 22,23 + + Keresés + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 84 + + + src/app/components/space/components/select-space/select-space.component.html + 84 + + Nincs találat + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 14,13 + + All Collections + + + Wallet details + + src/app/components/member/components/member-about/member-about.component.html + 42,43 + + Wallet details + + + Member's Wallet Address. + + src/app/components/member/components/member-about/member-about.component.html + 44,45 + + Member's Wallet Address. + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 55,56 + + Recently joined spaces + + + All + + src/app/components/member/components/member-about/member-about.component.html + 58,59 + + + src/app/pages/discover/pages/spaces/spaces.page.ts + 28,27 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 38,37 + + All + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 78,79 + + No Contribution Yet. + + + Latest Badges + + src/app/components/member/components/member-about/member-about.component.html + 84,85 + + Latest Badges + + + No badges + + src/app/components/member/components/member-about/member-about.component.html + 93,94 + + No badges + + + See all + + src/app/components/member/components/member-about/member-about.component.html + 97,98 + + See all + + + Connections + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 5 + + + src/app/pages/member/pages/activity/activity.page.html + 68 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 50,51 + + Connections + + + Awards + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 6 + + + src/app/pages/discover/pages/discover/discover.page.ts + 23 + + + src/app/pages/member/pages/member/member.page.ts + 27 + + + src/app/pages/space/pages/space/space.page.ts + 33 + + Awards + + + XP + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 7 + + + src/app/components/member/components/member-card/member-card.component.html + 31,32 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 16,17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 25,26 + + XP + + + Total reputation + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 29 + + Total reputation + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 38,39 + + awards + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 6,7 + + Display Name + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 7,8 + + Set a display name. This does not change your username. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 11 + + Display name (optional) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 18,19 + + About + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19,20 + + A brief description of yourself shown on your profile. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 22 + + Your description (optional) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 29,30 + + + src/app/pages/space/pages/upsert/upsert.page.html + 154 + + Avatar + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 30,31 + + Customise your Soonaverse identity. + + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 34,37 + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 43,44 + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 49,50 + + + src/app/pages/space/pages/upsert/upsert.page.html + 52,53 + + Networking + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 51,52 + + + src/app/pages/space/pages/upsert/upsert.page.html + 60,61 + + Invalid Github username. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 53,54 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67,68 + + Type your Github account username + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 63,64 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 206,207 + + + src/app/pages/space/pages/upsert/upsert.page.html + 80,81 + + Invalid Twitter username. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 65,66 + + + src/app/pages/space/pages/upsert/upsert.page.html + 87,88 + + Type your Twitter account username + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,76 + + Only username#1234 format supported. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 77,78 + + Type your Discord account username + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 89,90 + + Settings + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 91,92 + + Save changes + + + reputation + + src/app/components/member/components/member-reputation-drawer/member-reputation-drawer.component.html + 15 + + + src/app/components/member/components/member-reputation-modal/member-reputation-modal.component.html + 17 + + reputation + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 15,16 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 29,30 + + Make a bid + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 44,45 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 9,10 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 44,45 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46,47 + + NFT image + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 61 + + Ends + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 66 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 63 + + Royalties + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 72,73 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 116,117 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 66,67 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 69,70 + + Royalties are automatically deducted and paid to artists. + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 91 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 94 + + Current highest bid + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 92 + + + src/app/pages/nft/pages/nft/nft.page.html + 59 + + Min bid + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 95 + + + src/app/pages/nft/pages/nft/nft.page.html + 61 + + Your bid is the highest + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Current price is refreshing in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 152,153 + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 156,157 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 196,197 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 277,278 + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + + By checking this box, you agree with + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 162,163 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 108,109 + + By checking this box, you agree with + + + Terms and Conditions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 165,166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 111,112 + + Terms and Conditions + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 171 + + Make a bid + + + Send IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 180,181 + + Send IOTA to following address (please restake after!): + + + Copied + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 189 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 240 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150 + + + src/app/components/share/share.component.html + 11 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 139 + + + src/app/components/wallet-address/wallet-address.component.html + 24 + + Copied + + + Copy + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 190 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 241 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 151 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 140 + + + src/app/components/wallet-address/wallet-address.component.html + 25 + + Copy + + + Do not send funds from an exchange, always use wallets you fully control. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 201 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + Do not send funds from an exchange, always use wallets you fully control. + + + Firefly + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 210 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 166 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 151 + + Firefly + + + Tanglepay + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 219 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 300 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 175 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 160 + + Tanglepay + + + Send + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130 + + Send + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231,232 + + IOTA to following address (please restake after!): + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 247 + + Your transactions + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 253,254 + + Sent Date + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 254,255 + + Time + + + Action + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,256 + + Action + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 256,257 + + + src/app/pages/nft/pages/nft/nft.page.html + 170,171 + + + src/app/pages/nft/pages/nft/nft.page.html + 204,205 + + Amount + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 258,259 + + Detail + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 270,271 + + + src/app/pages/nft/pages/nft/nft.page.html + 171,172 + + + src/app/pages/nft/pages/nft/nft.page.html + 190,191 + + + src/app/pages/nft/pages/nft/nft.page.html + 205,206 + + + src/app/pages/nft/pages/nft/nft.page.html + 219,220 + + Link + + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 282 + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 314,315 + + Congratulations you won the NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 320 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 238 + + Close checkout + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 325 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 243 + + Show my NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 337,338 + + Bidding is expired. Good luck next time :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 227 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 368 + + Generated NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 229 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 370 + + SFT + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 47,48 + + day + + + Price + + src/app/components/nft/components/nft-card/nft-card.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 12 + + + src/app/pages/collection/pages/collection/collection.page.html + 190 + + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 65 + + + src/app/pages/market/pages/collections/collections.page.html + 162 + + + src/app/pages/market/pages/nfts/nfts.page.html + 50 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 71,72 + + + src/app/pages/nft/pages/new/single/single.page.html + 62 + + Price + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 73 + + Current bid + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 88,89 + + Owned by + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 100,101 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 155,154 + + New NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 15,16 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 29,30 + + Checkout + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 71,72 + + Total price + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 117 + + Confirm and Lock + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121 + + Your NFT will be locked for purchase for + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121,122 + + minutes + + + remaining to make the transfer. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 132,133 + + remaining to make the transfer. + + + Expired + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 133,134 + + Expired + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 137 + + We received invalid amount. Try again. + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141,142 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130,131 + + IOTA to following address (please restake after!): + + + Transaction history + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 214 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 177 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 204 + + Transaction history + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 204 + + Validating your transaction... + + + Transaction complete. Congratulations. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 232,233 + + Transaction complete. Congratulations. + + + + + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 10,11 + + + src/app/pages/collection/pages/collection/collection.page.html + 55,56 + + + src/app/pages/collection/pages/collection/collection.page.html + 70,71 + + + + + d + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26 + + d + + + h + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34 + + h + + + hours + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34,35 + + hours + + + m + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42 + + m + + + min + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42,43 + + min + + + s + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50 + + s + + + sec + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50,51 + + sec + + + Sale Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 34 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 50,51 + + Sale Starts + + + Auction Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 37 + + Auction Starts + + + Auction Ends + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 40 + + Auction Ends + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 16,17 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 31,32 + + Preview + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 59,60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 74,75 + + + src/app/pages/nft/pages/nft/nft.page.html + 43,44 + + Current price + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68,69 + + Author + + + Migrate + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100,101 + + + src/app/pages/nft/pages/nft/nft.page.html + 291,292 + + Migrate + + + Shimmer/Mainnet (Tokenization)...SOON. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 102,104 + + + src/app/pages/nft/pages/nft/nft.page.html + 293,295 + + Shimmer/Mainnet (Tokenization)...SOON. + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 108,109 + + + src/app/pages/nft/pages/nft/nft.page.html + 299,300 + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 114,115 + + + src/app/pages/nft/pages/nft/nft.page.html + 305,306 + + IPFS Metadata + + + Preparing... + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 116 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 122 + + Preparing... + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 120,121 + + + src/app/pages/nft/pages/nft/nft.page.html + 312,313 + + IPFS Image + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149,150 + + + src/app/pages/nft/pages/new/single/single.page.html + 297,298 + + + src/app/pages/nft/pages/nft/nft.page.html + 15 + + NFT Image + + + Trade info + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 3,5 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 3,4 + + Trade info + + + Floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 12 + + Floor price + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 41 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 40,41 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 101,102 + + + src/app/pages/nft/pages/new/single/single.page.html + 90,91 + + Available On is required. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 50 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 49,50 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 112,113 + + + src/app/pages/nft/pages/new/single/single.page.html + 100,101 + + Available on + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 57 + + Various auction length coming next sprint once community have a vote! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + Duration of auction is 3 days + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 158 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 91,92 + + Once your listing is complete, you will get a confirmation message. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 159 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Confirm listing + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 62,63 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 532,533 + + Open Sale + + + Specific member(s) only (Transfer) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Specific member(s) only (Transfer) + + + Reserve for specific buyer + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 82,83 + + Reserve for specific buyer + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2,4 + + Trade history + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 6,8 + + Item is yours and yours only + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 11 + + This will make your item unavailable for sale. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 12 + + Stop sale! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 16,17 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 31,32 + + List Item for sale + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 86,87 + + Not for sale + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 90,91 + + Fixed price + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 94,95 + + Auction + + + Donut graph coming SOON. + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 40,41 + + Donut graph coming SOON. + + + Commencing + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 5,6 + + Commencing + + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 7,8 + + In-Progress + + + Completed + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 9,10 + + Completed + + + + Share + + src/app/components/share/share.component.html + 5,6 + + + src/app/components/share/share.component.html + 18,19 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 14,15 + + Share + + + Copy to clipboard + + src/app/components/share/share.component.html + 12 + + Copy to clipboard + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 2,3 + + + src/app/pages/award/pages/new/new.page.html + 109,110 + + + src/app/pages/proposal/pages/new/new.page.html + 248,249 + + Space is required. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 11,12 + + Select Space + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 65,67 + + + src/app/pages/award/pages/new/new.page.html + 138,139 + + + src/app/pages/proposal/pages/new/new.page.html + 277,278 + + Select a space + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 14,13 + + All Spaces + + + No Connections + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 2,3 + + No Connections + + + Rep. weight + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 7,8 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 68,69 + + Rep. weight + + + Status + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 8,9 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 72,73 + + Status + + + Established + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 33 + + Established + + + Recognised + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 34 + + Recognised + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 11,12 + + + src/app/pages/member/pages/member/member.page.html + 30 + + Joined + + + members + + src/app/components/space/components/space-card/space-card.component.html + 28 + + + src/app/pages/discover/pages/members/members.page.html + 55,56 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 10,11 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 35,36 + + members + + + Value range is 0-1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 8 + + Value range is 0-1000 + + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 30,31 + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + + Equal + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 39 + + Equal + + + Half + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 40 + + Half + + + Double + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 41 + + Double + + + Earned Badge + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + Earned Badge + + + with + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + with + + + Show less + + src/app/components/timeline-badges/timeline-badges.component.html + 38 + + + src/app/components/timeline-nft/timeline-nft.component.html + 114 + + Show less + + + Show more + + src/app/components/timeline-badges/timeline-badges.component.html + 39 + + + src/app/components/timeline-nft/timeline-nft.component.html + 115 + + Show more + + + Timeline + + src/app/components/timeline-nft/timeline-nft.component.html + 1 + + Timeline + + + Listed by + + src/app/components/timeline-nft/timeline-nft.component.html + 20 + + Listed by + + + Made available for auction by + + src/app/components/timeline-nft/timeline-nft.component.html + 23 + + Made available for auction by + + + Purchased by + + src/app/components/timeline-nft/timeline-nft.component.html + 59 + + Purchased by + + + details + + src/app/components/timeline-nft/timeline-nft.component.html + 61 + + details + + + Invalid + + src/app/components/timeline-nft/timeline-nft.component.html + 73,74 + + Invalid + + + Listed by space + + src/app/components/timeline-nft/timeline-nft.component.html + 104 + + Listed by space + + + Bill (owner) + + src/app/components/timeline-nft/timeline-nft.component.ts + 46 + + Bill (owner) + + + Bill (royalty) + + src/app/components/timeline-nft/timeline-nft.component.ts + 48 + + Bill (royalty) + + + Credit + + src/app/components/timeline-nft/timeline-nft.component.ts + 51 + + Credit + + + Payment + + src/app/components/timeline-nft/timeline-nft.component.ts + 53 + + Payment + + + Order + + src/app/components/timeline-nft/timeline-nft.component.ts + 55 + + Order + + + Generate address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 12,13 + + Generate address + + + Make transaction + + src/app/components/wallet-address/iota-address/iota-address.component.html + 33,34 + + Make transaction + + + Wait for confirmation + + src/app/components/wallet-address/iota-address/iota-address.component.html + 55,56 + + Wait for confirmation + + + Confirmed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 78,79 + + Confirmed + + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/iota-address/iota-address.component.html + 104,105 + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/iota-address/iota-address.component.html + 105 + + space + + + profile + + src/app/components/wallet-address/iota-address/iota-address.component.html + 106 + + profile + + + for future transactions. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 107,108 + + for future transactions. + + + Generate new address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 111 + + Generate new address + + + Send a small + + src/app/components/wallet-address/iota-address/iota-address.component.html + 120 + + Send a small + + + amount to validate your address. This expires in + + src/app/components/wallet-address/iota-address/iota-address.component.html + 121 + + amount to validate your address. This expires in + + + Expired. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 123,124 + + Expired. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 172 + + Wait for transaction to be validated. We will send back your transaction once completed + + + Validating address... + + src/app/components/wallet-address/iota-address/iota-address.component.html + 194 + + Validating address... + + + Now you can deal with NFT`s + + src/app/components/wallet-address/iota-address/iota-address.component.html + 221,222 + + Now you can deal with NFT`s + + + Finish Verification + + src/app/components/wallet-address/iota-address/iota-address.component.html + 225 + + Finish Verification + + + Not verified + + src/app/components/wallet-address/wallet-address.component.html + 4,5 + + Not verified + + + Verify wallet + + src/app/components/wallet-address/wallet-address.component.html + 9,10 + + Verify wallet + + + Verified + + src/app/components/wallet-address/wallet-address.component.html + 18,19 + + Verified + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 43 + + Verify your + + + address + + src/app/components/wallet-address/wallet-address.component.html + 43 + + + src/app/components/wallet-address/wallet-address.component.html + 59 + + address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 59 + + Verify your + + + Detailed Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Detailed Info + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.html + 3,4 + + Badges used / available + + + End Date + + src/app/pages/award/pages/award/award-info/award-info.component.html + 9,10 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 50 + + End Date + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 16 + + Owner + + + Award info + + src/app/pages/award/pages/award/award.page.html + 5,6 + + + src/app/pages/award/pages/new/new.page.html + 17,18 + + Award info + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 81,82 + + + src/app/pages/award/pages/award/award.page.html + 176,177 + + Check out award + + + Approve Award + + src/app/pages/award/pages/award/award.page.html + 91,92 + + Approve Award + + + Approve + + src/app/pages/award/pages/award/award.page.html + 103 + + Approve + + + Decline + + src/app/pages/award/pages/award/award.page.html + 114 + + Decline + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 128,129 + + Confirm your participation + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 136,137 + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 142,143 + + Provide description or link to your work. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 151 + + Submit + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 35 + + + src/app/pages/space/pages/space/space.page.ts + 30 + + Overview + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 94 + + Participants + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2,4 + + New Award + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14,15 + + + src/app/pages/proposal/pages/new/new.page.html + 23,24 + + Title is required. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19,20 + + Title and description will be included on the Award. End date determines the duration of the Award. + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 23,24 + + You must enter name. + + + Title + + src/app/pages/award/pages/new/new.page.html + 28 + + + src/app/pages/proposal/pages/new/new.page.html + 28 + + + src/app/pages/space/pages/upsert/upsert.page.html + 29 + + Title + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 35,36 + + + src/app/pages/proposal/pages/new/new.page.html + 51,52 + + End Date is required. + + + End + + src/app/pages/award/pages/new/new.page.html + 45 + + + src/app/pages/proposal/pages/new/new.page.html + 62 + + End + + + Award description + + src/app/pages/award/pages/new/new.page.html + 55,56 + + Award description + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 66,67 + + Badge definition + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 68,69 + + Title and description will be included on the badge. + + + Badge Title is required. + + src/app/pages/award/pages/new/new.page.html + 73,74 + + Badge Title is required. + + + Badge Title + + src/app/pages/award/pages/new/new.page.html + 78,79 + + Badge Title + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 89,90 + + Badge description + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 103,104 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 363,364 + + + src/app/pages/proposal/pages/new/new.page.html + 242,243 + + Space Info + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 105,106 + + This is the space that will list the award. + + + Reward Info + + src/app/pages/award/pages/new/new.page.html + 155,156 + + Reward Info + + + Defines the amount of XP for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 157,158 + + Defines the amount of XP for each badge and the number of badges available. + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 162,163 + + + src/app/pages/award/pages/new/new.page.html + 182,183 + + Minimum 1 and maximum 10000. + + + Total XP (Max 10000) + + src/app/pages/award/pages/new/new.page.html + 167,168 + + Total XP (Max 10000) + + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + src/app/pages/award/pages/new/new.page.html + 177,178 + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + + Number of Badges + + src/app/pages/award/pages/new/new.page.html + 187,188 + + Number of Badges + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 197,198 + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + + Badge + + src/app/pages/award/pages/new/new.page.html + 206 + + Badge + + + What the badge looks like. + + src/app/pages/award/pages/new/new.page.html + 207,208 + + What the badge looks like. + + + Mint an unique NTT badge. + + src/app/pages/award/pages/new/new.page.html + 216,217 + + Mint an unique NTT badge. + + + Mint Avatar + + src/app/pages/award/pages/new/new.page.html + 225 + + Mint Avatar + + + WOW! Now reward your members with it! + + src/app/pages/award/pages/new/new.page.html + 238,239 + + WOW! Now reward your members with it! + + + Award Setup + + src/app/pages/award/pages/new/new.page.html + 245,246 + + Award Setup + + + Defines who and how can get a badge. + + src/app/pages/award/pages/new/new.page.html + 247,248 + + Defines who and how can get a badge. + + + Guardian approval + + src/app/pages/award/pages/new/new.page.html + 254,255 + + Guardian approval + + + The award must be approved by the guardians of the space before it's active or distributed + + src/app/pages/award/pages/new/new.page.html + 260,261 + + The award must be approved by the guardians of the space before it's active or distributed + + + Discord Activity + + src/app/pages/award/pages/new/new.page.html + 265,266 + + Discord Activity + + + Github Activity + + src/app/pages/award/pages/new/new.page.html + 275,276 + + Github Activity + + + Custom and more + + src/app/pages/award/pages/new/new.page.html + 285,286 + + Custom and more + + + Create award + + src/app/pages/award/pages/new/new.page.html + 310,311 + + Create award + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2,3 + + Award Description + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 39 + + + src/app/pages/award/pages/participants/participants.page.html + 46,47 + + + src/app/pages/proposal/pages/participants/participants.page.html + 24 + + + src/app/pages/proposal/pages/participants/participants.page.html + 31,32 + + Find Participant + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 51 + + + src/app/pages/proposal/pages/participants/participants.page.html + 36 + + + src/app/pages/space/pages/members/members.page.html + 49,50 + + Showing only few top records... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 59 + + + src/app/pages/proposal/pages/participants/participants.page.html + 44 + + No Participants + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 71 + + Reward + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 82 + + Reward again + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 39 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 131 + + + src/app/pages/space/pages/awards/awards.page.ts + 23 + + + src/app/pages/space/pages/collections/collections.page.ts + 23 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 23 + + Pending + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 40 + + Issued + + + Visit website + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 7,8 + + Visit website + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 18,19 + + Who can buy? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 22,23 + + Open sale + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 28,29 + + Space Members Only + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 34,35 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 40,41 + + Space Members with Badge Only + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 46,47 + + Must hold at least one NFT from each selected Collections + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51,52 + + (One NFT per member) + + + The badges you need + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 78 + + The badges you need + + + Resources + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89 + + Resources + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 114 + + Member discounts + + + Discount for members with XP + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 119 + + Discount for members with XP + + + Guardians of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 47 + + Guardians of Space Only + + + Members of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 49 + + Members of Space Only + + + Members With Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 51 + + Members With Badge Only + + + Check out collection + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 72 + + Check out collection + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 3 + + About collection + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 11 + + Limited edition + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 26 + + + src/app/pages/collection/pages/collection/collection.page.html + 118 + + Publish Collection + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 30 + + + src/app/pages/collection/pages/collection/collection.page.html + 122 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 36 + + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Cancel Collection + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 132 + + Edit Collection + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 69,70 + + Royalties goes to + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 79,80 + + Starts at + + + Items + + src/app/pages/collection/pages/collection/collection.page.html + 86,87 + + Items + + + Price starts at + + src/app/pages/collection/pages/collection/collection.page.html + 96,97 + + Price starts at + + + Sale in progress + + src/app/pages/collection/pages/collection/collection.page.html + 104,105 + + Sale in progress + + + remaining + + src/app/pages/collection/pages/collection/collection.page.html + 106,107 + + + src/app/pages/nft/pages/nft/nft.page.html + 86,87 + + remaining + + + Find item + + src/app/pages/collection/pages/collection/collection.page.html + 156 + + + src/app/pages/member/pages/nfts/nfts.page.html + 12 + + Find item + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 166,167 + + + src/app/pages/nft/pages/new/new.page.html + 2,3 + + Create NFT + + + Recent + + src/app/pages/collection/pages/collection/collection.page.html + 192 + + + src/app/pages/collection/pages/collection/collection.page.html + 209 + + + src/app/pages/discover/pages/awards/awards.page.html + 20 + + + src/app/pages/discover/pages/awards/awards.page.html + 31 + + + src/app/pages/discover/pages/collections/collections.page.html + 40 + + + src/app/pages/discover/pages/collections/collections.page.html + 51 + + + src/app/pages/discover/pages/members/members.page.html + 31 + + + src/app/pages/discover/pages/members/members.page.html + 42 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 20 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 31 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 20 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 33 + + + src/app/pages/market/pages/collections/collections.page.html + 154 + + + src/app/pages/market/pages/collections/collections.page.html + 171 + + + src/app/pages/market/pages/nfts/nfts.page.html + 42 + + + src/app/pages/market/pages/nfts/nfts.page.html + 59 + + Recent + + + Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 193 + + + src/app/pages/market/pages/collections/collections.page.html + 155 + + + src/app/pages/market/pages/nfts/nfts.page.html + 43 + + + src/app/pages/market/pages/nfts/nfts.page.html + 60 + + Low to High + + + High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 194 + + + src/app/pages/market/pages/collections/collections.page.html + 156 + + + src/app/pages/market/pages/nfts/nfts.page.html + 44 + + + src/app/pages/market/pages/nfts/nfts.page.html + 61 + + High to Low + + + Sort by + + src/app/pages/collection/pages/collection/collection.page.html + 199 + + + src/app/pages/discover/pages/awards/awards.page.html + 18 + + + src/app/pages/discover/pages/awards/awards.page.html + 24,25 + + + src/app/pages/discover/pages/collections/collections.page.html + 37,38 + + + src/app/pages/discover/pages/collections/collections.page.html + 44,45 + + + src/app/pages/discover/pages/members/members.page.html + 29 + + + src/app/pages/discover/pages/members/members.page.html + 35,36 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 18 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 24,25 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 18 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 24,25 + + + src/app/pages/market/pages/collections/collections.page.html + 152 + + + src/app/pages/market/pages/collections/collections.page.html + 161 + + + src/app/pages/market/pages/nfts/nfts.page.html + 40 + + + src/app/pages/market/pages/nfts/nfts.page.html + 49 + + Sort by + + + Price: Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 210 + + + src/app/pages/market/pages/collections/collections.page.html + 172 + + Price: Low to High + + + Price: High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 211 + + + src/app/pages/market/pages/collections/collections.page.html + 173 + + Price: High to Low + + + No NFTs + + src/app/pages/collection/pages/collection/collection.page.html + 233 + + + src/app/pages/market/pages/nfts/nfts.page.html + 84 + + + src/app/pages/member/pages/nfts/nfts.page.html + 32 + + + src/app/pages/nft/pages/nft/nft.page.html + 375 + + No NFTs + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2,3 + + Create new collection + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3,5 + + Edit collection + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18,19 + + Collection info + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20,21 + + Name and description will be included on the Collection. + + + Name + + src/app/pages/collection/pages/upsert/upsert.page.html + 30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 70,71 + + + src/app/pages/nft/pages/new/single/single.page.html + 26 + + Name + + + Description + + src/app/pages/collection/pages/upsert/upsert.page.html + 40,41 + + + src/app/pages/nft/pages/new/single/single.page.html + 36,37 + + Description + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 53,54 + + + src/app/pages/nft/pages/new/single/single.page.html + 49,50 + + Sales info + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 55,56 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 118 + + Royalty + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 120 + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 131,132 + + Royalties - Percentage fee + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 141,142 + + Example: 10 % , 20 % , etc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 150 + + Royalties goes to a different space + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 158,159 + + Royalties goes to a different space + + + Links + + src/app/pages/collection/pages/upsert/upsert.page.html + 181 + + Links + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 182,183 + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 187,188 + + Invalid URL. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 213,214 + + Link to your Twitter account + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 226,227 + + Invalid Discord username. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 233,234 + + Link to your Discord account + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 248,249 + + Discounts + + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + src/app/pages/collection/pages/upsert/upsert.page.html + 250,251 + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 298 + + Discount + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 311 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + Discount Amount + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 350,351 + + Add discount level + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 365,366 + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 383,384 + + Collection Type + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 385,386 + + Each type has different characteristics. This cannot be changed after creation. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 417 + + + src/app/pages/space/pages/upsert/upsert.page.html + 192 + + Banner + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 443 + + Banner is required. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + Placeholder + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 478 + + Placeholder is required. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 488,489 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 501,502 + + + src/app/pages/market/pages/collections/collections.page.html + 132,133 + + + src/app/pages/market/pages/collections/collections.page.html + 137,138 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 116,117 + + Category + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 490,491 + + Category is used when filtering content. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 494,495 + + Category. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 519,520 + + Collection Setup + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 521,522 + + Who has access to a given collection. + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 537,538 + + Everyone has access to this collection. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 547,548 + + Only Space Guardians can access. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 558,559 + + Only Space Members can access. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 569,570 + + Only Space Members with badge can access. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 585,586 + + Collection Options + + + Limited Edition + + src/app/pages/collection/pages/upsert/upsert.page.html + 590 + + Limited Edition + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 606 + + One NFT per Member Only + + + Select Collections + + src/app/pages/collection/pages/upsert/upsert.page.html + 629,630 + + Select Collections + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 677,678 + + Create collection + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 690,691 + + Save collection + + + Member seems to log out during the file upload request. + + src/app/pages/collection/pages/upsert/upsert.page.ts + 317 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 195 + + + src/app/pages/nft/pages/new/single/single.page.ts + 154 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 107 + + Member seems to log out during the file upload request. + + + My Overview + + src/app/pages/dashboard/dashboard.page.html + 2,3 + + My Overview + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 6,7 + + Pending Membership Requests + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 14,15 + + Your spaces + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 23 + + No Spaces yet + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 25,26 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 36,37 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 48,49 + + Active proposals + + + Oldest + + src/app/pages/discover/pages/awards/awards.page.html + 21 + + + src/app/pages/discover/pages/awards/awards.page.html + 32 + + + src/app/pages/discover/pages/collections/collections.page.html + 41 + + + src/app/pages/discover/pages/collections/collections.page.html + 52 + + + src/app/pages/discover/pages/members/members.page.html + 32 + + + src/app/pages/discover/pages/members/members.page.html + 43 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 21 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 32 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 21 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 34 + + Oldest + + + No Awards + + src/app/pages/discover/pages/awards/awards.page.html + 54 + + + src/app/pages/member/pages/awards/awards.page.html + 19 + + + src/app/pages/space/pages/awards/awards.page.html + 35 + + No Awards + + + collections + + src/app/pages/discover/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 185,186 + + collections + + + No Collections + + src/app/pages/discover/pages/collections/collections.page.html + 75 + + + src/app/pages/space/pages/collections/collections.page.html + 38 + + No Collections + + + Discover Soonaverse + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Discover Soonaverse + + + Enter the first few letters to search... + + src/app/pages/discover/pages/discover/discover.page.html + 7 + + Enter the first few letters to search... + + + Spaces + + src/app/pages/discover/pages/discover/discover.page.ts + 21 + + + src/app/pages/member/pages/member/member.page.ts + 29 + + Spaces + + + Collections + + src/app/pages/discover/pages/discover/discover.page.ts + 22 + + + src/app/pages/market/pages/market/market.page.ts + 23 + + + src/app/pages/space/pages/space/space.page.ts + 31 + + Collections + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 24 + + + src/app/pages/space/pages/space/space.page.ts + 32 + + Proposals + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 25 + + + src/app/pages/space/pages/space/space.page.ts + 34 + + Members + + + Include connections + + src/app/pages/discover/pages/members/members.page.html + 23,24 + + + src/app/pages/member/pages/activity/activity.page.html + 28,29 + + + src/app/pages/member/pages/spaces/member-spaces.component.html + 5,6 + + Include connections + + + (Select some space) + + src/app/pages/discover/pages/members/members.page.html + 24 + + + src/app/pages/member/pages/activity/activity.page.html + 29 + + (Select some space) + + + No Members + + src/app/pages/discover/pages/members/members.page.html + 66 + + + src/app/pages/space/pages/members/members.page.html + 58 + + No Members + + + proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 43,44 + + proposals + + + No Proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 55 + + + src/app/pages/space/pages/proposals/proposals.page.html + 35 + + No Proposals + + + No Spaces + + src/app/pages/discover/pages/spaces/spaces.page.html + 56 + + No Spaces + + + Open + + src/app/pages/discover/pages/spaces/spaces.page.ts + 29 + + Open + + + Welcome to The Soonaverse + + src/app/pages/home/home.page.html + 5,6 + + Welcome to The Soonaverse + + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + src/app/pages/home/home.page.html + 8,9 + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + + Join Us + + src/app/pages/home/home.page.html + 19,20 + + Join Us + + + Marketplace + + src/app/pages/home/home.page.html + 31 + + Marketplace + + + See Docs + + src/app/pages/home/home.page.html + 43,44 + + See Docs + + + Get started with the Soonaverse + + src/app/pages/home/home.page.html + 52,53 + + Get started with the Soonaverse + + + Not sure where to start? Find featured spaces and NFT Collections below. + + src/app/pages/home/home.page.html + 54 + + Not sure where to start? Find featured spaces and NFT Collections below. + + + Trending Collections + + src/app/pages/home/home.page.html + 60,61 + + Trending Collections + + + Go to Marketplace + + src/app/pages/home/home.page.html + 70 + + Go to Marketplace + + + Discover more + + src/app/pages/home/home.page.html + 86 + + + src/app/pages/home/home.page.html + 102 + + + src/app/pages/home/home.page.html + 122 + + Discover more + + + Popular spaces + + src/app/pages/home/home.page.html + 92,93 + + Popular spaces + + + Creating your community is easy as 1-2-3 + + src/app/pages/home/home.page.html + 130,131 + + Creating your community is easy as 1-2-3 + + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + src/app/pages/home/home.page.html + 132,133 + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + + StepArticle image + + src/app/pages/home/home.page.html + 143,144 + + StepArticle image + + + Voting is essential and it needs to be on-chain and FREE. + + src/app/pages/home/home.page.html + 162 + + Voting is essential and it needs to be on-chain and FREE. + + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + src/app/pages/home/home.page.html + 165,167 + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + + Go there now + + src/app/pages/home/home.page.html + 177 + + Go there now + + + Want to learn more about SoonLabs? + + src/app/pages/home/home.page.html + 202,203 + + Want to learn more about SoonLabs? + + + Visit YouTube + + src/app/pages/home/home.page.html + 213 + + Visit YouTube + + + Who’s using the Soonaverse? + + src/app/pages/home/home.page.html + 222,224 + + Who’s using the Soonaverse? + + + Investors + + src/app/pages/home/home.page.html + 275,276 + + Investors + + + Privacy + + src/app/pages/home/home.page.html + 285,286 + + Privacy + + + Terms + + src/app/pages/home/home.page.html + 295,296 + + Terms + + + Powered by SoonLabs + + src/app/pages/home/home.page.html + 306,307 + + + src/app/pages/home/home.page.html + 318,319 + + Powered by SoonLabs + + + Create your community + + src/app/pages/home/home.page.ts + 33,31 + + Create your community + + + Feeless, secure, on-chain voting, and “one click” creation tools. + + src/app/pages/home/home.page.ts + 34 + + Feeless, secure, on-chain voting, and “one click” creation tools. + + + Build reputation and rewards + + src/app/pages/home/home.page.ts + 38,36 + + Build reputation and rewards + + + Create incentives and build reputation, trust and community engagement. + + src/app/pages/home/home.page.ts + 39 + + Create incentives and build reputation, trust and community engagement. + + + Manage, Maintain, Grow + + src/app/pages/home/home.page.ts + 43,41 + + Manage, Maintain, Grow + + + Governance, voting, for both public and private communities. + + src/app/pages/home/home.page.ts + 44 + + Governance, voting, for both public and private communities. + + + NFTs + + src/app/pages/market/pages/collections/collections.page.html + 12,13 + + + src/app/pages/market/pages/nfts/nfts.page.html + 13,14 + + + src/app/pages/member/pages/member/member.page.ts + 30 + + NFTs + + + Select Access type + + src/app/pages/market/pages/collections/collections.page.html + 20,21 + + Select Access type + + + All accesses + + src/app/pages/market/pages/collections/collections.page.html + 25,26 + + + src/app/pages/market/pages/collections/collections.page.html + 32,33 + + + src/app/pages/market/pages/collections/collections.page.html + 111 + + All accesses + + + Open sale + + src/app/pages/market/pages/collections/collections.page.html + 38,39 + + + src/app/pages/market/pages/collections/collections.page.html + 45,46 + + + src/app/pages/market/pages/collections/collections.page.html + 112 + + Open sale + + + Space members only + + src/app/pages/market/pages/collections/collections.page.html + 51,52 + + + src/app/pages/market/pages/collections/collections.page.html + 58,59 + + + src/app/pages/market/pages/collections/collections.page.html + 113 + + Space members only + + + Space guardians only + + src/app/pages/market/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 71,72 + + + src/app/pages/market/pages/collections/collections.page.html + 114 + + Space guardians only + + + Space members with badge only + + src/app/pages/market/pages/collections/collections.page.html + 77,78 + + + src/app/pages/market/pages/collections/collections.page.html + 84,85 + + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Space members with badge only + + + At least one NFT from collections + + src/app/pages/market/pages/collections/collections.page.html + 90,91 + + + src/app/pages/market/pages/collections/collections.page.html + 97,98 + + + src/app/pages/market/pages/collections/collections.page.html + 116 + + At least one NFT from collections + + + No collections + + src/app/pages/market/pages/collections/collections.page.html + 196 + + No collections + + + Marketplace + + src/app/pages/market/pages/market/market.page.html + 2,4 + + Marketplace + + + Spaces, awards, proposals or members... + + src/app/pages/market/pages/market/market.page.html + 7 + + Spaces, awards, proposals or members... + + + NFT's + + src/app/pages/market/pages/market/market.page.ts + 24 + + NFT's + + + On Auction + + src/app/pages/market/pages/nfts/nfts.page.ts + 40,37 + + On Auction + + + Owned + + src/app/pages/market/pages/nfts/nfts.page.ts + 41 + + + src/app/pages/nft/pages/nft/nft.page.html + 6,7 + + Owned + + + View space + + src/app/pages/member/pages/activity/activity.page.html + 20,21 + + View space + + + Awards Completed + + src/app/pages/member/pages/activity/activity.page.html + 37 + + Awards Completed + + + Total Reputation + + src/app/pages/member/pages/activity/activity.page.html + 39 + + Total Reputation + + + Earned badges + + src/app/pages/member/pages/activity/activity.page.html + 47 + + Earned badges + + + More + + src/app/pages/member/pages/activity/activity.page.html + 51,52 + + More + + + Reputation + + src/app/pages/member/pages/activity/activity.page.html + 72,73 + + Reputation + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 6,7 + + Pending + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + Issued + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 21,22 + + Discover Awards + + + No Badges yet + + src/app/pages/member/pages/badges/badges.page.html + 19,20 + + No Badges yet + + + Discover Badges + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Discover Badges + + + My profile + + src/app/pages/member/pages/member/member.page.html + 9 + + My profile + + + Profile + + src/app/pages/member/pages/member/member.page.html + 10 + + Profile + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 15,16 + + Profile info + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 26 + + Activity + + + Badges + + src/app/pages/member/pages/member/member.page.ts + 28 + + Badges + + + (Join space with alliance) + + src/app/pages/member/pages/spaces/member-spaces.component.html + 6 + + (Join space with alliance) + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 44,45 + + Some files have not been uploaded + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 48,49 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 57 + + Uploaded CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 69,70 + + Filename + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 92,93 + + Error + + + Select collection + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 123,124 + + + src/app/pages/nft/pages/new/single/single.page.html + 349,350 + + Select collection + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136,137 + + Upload existing CSV + + + Upload back once you generate bellow + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138,139 + + Upload back once you generate bellow + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 166 + + You have to upload images first. + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 191,192 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Single + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Multiple + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14,15 + + NFT info + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16,17 + + Name and description will be included on the NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 21,22 + + Name is required. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 32,33 + + Description is required. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 51,52 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + + Properties + + src/app/pages/nft/pages/new/single/single.page.html + 111,112 + + Properties + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 113,114 + + Properties show up underneath your item. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 120,121 + + Property name (E.g. Character) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 121,122 + + Value (E.g. Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 133,134 + + + src/app/pages/nft/pages/new/single/single.page.html + 166,168 + + + src/app/pages/nft/pages/new/single/single.page.html + 173,174 + + Property name + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 144 + + + src/app/pages/nft/pages/new/single/single.page.html + 178,180 + + + src/app/pages/nft/pages/new/single/single.page.html + 186 + + + src/app/pages/nft/pages/new/single/single.page.html + 236 + + + src/app/pages/nft/pages/new/single/single.page.html + 270,272 + + + src/app/pages/nft/pages/new/single/single.page.html + 276 + + Value + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 159 + + Property + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 196,197 + + Add property + + + Stats + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Stats + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 205,206 + + Stats show up underneath your item. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 212,213 + + Stats name (E.g. Stamina) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 213,214 + + Value (E.g. 10, 1/10 , etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 225,226 + + + src/app/pages/nft/pages/new/single/single.page.html + 258,260 + + + src/app/pages/nft/pages/new/single/single.page.html + 265,266 + + Stat name + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 251 + + Stat + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287,288 + + Add stat + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 299,300 + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 324 + + Media is required + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 338,339 + + Select one of your collections to display this NFT. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 371,372 + + Create NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 381,382 + + Preview NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 142 + + File name is not valid + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 4,5 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 248,249 + + Check out nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 58 + + Current highest bid + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 94 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 102 + + Sale hasn't started yet + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 110 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 118 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 123,124 + + Sell NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 124,125 + + Change Fixed Price + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 125,126 + + Change Auction + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + Place bid + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 138 + + Buy now + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 151,152 + + Current Bids + + + My Bids + + src/app/pages/nft/pages/nft/nft.page.html + 155,156 + + My Bids + + + My Transactions + + src/app/pages/nft/pages/nft/nft.page.html + 159,160 + + My Transactions + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 168,169 + + Member + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 169,170 + + Bidded on + + + Date + + src/app/pages/nft/pages/nft/nft.page.html + 202,203 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 8,9 + + Date + + + Type + + src/app/pages/nft/pages/nft/nft.page.html + 203,204 + + Type + + + On-Chain Record + + src/app/pages/nft/pages/nft/nft.page.html + 276,277 + + On-Chain Record + + + Preparing... + + src/app/pages/nft/pages/nft/nft.page.html + 277,278 + + Preparing... + + + View + + src/app/pages/nft/pages/nft/nft.page.html + 280,281 + + + src/app/pages/nft/pages/nft/nft.page.html + 308,309 + + + src/app/pages/nft/pages/nft/nft.page.html + 315,316 + + View + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 285,286 + + View all of the transaction details of this NFT on the Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 340,341 + + About the collection + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 343,344 + + Show + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 344 + + collection + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 353,355 + + by + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2,4 + + New Proposal + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17,18 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 5,6 + + Proposal info + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19,20 + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 35,36 + + Start Date is required. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 45 + + Start + + + Commencing milestone. + + src/app/pages/proposal/pages/new/new.page.html + 69,70 + + Commencing milestone. + + + Commencing milestone + + src/app/pages/proposal/pages/new/new.page.html + 76,77 + + Commencing milestone + + + Start milestone. + + src/app/pages/proposal/pages/new/new.page.html + 83,84 + + Start milestone. + + + Start milestone + + src/app/pages/proposal/pages/new/new.page.html + 90,91 + + Start milestone + + + End milestone. + + src/app/pages/proposal/pages/new/new.page.html + 97,98 + + End milestone. + + + End milestone + + src/app/pages/proposal/pages/new/new.page.html + 104,105 + + End milestone + + + Proposal description is required. + + src/app/pages/proposal/pages/new/new.page.html + 112,113 + + Proposal description is required. + + + Proposal description + + src/app/pages/proposal/pages/new/new.page.html + 117,118 + + Proposal description + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 127,128 + + Question Info + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 129,130 + + Title and description will only be displayed for this question. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 136,137 + + Question Title is required. + + + Question Title + + src/app/pages/proposal/pages/new/new.page.html + 140,141 + + Question Title + + + Question description + + src/app/pages/proposal/pages/new/new.page.html + 152,153 + + Question description + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 178,179 + + Text and description for each individual answer. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 183,184 + + Answer Text is required. + + + Answer Text + + src/app/pages/proposal/pages/new/new.page.html + 187,188 + + Answer Text + + + Answer description + + src/app/pages/proposal/pages/new/new.page.html + 198,199 + + Answer description + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 233,234 + + Add Choice + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 244,245 + + This is the space that will list the proposal. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 292,293 + + Proposal Setup + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 294,295 + + Defines who has access to the proposal and what is the voting method. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 299 + + Target Participants + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 306,307 + + All Guardians + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 312,313 + + Only guardians can vote on this proposal + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 316,317 + + All Members + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 322,323 + + All members can vote on this proposal + + + IOTA Token Holders + + src/app/pages/proposal/pages/new/new.page.html + 327,328 + + IOTA Token Holders + + + All IOTA token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 333,334 + + All IOTA token holders can vote. + + + Voting Type + + src/app/pages/proposal/pages/new/new.page.html + 341 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 55 + + Voting Type + + + Member - One Vote + + src/app/pages/proposal/pages/new/new.page.html + 348,349 + + Member - One Vote + + + Each member of the space gets one vote + + src/app/pages/proposal/pages/new/new.page.html + 354,355 + + Each member of the space gets one vote + + + XP Reputation - Space + + src/app/pages/proposal/pages/new/new.page.html + 362,363 + + XP Reputation - Space + + + Votes are weighted based on total amount of XP a member has in the space + + src/app/pages/proposal/pages/new/new.page.html + 368,369 + + Votes are weighted based on total amount of XP a member has in the space + + + XP Reputation - Space + Connection + + src/app/pages/proposal/pages/new/new.page.html + 378,379 + + XP Reputation - Space + Connection + + + Votes are weighted based on total amount of XP a member has in the space & connections + + src/app/pages/proposal/pages/new/new.page.html + 384,385 + + Votes are weighted based on total amount of XP a member has in the space & connections + + + XP Reputation - Selected Badges + + src/app/pages/proposal/pages/new/new.page.html + 394,395 + + XP Reputation - Selected Badges + + + Votes are weighted based on total amount of XP a member has for selected badges + + src/app/pages/proposal/pages/new/new.page.html + 400,401 + + Votes are weighted based on total amount of XP a member has for selected badges + + + Reputation Options + + src/app/pages/proposal/pages/new/new.page.html + 412,413 + + Reputation Options + + + Set Minimum Weight + + src/app/pages/proposal/pages/new/new.page.html + 423,424 + + Set Minimum Weight + + + Select Badge + + src/app/pages/proposal/pages/new/new.page.html + 438,439 + + Select Badge + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 465,466 + + Create Proposal + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 322 + + Choice + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + badge + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 2,3 + + Final Results + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 58,59 + + Proposal Description + + + Voted + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 3,4 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 38 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 129 + + Voted + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 4,5 + + Vote Now + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 5 + + Voting starts + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 9 + + You are not part of the vote + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 12 + + In order to vote, you must be part of the space before proposal was created. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 18 + + Log in to vote + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 21 + + In order to vote, you must login first. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 27 + + Pending Guardian Approval + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 30 + + This proposal has not been approved by any Guardian yet. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 52 + + Weight + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 37 + + Pending Vote + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 124 + + joined soonaverse on + + + Voter + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 7,8 + + Voter + + + Option + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 9,10 + + Option + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 26 + + Approve + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 28 + + Decline + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 34,35 + + Current Milestone + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 39 + + Commence Date + + + Start Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 45 + + Start Date + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 56 + + Voting Type of this proposal. + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 60 + + Total Weight + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 61 + + Total weight within this proposal for all participants. + + + Export to JSON + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 65,67 + + Export to JSON + + + Cast your vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 50,51 + + Cast your vote + + + Open Firefly to Vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 53 + + Open Firefly to Vote + + + Voting instructions + + src/app/pages/proposal/pages/proposal/proposal.page.html + 55 + + Voting instructions + + + You will select your options and execute the vote within Firefly. + + src/app/pages/proposal/pages/proposal/proposal.page.html + 57,58 + + You will select your options and execute the vote within Firefly. + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 64,65 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 117,118 + + Check out proposal + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 70,71 + + Current Results + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 91 + + Selected Badges + + + New + + src/app/pages/space/pages/awards/awards.page.html + 23,24 + + + src/app/pages/space/pages/collections/collections.page.html + 25,26 + + + src/app/pages/space/pages/proposals/proposals.page.html + 23,24 + + New + + + award + + src/app/pages/space/pages/awards/awards.page.html + 24 + + award + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 24 + + + src/app/pages/space/pages/members/members.page.html + 24 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 24 + + Active + + + Active + + src/app/pages/space/pages/members/members.page.html + 9 + + Active + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 18 + + Blocked + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 28 + + Blocked + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 35 + + + src/app/pages/space/pages/members/members.page.html + 43,44 + + Find Member + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 63 + + joined space on + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 78,79 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 81,82 + + Make Guardian + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 84,86 + + Accept Member + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 89,91 + + Block Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 91,93 + + Unblock Member + + + Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 3,5 + + Active Proposals + + + No Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 11 + + No Active Proposals + + + Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 24,26 + + Active Awards + + + No Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 32 + + No Active Awards + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 24 + + proposal + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 21,22 + + Check out space + + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 53,54 + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + + Show All + + src/app/pages/space/pages/space/space-about/space-about.component.html + 59,60 + + Show All + + + Connected spaces that you recognize + + src/app/pages/space/pages/space/space-about/space-about.component.html + 65,66 + + Connected spaces that you recognize + + + New connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 76,77 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 88 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 117 + + New connection + + + connections + + src/app/pages/space/pages/space/space-about/space-about.component.html + 104 + + connections + + + Close + + src/app/pages/space/pages/space/space-about/space-about.component.html + 120 + + Close + + + New + + src/app/pages/space/pages/space/space-about/space-about.component.html + 132 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 169 + + New + + + Edit + + src/app/pages/space/pages/space/space-about/space-about.component.html + 133 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 170 + + Edit + + + connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 134,135 + + connection + + + Form a connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 148 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Form a connection + + + Save + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 181 + + Save + + + Terminate alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 159,160 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 190,191 + + Terminate alliance + + + alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 171,172 + + alliance + + + Space's Wallet Address + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201,202 + + Space's Wallet Address + + + Wallet to hold funds for the Space. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 203,204 + + Wallet to hold funds for the Space. + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 252,253 + + Leave Space + + + About space + + src/app/pages/space/pages/space/space.page.html + 5,6 + + About space + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 53 + + + src/app/pages/space/pages/space/space.page.html + 113,114 + + Join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 77 + + + src/app/pages/space/pages/space/space.page.html + 139 + + Edit Space + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2,3 + + Add new space + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3,4 + + Edit space + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17,18 + + Space info + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19,20 + + Title and description will be included on the Space. + + + Space description + + src/app/pages/space/pages/upsert/upsert.page.html + 39,40 + + Space description + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 54,55 + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 100,101 + + Only discord invite code supported (i.e. RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 107,108 + + Type your Discord invite code + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 128,129 + + Space Type + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 130,131 + + Each type has different characteristics. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 139,140 + + Open for anyone to join instantly + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 143,144 + + Requires a member approval + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 163,164 + + Avatar is mandatory + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 236,237 + + Create space + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 249,250 + + Save space + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Upload new to replace existing. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + Your brand is key. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Make it personal. + + + + diff --git a/src/locale/messages.it-IT.xlf b/src/locale/messages.it-IT.xlf new file mode 100644 index 0000000..2ec3b3c --- /dev/null +++ b/src/locale/messages.it-IT.xlf @@ -0,0 +1,13269 @@ + + + + + + Top Members + + src/app/@core/services/filter-storage/filter-storage.service.ts + 97 + + Top Membri + + + Recent + + src/app/@core/services/filter-storage/filter-storage.service.ts + 98 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 116 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 133 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 147 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 165 + + Ordine cronologico crescente + + + Oldest + + src/app/@core/services/filter-storage/filter-storage.service.ts + 99 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 117 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 134 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 148 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 166 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 188 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 209 + + Ordine cronologico decrescente + + + Ending Soon + + src/app/@core/services/filter-storage/filter-storage.service.ts + 115 + + Termina A Breve + + + Ending SOON + + src/app/@core/services/filter-storage/filter-storage.service.ts + 164 + + Ending SOON + + + Available Date + + src/app/@core/services/filter-storage/filter-storage.service.ts + 182 + + Periodo di Disponibilità + + + Recently Created + + src/app/@core/services/filter-storage/filter-storage.service.ts + 183 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 208 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 57 + + NFT di Nuova Creazione + + + Price: Low to High + + src/app/@core/services/filter-storage/filter-storage.service.ts + 184 + + Prezzo: dal Più Basso al Più Alto + + + Price: High to Low + + src/app/@core/services/filter-storage/filter-storage.service.ts + 185 + + Prezzo: dal Più Alto al Più Basso + + + Top Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 186 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 206 + + Più Scambiati + + + Recently Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 187 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 207 + + Scambi Recenti + + + Public Vote + + src/app/@core/services/filter-storage/filter-storage.service.ts + 202 + + Voto Pubblico + + + Community Rank + + src/app/@core/services/filter-storage/filter-storage.service.ts + 203 + + Classifica Mondiale della Community + + + SOON on Sale + + src/app/@core/services/filter-storage/filter-storage.service.ts + 204 + + SOON on Sale + + + Recently Minted + + src/app/@core/services/filter-storage/filter-storage.service.ts + 205 + + Coniati di recente + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 74 + + Indietro + + + Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products. + + src/app/@core/services/seo/seo.service.ts + 7 + + Soonaverse è una piattaforma comunitaria che si appoggia alla struttura della rete IOTA e il suo obiettivo è quello di consentire ai suoi membri di creare e gestire gratuitamente organizzazioni autonome decentralizzate (DAO), NFT, progetti, nonché aziende e mercati. Ogni organizzazione potrà lanciare il proprio progetto e detenere le proprie attività liquide attraverso i nostri prodotti quali il Launchpad, la piattaforma di Scambio di Token e il Marketplace. + + + Bill Payment + + src/app/@core/services/transaction/transaction.service.ts + 18 + + Pagamento della Fattura + + + Bill (royalty) + + src/app/@core/services/transaction/transaction.service.ts + 20 + + Conto (compenso) + + + Credit + + src/app/@core/services/transaction/transaction.service.ts + 26 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 336 + + Credito + + + Payment + + src/app/@core/services/transaction/transaction.service.ts + 28 + + Pagamento + + + Credit NFT + + src/app/@core/services/transaction/transaction.service.ts + 30 + + Accredita l'NFT + + + Mint Collection + + src/app/@core/services/transaction/transaction.service.ts + 32 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 36 + + Mint Collection + + + Mint Token + + src/app/@core/services/transaction/transaction.service.ts + 34 + + + src/app/pages/space/pages/manage/manage.page.html + 116 + + Mint di Token + + + Withdraw Asset + + src/app/@core/services/transaction/transaction.service.ts + 36 + + Ritiro Crypto-Asset + + + Unlock + + src/app/@core/services/transaction/transaction.service.ts + 38 + + Attiva + + + Vote + + src/app/@core/services/transaction/transaction.service.ts + 40 + + Vota + + + Order + + src/app/@core/services/transaction/transaction.service.ts + 42 + + Ordine + + + (Mint Alias) + + src/app/@core/services/transaction/transaction.service.ts + 49 + + (Mint Alias) + + + (Mint NFTs) + + src/app/@core/services/transaction/transaction.service.ts + 51 + + (Mint NFT) + + + (Mint Foundry) + + src/app/@core/services/transaction/transaction.service.ts + 53 + + (Mint Foundry) + + + (Send Alias to Guardian) + + src/app/@core/services/transaction/transaction.service.ts + 55 + + (Invia Alias al Guardiano) + + + (Lock Collection) + + src/app/@core/services/transaction/transaction.service.ts + 57 + + (Vincola la Collezione) + + + Discover + + src/app/@shell/ui/header/header.component.html + 76 + + + src/app/components/auth/services/auth.service.ts + 83 + + Scoprire + + + Create new + + src/app/@shell/ui/header/header.component.html + 91 + + Crea nuovo + + + Space + + src/app/@shell/ui/header/header.component.html + 97 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100 + + + src/app/pages/collection/pages/collection/collection.page.html + 110 + + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 206,205 + + + src/app/pages/token/pages/new/summary/summary.component.html + 242,241 + + Spazio + + + Proposal + + src/app/@shell/ui/header/header.component.html + 103 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 29 + + Offerta + + + Award + + src/app/@shell/ui/header/header.component.html + 106 + + + src/app/pages/award/pages/award/award.page.html + 29 + + + src/app/pages/award/pages/award/award.page.ts + 100 + + Premio + + + Collection + + src/app/@shell/ui/header/header.component.html + 110 + + + src/app/@shell/ui/header/header.component.html + 129 + + + src/app/pages/collection/pages/collection/collection.page.html + 37 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136 + + + src/app/pages/nft/pages/new/single/single.page.html + 346 + + + src/app/pages/space/pages/collections/collections.page.html + 49 + + Collezione + + + Token + + src/app/@shell/ui/header/header.component.html + 113 + + + src/app/@shell/ui/header/header.component.html + 132 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 321 + + + src/app/pages/token/pages/token/token.page.html + 29 + + + src/app/pages/token/pages/token/token.page.ts + 99 + + + src/app/pages/token/pages/trade/trade.page.ts + 274 + + Token + + + To unlock more features you have to stake SOON token. + + src/app/@shell/ui/header/header.component.html + 124,126 + + Fai staking con token SOON per sbloccare più funzionalità. + + + VIP LEVEL + + src/app/@shell/ui/header/header.component.html + 197,198 + + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 37,38 + + + src/app/pages/member/pages/activity/activity.page.html + 146,147 + + LIVELLO VIP + + + None. + + src/app/@shell/ui/header/header.component.html + 232 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 77 + + Non ci sono risultati. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 240 + + + src/app/components/auth/services/auth.service.ts + 551 + + Il mio profilo + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 265,266 + + Il processo di acquisto non è stato completato + + + You have + + src/app/@shell/ui/header/header.component.html + 270 + + Hai a disposizione + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 272 + + per completare la transazione + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 282,283 + + Apri la Procedura di Verifica + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 334 + + Hai vinto l'NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 335 + + Congratulazioni! Sei il felice proprietario di un nuovo NFT! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 342 + + Il prezzo bid proposto è stato superato! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 343 + + Il prezzo bid proposto su + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 344 + + è stato superato. Riprova! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 351 + + appena offerto + + + for + + src/app/@shell/ui/header/header.component.ts + 352 + + + src/app/components/timeline/timeline.component.html + 171 + + per + + + Your + + src/app/@shell/ui/header/header.component.ts + 353 + + Il tuo + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 354 + + ha ricevuto un nuovo prezzo bid per + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 377 + + Non supportato + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 378 + + Questa notifica non è ancora supportata nella tua lingua + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27,28 + + Spazio + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 38,39 + + Offerta + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 49,50 + + Premio + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 60,61 + + Collezione + + + Token + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 70,71 + + Token + + + Stake more SOON to create tokens and collections. + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 81,84 + + Fai staking con un numero maggiore di token SOON, in modo da poter creare collezioni di token. + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 57,58 + + Collegati al tuo wallet selezionando MetaMask + + + Connect via TanglePay + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 73 + + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 47 + + Accedi via TanglePay + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 97 + + Disconnettersi + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 103 + + Alimentato da + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8 + + Spiacente, la pagina che stai cercando non è stata trovata + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 9,11 + + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Scoprire Soonaverse + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 19 + + Stato della rete + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 30,31 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 84,85 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 140,141 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 197,198 + + Stato della rete + + + Operational + + src/app/@shell/ui/sider/network-status/network-status.component.html + 36 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 90 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 146 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 203 + + Operativa + + + Degraded Performance + + src/app/@shell/ui/sider/network-status/network-status.component.html + 43 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 97 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 153 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 210 + + Degradazione delle Prestazioni + + + Down + + src/app/@shell/ui/sider/network-status/network-status.component.html + 50 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 104 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 160 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 217 + + Flusso di Dati a Velocità Inferiore + + + Last milestone + + src/app/@shell/ui/sider/network-status/network-status.component.html + 57,58 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 111,112 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 170,171 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 224,225 + + Ultima disaggregazione + + + Devnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 78,79 + + + src/app/components/network/components/select-network/select-network.component.html + 61,63 + + Devnet + + + Shimmer Mainnet Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 132,133 + + Shimmer Mainnet Coming SOON + + + Testnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 191,192 + + + src/app/components/network/components/select-network/select-network.component.html + 33,35 + + Testnet + + + Assembly + + src/app/@shell/ui/sider/network-status/network-status.component.html + 237 + + Aggregazione + + + Assembly Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 244,245 + + Assembly Coming SOON + + + Shimmer EVM Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 266,267 + + Shimmer EVM Coming SOON + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 48 + + Vedi Documenti + + + Show more + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 47 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 27 + + + src/app/components/timeline/timeline.component.html + 304 + + Mostra di più + + + Show less + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 48 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 28 + + + src/app/components/timeline/timeline.component.html + 303 + + Mostra meno + + + Search here... + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 50 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 30 + + Clicca qui per effettuare la ricerca... + + + Reset + + + src/app/components/algolia/algolia-clear/algolia-clear.component.html + 5,7 + + Reinizializzazione + + + + Search + + src/app/components/algolia/search/search.component.html + 20,19 + + + src/app/components/collection/components/select-collection/select-collection.component.html + 95,94 + + + src/app/components/space/components/select-space/select-space.component.html + 95,94 + + Cerca + + + Start typing... + + src/app/components/algolia/search/search.component.html + 36 + + Iniziare a digitare... + + + Open + + src/app/components/algolia/services/algolia.service.ts + 32 + + Aprire + + + Guardians of Space Only + + src/app/components/algolia/services/algolia.service.ts + 34 + + Solo Guardiani dello Spazio + + + Members of Space Only + + src/app/components/algolia/services/algolia.service.ts + 36 + + Solo i Membri dello Spazio + + + Members With Badge Only + + src/app/components/algolia/services/algolia.service.ts + 38 + + Solo Membri Con Badge + + + Members With NFT only + + src/app/components/algolia/services/algolia.service.ts + 40 + + Solo Membri Con NFT + + + Unavailable for sale + + src/app/components/algolia/services/algolia.service.ts + 53 + + Non disponibile alla vendita + + + On Auction + + src/app/components/algolia/services/algolia.service.ts + 55 + + Vendita all'Asta + + + Available + + src/app/components/algolia/services/algolia.service.ts + 57 + + + src/app/components/award/components/award-status/award-status.component.html + 23 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 61 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 162 + + + src/app/pages/space/pages/collections/collections.page.ts + 31 + + + src/app/pages/token/pages/token/token.page.ts + 256 + + Disponibile + + + On Sale + + src/app/components/algolia/services/algolia.service.ts + 59 + + In Vendita + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 19 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23 + + Collegati al tuo portafoglio Metamask + + + TanglePay + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 43 + + TanglePay + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 67 + + Verifica che la rete selezionata sia la rete pubblica IOTA compatibile EVM, in MetaMask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 69 + + Nome della rete: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 70 + + RPC URL: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 71 + + Catena ID: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 89,90 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 120,121 + + Annulla + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 8,10 + + Accedi + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Scollegare + + + Staking + + src/app/components/auth/services/auth.service.ts + 90 + + Staking + + + Tokens + + src/app/components/auth/services/auth.service.ts + 97 + + + src/app/pages/discover/pages/awards/awards.page.html + 145,144 + + + src/app/pages/member/pages/member/member.page.ts + 66 + + + src/app/pages/member/pages/tokens/tokens.page.html + 49 + + + src/app/pages/member/pages/tokens/tokens.page.html + 235 + + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 41 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 2 + + Token + + + Swap + + src/app/components/auth/services/auth.service.ts + 104 + + Swap + + + Pool + + src/app/components/auth/services/auth.service.ts + 111 + + Pool + + + Marketplace + + src/app/components/auth/services/auth.service.ts + 118 + + Marketplace + + + My Overview + + src/app/components/auth/services/auth.service.ts + 125 + + + src/app/pages/dashboard/dashboard.page.html + 2 + + La mia panoramica + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 232 + + Transazione negata per autenticazione fallita. Ti preghiamo di ricaricare la pagina e riprovare. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 278 + + Per prima cosa è necessario sbloccare il tuo MetaMask! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 290 + + È necessario abilitare l'accesso per accedere all'account di posta elettronica. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 298 + + Assicurarsi che sia stato selezionato un indirizzo nel MetaMask! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 307 + + + src/app/components/auth/services/auth.service.ts + 378 + + Impossibile ottenere il nonce per l'autenticazione! + + + Unable to connect your TanglePay wallet. + + src/app/components/auth/services/auth.service.ts + 343 + + + src/app/components/auth/services/auth.service.ts + 482 + + Impossibile interagire con il tuo portafoglio TanglePay. Connessione negata. + + + Unable to detect address in TanglePay! + + src/app/components/auth/services/auth.service.ts + 349 + + Impossibile trovare l'indirizzo in TanglePay! + + + You have to open Soonaverse in wallet app. + + src/app/components/auth/services/auth.service.ts + 443 + + Accedi all'interfaccia di Soonaverse dall'app del portafoglio. + + + Failed to initialize wallet, try to reload page. + + src/app/components/auth/services/auth.service.ts + 445 + + Mancata inizializzazione della verifica del portafoglio, provare a ricaricare la pagina. + + + Give badges + + src/app/components/award/components/award-awards/award-awards.component.html + 11 + + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 16 + + Offerta di badge + + + Once issued, this badge is sent to the rewarded participant's wallet. + + src/app/components/award/components/award-awards/award-awards.component.html + 36 + + Una volta rilasciato questo badge verrà inviato al portafoglio del partecipante premiato. + + + Upload CSV + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 31,32 + + Caricamento file CSV + + + Download CSV template + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 34 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 85 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 10 + + Scarica il file CSV di esempio + + + You can create badge airdrops for any user. You can upload CSV with users addresses and they will be properly reward. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 42,44 + + Puoi creare airdrops di badge per qualsiasi utente. Puoi importare file CSV e caricare gli indirizzi degli utenti i quali riceveranno a loro volta delle belle ricompense. + + + If you don’t know how to prepare CSV file, you can download our template made for you. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 50,51 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 101,102 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 25,26 + + Se stai pensando di creare un file CSV, ma non sai come farlo, il nostro schema di costruzione del file scaricabile, pensato per te, ti aiuterà a farlo. + + + Confirm schedule + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 77 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 128 + + Conferma il programma + + + Address + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 97 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 21 + + Indirizzo + + + Action + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 98 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 288 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 153 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 22 + + + src/app/pages/token/pages/trade/trade.page.html + 214 + + + src/app/pages/token/pages/trade/trade.page.html + 288 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 24 + + Azione + + + Badge + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 104 + + + src/app/pages/award/pages/new/new.page.html + 298,297 + + Distintivo + + + Submitted. + + src/app/components/award/components/award-give-badges/award-give-badges.component.ts + 103 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 137 + + Domanda presentata. + + + Fund Award & Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 3 + + Fund Award & Mint + + + Reward Token + + src/app/components/award/components/award-mint/award-mint.component.html + 21 + + Token di Ricompensa + + + Reward to be funded + + src/app/components/award/components/award-mint/award-mint.component.html + 43 + + Premio da finanziare + + + Confirm & Start + + src/app/components/award/components/award-mint/award-mint.component.html + 98,99 + + Conferma & Avvio + + + Once you agree with the terms, the generated address will remain active during the whole process. + + src/app/components/award/components/award-mint/award-mint.component.html + 105,107 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 181,183 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 93,95 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 146,148 + + Una volta accettate le condizioni di acquisto, l'indirizzo generato rimarrà in vigore per tutto il processo di minting. + + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + src/app/components/award/components/award-mint/award-mint.component.html + 120,121 + + Utilizzare deeplink per effettuare il trasferimento. Purtroppo l'inserimento manuale dei dati non è supportato da Firefly. + + + Transaction history + + src/app/components/award/components/award-mint/award-mint.component.html + 159 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 252 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 246 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 134 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 176 + + + src/app/components/space/components/space-claim/space-claim.component.html + 113 + + + src/app/components/space/components/space-claim/space-claim.component.html + 135 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 122 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 144 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 207 + + + src/app/components/token/components/token-bid/token-bid.component.html + 212 + + + src/app/components/token/components/token-bid/token-bid.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 256 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 249 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 254 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 276 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 209 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 269 + + + src/app/components/token/components/token-stake/token-stake.component.html + 319 + + + src/app/components/token/components/token-stake/token-stake.component.html + 341 + + + src/app/components/token/components/token-vote/token-vote.component.html + 271 + + + src/app/components/token/components/token-vote/token-vote.component.html + 293 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 110 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 146 + + Storico delle transazioni + + + Transaction complete. Congratulations. + + src/app/components/award/components/award-mint/award-mint.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 271 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 235 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 277 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 294 + + Congratulazioni! La transazione è stata completata. + + + Finish Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 191,192 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 289,290 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 281,282 + + Finalizzare il processo di Minting + + + Funding info + + src/app/components/award/components/award-mint/award-mint.component.ts + 83 + + Info: predisposizione di bilancio + + + Make transaction + + src/app/components/award/components/award-mint/award-mint.component.ts + 84 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 92 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 87 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 101 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 77 + + Effettuare un pagamento + + + Wait for confirmation + + src/app/components/award/components/award-mint/award-mint.component.ts + 85 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 93 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 87 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 109 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 88 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 102 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 78 + + Attendere la conferma + + + Confirmed + + src/app/components/award/components/award-mint/award-mint.component.ts + 86 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 94 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 88 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 110 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 89 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 103 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 79 + + L'indirizzo è stato confermato + + + Payment received. + + src/app/components/award/components/award-mint/award-mint.component.ts + 141 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 150 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 196 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 136 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 136 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 145 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 155 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 140 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 159 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 157 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 131 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 224 + + Pagamento ricevuto. + + + Confirming transaction. + + src/app/components/award/components/award-mint/award-mint.component.ts + 158 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 167 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 213 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 164 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 189 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 153 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 153 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 162 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 172 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 157 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 176 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 174 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 148 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 241 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 208 + + Convalida della transazione in corso. + + + Transaction confirmed. + + src/app/components/award/components/award-mint/award-mint.component.ts + 167 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 176 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 222 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 173 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 198 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 162 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 162 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 171 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 181 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 166 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 185 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 183 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 157 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 250 + + Transazione confermata. + + + Invalid amount received. Refunding transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 186 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 203 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 258 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 182 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 190 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 210 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 186 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 204 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 212 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 190 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 270 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 247 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 159 + + Importo fornito non autorizzato. Erogazione dell'indennità in corso... + + + Invalid transaction.You must gift storage deposit. + + src/app/components/award/components/award-mint/award-mint.component.ts + 209 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 218 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 281 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 206 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 205 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 213 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 225 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 209 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 227 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 227 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 206 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 293 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 262 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 175 + + Transazione non autorizzata. È necessario dotarsi di un portafoglio di stoccaggio. + + + Invalid payment refunded. + + src/app/components/award/components/award-mint/award-mint.component.ts + 224 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 233 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 296 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 220 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 228 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 241 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 224 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 242 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 243 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 221 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 308 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 279 + + Erogazione dell'indennità (token non autorizzati) effettuata. + + + Waiting for transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 300 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 321 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 442 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 290 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 317 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 311 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 316 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 306 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 348 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 327 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 319 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 350 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 336 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 415 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 398 + + In attesa di transazione... + + + Pending Funding + + + src/app/components/award/components/award-status/award-status.component.html + 5,6 + + Richiesta di Finanziamento in Attesa di Approvazione + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 11,12 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 11,12 + + Declinata + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 17 + + + src/app/pages/space/pages/awards/awards.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 32 + + Chiusa + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 570 + + Solo Membri dello Spazio + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 557 + + Solo i guardiani dello spazio + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 29 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 583 + + Solo Membri dello Spazio con Badge + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 39 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 595 + + Almeno un NFT di tutte le Collezioni + + + Specific members only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 53 + + Solo per membri specifici + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 28 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 95 + + + src/app/components/token/components/token-card/token-card.component.html + 70 + + Inizia in + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 30 + + + src/app/components/countdown/countdown.component.html + 56 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 109 + + giorni + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 33 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 122 + + Inizia oggi + + + Collection is not yet migrated to the decentralized network. + + src/app/components/collection/components/collection-card/collection-card.component.html + 59 + + La collezione non è ancora stata trasferita alla rete decentralizzata. + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 76 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 611 + + Limite di Creazione + + + Floor Price + + src/app/components/collection/components/collection-card/collection-card.component.html + 104 + + + src/app/pages/collection/pages/collection/collection.page.html + 207 + + Prezzo Minimo + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 56 + + In attesa di convalida + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 66 + + + src/app/pages/space/pages/awards/awards.page.ts + 33 + + + src/app/pages/space/pages/collections/collections.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 33 + + Respinto + + + Remaining + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 42 + + NFT rimanenti + + + NFTs + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 49 + + + src/app/pages/market/pages/market/market.page.ts + 13 + + + src/app/pages/market/pages/market/market.page.ts + 34 + + + src/app/pages/member/pages/member/member.page.ts + 67 + + NFTs + + + Mint collection on network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 3 + + Mint Collection sulla rete + + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 43,45 + + Il trasferimento dei pezzi di questa collezione NFT verso le reti selezionate dai proprietari potrà essere effettuato al momento del reveal e soltanto ad avvenuto processo di creazione di questi NFT. + + + Unsold NFT's + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 60,61 + + Parti Collezione NFT invendute + + + Decide what should happen with all NFTs that were not sold yet. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 67 + + Dimostra la tua leadership e prendi decisioni su tutti gli NFT che non sono ancora stati venduti. + + + Keep the same price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 76 + + Fissazione del prezzo + + + Take Ownership + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 86 + + Entra in Possesso + + + Set new price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 96 + + Fissa un nuovo prezzo + + + Burn all unsold + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 103 + + Fai Token Burning di tutti gli invenduti + + + Note that the collection ownership will be granted only to your profile. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 130,131 + + Per quanto riguarda la cessione dei diritti di proprietà sulla collezione, si evidenzia che, tali diritti restano soggetti alle condizioni applicabili solo al vostro profilo. + + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 141,143 + + Una volta completato il processo di mint, le impostazioni della collezione non potranno più essere modificate e non sarà più possibile aggiungere un altro NFT alla collezione + + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 150 + + Selezionando questa casella si acconsente alla cancellazione di tutte le attività operative di vendita di questa collezione di NFT. + + + Confirm & Start minting + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 174,175 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 139,140 + + Conferma & Avvia il minting + + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 196,198 + + Una volta registrata la transazione, tutti gli oggetti da collezione NFT verranno rimossi e la vendita in corso sarà annullata. Tutti gli NFT che non sono stati venduti (se selezionati) verranno bruciati. + + + remaining to make the transfer. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 171 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 90 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 132 + + + src/app/components/space/components/space-claim/space-claim.component.html + 78 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 87 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 140 + + + src/app/components/token/components/token-bid/token-bid.component.html + 170 + + + src/app/components/token/components/token-claim/token-claim.component.html + 199 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 194 + + + src/app/components/token/components/token-stake/token-stake.component.html + 279 + + + src/app/components/token/components/token-vote/token-vote.component.html + 209 + + rimanenti per effettuare il trasferimento. + + + Expired + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 213 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 174 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 93 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 135 + + + src/app/components/space/components/space-claim/space-claim.component.html + 81 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 90 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 143 + + + src/app/components/token/components/token-bid/token-bid.component.html + 173 + + + src/app/components/token/components/token-claim/token-claim.component.html + 202 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 197 + + + src/app/components/token/components/token-stake/token-stake.component.html + 282 + + + src/app/components/token/components/token-vote/token-vote.component.html + 212 + + + src/app/pages/token/services/helper.service.ts + 204 + + Scaduto + + + NFT's from this collection are now being migrated. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 284,285 + + Il trasferimento dei pezzi di questa collezione di NFT è appena stato completato. + + + NFT's in collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 308,309 + + Pezzi della collezione di NFT + + + Total Storage Fee + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 318 + + Importo Totale delle Spese di Stoccaggio + + + (NFTs Storage Fee + Collection Storage Fee) + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 319 + + (Commissione di Stoccaggio NFT + Commissione di Stoccaggio Collezione) + + + Select network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 91 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 86 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 100 + + Seleziona la rete + + + Pending + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5,6 + + Pendente + + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 4 + + + src/app/pages/nft/pages/new/single/single.page.html + 352 + + È richiesta una collezione. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 13 + + Seleziona la Collezione + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 83 + + Seleziona una Collezione + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 114 + + + src/app/components/space/components/select-space/select-space.component.html + 114 + + Nessun risultato per + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 20 + + Tutte le Collezioni + + + + + + + src/app/components/confirm-modal/confirm-modal.component.html + 48,50 + + + src/app/components/confirm-modal/confirm-modal.component.html + 51,53 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 246,251 + + + src/app/components/token/components/token-vote/token-vote.component.html + 46,47 + + + src/app/pages/collection/pages/collection/collection.page.html + 130,131 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 55,56 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 71,72 + + + + + Are you sure? + + src/app/components/confirm-modal/confirm-modal.component.ts + 30 + + Valuta se comprendi il funzionamento e conferma + + + Close + + src/app/components/confirm-modal/confirm-modal.component.ts + 33 + + Chiudi + + + Confirm + + src/app/components/confirm-modal/confirm-modal.component.ts + 34 + + + src/app/components/token/components/token-bid/token-bid.component.html + 146 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 170 + + + src/app/components/token/components/token-vote/token-vote.component.html + 181 + + Consenti + + + Connect wallet + + src/app/components/connect-wallet/connect-wallet.component.html + 7 + + Connetti wallet + + + d + + src/app/components/countdown/countdown.component.html + 55 + + g. + + + h + + src/app/components/countdown/countdown.component.html + 68 + + o. + + + hours + + src/app/components/countdown/countdown.component.html + 69 + + orario + + + m + + src/app/components/countdown/countdown.component.html + 81 + + m + + + min + + src/app/components/countdown/countdown.component.html + 82 + + min + + + s + + src/app/components/countdown/countdown.component.html + 94 + + s + + + sec + + src/app/components/countdown/countdown.component.html + 95 + + secα + + + Ends + + src/app/components/date-tag/date-tag.component.ts + 11 + + Fine + + + Price + + src/app/components/iota-input/iota-input.component.html + 3 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 139 + + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 81 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 19 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 124 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 49 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 75 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 37 + + + src/app/pages/token/pages/trade/trade.page.html + 209 + + + src/app/pages/token/pages/trade/trade.page.html + 283 + + + src/app/pages/token/pages/trade/trade.page.html + 372 + + + src/app/pages/token/pages/trade/trade.page.html + 659 + + + src/app/pages/token/pages/trade/trade.page.html + 846 + + Prezzo + + + Verified addresses + + src/app/components/member/components/member-about/member-about.component.html + 90 + + Indirizzi verificati + + + Manage + + src/app/components/member/components/member-about/member-about.component.html + 96 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 297 + + + src/app/pages/space/pages/space/space.page.ts + 53 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 18 + + Gestisci + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 119 + + Spazi uniti di recente + + + All + + src/app/components/member/components/member-about/member-about.component.html + 124 + + Tutti + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 155 + + Nessun contributo ancora. + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 74 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 22 + + premi + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 14 + + Nome del display + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19 + + Impostare un nome di visualizzazione. Questa operazione non apporterà alcuna modifica al nome dell'utente. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 26 + + Nome visualizzato (opzionale) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 36 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 208 + + + src/app/pages/space/pages/space/space.page.ts + 44 + + A proposito di + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 41 + + Una breve descrizione di te stesso mostrata sul tuo profilo. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 48 + + La tua descrizione (opzionale) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 57 + + + src/app/pages/space/pages/upsert/upsert.page.html + 166 + + Avatar + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 62 + + Personalizza la tua identità Soonaverse. + + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,78 + + Crea un avatar unico e gratuito per la tua immagine profilo. Nuovi e prestigiosi tipi di avatar, estremamente rari e avatar che potranno essere scambiati come oggetti da collezione/accessori PRESTO disponibili. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 92 + + INCREDIBILE! Congratulazioni. A quanto pare, il tuo è l'avatar più bello di tutti. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 97 + + + src/app/pages/space/pages/upsert/upsert.page.html + 54 + + Collegamento in rete + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 99 + + + src/app/pages/space/pages/upsert/upsert.page.html + 61 + + Nome utente Github non valido. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 105 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67 + + Inserisci il nome utente del tuo account Github + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 117 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 177 + + + src/app/pages/space/pages/upsert/upsert.page.html + 78 + + Nome utente Twitter non valido. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 123 + + + src/app/pages/space/pages/upsert/upsert.page.html + 84 + + Digita il nome utente del tuo account Twitter + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 135 + + Supportato solo il formato username#1234. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 141 + + Inserisci il nome utente del tuo account Discord + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 155 + + Impostazioni + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 157,158 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 123,124 + + Salvare le modifiche + + + + + + + src/app/components/network/components/select-network/select-network.component.html + 4,6 + + + + + + Shimmer + + src/app/components/network/components/select-network/select-network.component.html + 17 + + + src/app/components/network/components/select-network/select-network.component.html + 28 + + + src/app/components/network/components/selected-network/selected-network.component.html + 11 + + + src/app/pages/award/pages/award/award.page.html + 44 + + + src/app/pages/collection/pages/collection/collection.page.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 575 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 169 + + Shimmer + + + IOTA + + src/app/components/network/components/select-network/select-network.component.html + 45 + + + src/app/components/network/components/select-network/select-network.component.html + 56 + + + src/app/components/network/components/selected-network/selected-network.component.html + 19 + + + src/app/pages/award/pages/award/award.page.html + 52 + + + src/app/pages/collection/pages/collection/collection.page.html + 59 + + + src/app/pages/nft/pages/nft/nft.page.html + 583 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 177 + + IOTA + + + Selected Network + + src/app/components/network/components/selected-network/selected-network.component.html + 4,6 + + Rete Selezionata + + + Shimmer Testnet + + src/app/components/network/components/selected-network/selected-network.component.html + 15 + + + src/app/pages/award/pages/award/award.page.html + 48 + + + src/app/pages/collection/pages/collection/collection.page.html + 55 + + + src/app/pages/nft/pages/nft/nft.page.html + 579 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 173 + + Shimmer Testnet + + + IOTA Devnet + + src/app/components/network/components/selected-network/selected-network.component.html + 23 + + + src/app/pages/award/pages/award/award.page.html + 56 + + + src/app/pages/collection/pages/collection/collection.page.html + 63 + + + src/app/pages/nft/pages/nft/nft.page.html + 587 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 181 + + IOTA Devnet + + + Send + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + Invia + + + to following address: + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + al seguente indirizzo: + + + Copied + + src/app/components/network/components/send-funds/send-funds.component.html + 25 + + + src/app/components/share/share.component.html + 27 + + + src/app/components/wallet-address/wallet-address.component.html + 29 + + Copiato + + + Copy + + src/app/components/network/components/send-funds/send-funds.component.html + 26 + + Copia + + + Do not send funds from an exchange, always use wallets you fully control. + + + src/app/components/network/components/send-funds/send-funds.component.html + 34,36 + + Il trasferimento di fondi non deve essere effettuato da un exchange; utilizza sempre portafogli digitali di cui ha il pieno controllo. + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 3 + + Determina un Prezzo bid + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 15 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 16 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 25 + + Immagine NFT + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 38 + + Termina + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 48 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 36 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46 + + Diritti d'autore + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 55 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 43 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 53 + + Le royalties vengono automaticamente trattenute e versate agli artisti. + + + Royalties goes to + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 73,74 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 61,62 + + Le royalties vengono versate a + + + + + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 75,76 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 63,64 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 262,263 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 188,189 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 264,265 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 306,307 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 344,345 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 45 + + + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 109 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Prezzo Bid corrente più alto + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 111 + + + src/app/pages/nft/pages/nft/nft.page.html + 111 + + Prezzo bid min + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 127 + + + src/app/pages/nft/pages/nft/nft.page.html + 116 + + Il tuo prezzo bid è il più alto + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 172,173 + + Aggiornamento del prezzo corrente in tempo reale + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 208,209 + + L'indirizzo dell'NFT desiderato sarà bloccato per tutta la durata dell'asta. Il prezzo bid da te determinato sarà bloccato ad avvenuto pagamento, con eventuale risarcimento immediato nel caso di un prezzo bid più alto. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 216,218 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,257 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 321,323 + + Qualora fosse determinato un prezzo bid più alto, sarai rimborsato immediatamente. Inviare il prezzo bid direttamente allo stesso indirizzo se si desidera determinare un prezzo più elevato. + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 237,238 + + Determina un Prezzo bid + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 278 + + Le mie operazioni di pagamento + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 286 + + Data invio + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 287 + + + src/app/pages/token/pages/trade/trade.page.html + 854 + + Tempo + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 289 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 33 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 110 + + + src/app/pages/member/pages/tokens/tokens.page.html + 328 + + + src/app/pages/member/pages/transactions/transactions.page.html + 25 + + + src/app/pages/nft/pages/nft/nft.page.html + 323 + + + src/app/pages/nft/pages/nft/nft.page.html + 385 + + + src/app/pages/nft/pages/nft/nft.page.html + 435 + + + src/app/pages/token/pages/trade/trade.page.html + 200 + + + src/app/pages/token/pages/trade/trade.page.html + 274 + + + src/app/pages/token/pages/trade/trade.page.html + 363 + + + src/app/pages/token/pages/trade/trade.page.html + 664 + + + src/app/pages/token/pages/trade/trade.page.html + 851 + + Ammontare + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 55 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 96 + + Dettaglio + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 311,310 + + + src/app/pages/nft/pages/nft/nft.page.html + 324 + + + src/app/pages/nft/pages/nft/nft.page.html + 360,359 + + + src/app/pages/nft/pages/nft/nft.page.html + 386 + + + src/app/pages/nft/pages/nft/nft.page.html + 410,409 + + + src/app/pages/nft/pages/nft/nft.page.html + 436 + + + src/app/pages/nft/pages/nft/nft.page.html + 460,459 + + Link + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 345 + + Complimenti, hai vinto l'NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 357,358 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 283,284 + + + src/app/components/token/components/token-bid/token-bid.component.html + 271,272 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 313,314 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 306,307 + + + src/app/components/token/components/token-vote/token-vote.component.html + 330,331 + + Completare l'ordine + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 368,369 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 294,295 + + Mostra il mio NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 384 + + Il termine per la presentazione delle offerte è scaduto. La prossima volta andrà meglio:) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 272 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 459 + + NFT generato + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 274 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 461 + + SFT + + + NFT is not yet migrated to the decentralized network. + + src/app/components/nft/components/nft-card/nft-card.component.html + 65 + + L' NFT non è ancora stato trasferito verso la rete decentralizzata. + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 118 + + giorno + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 156 + + Prezzo bid corrente + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 191 + + + src/app/pages/nft/pages/nft/nft.page.html + 594 + + Di proprietà di + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 229,231 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 167 + + Nuovo NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 3 + + Cassa + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 74,75 + + Prezzo totale + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150,151 + + Confermare e Bloccare + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 156 + + Il tuo NFT sarà bloccato per l'acquisto per + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + minuti + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 185 + + L'importo ricevuto supera il limite consentito o non è sufficiente. Riprova. + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 237,238 + + Convalidare la tua transazione... + + + Order created. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 437 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 332 + + Ordine assegnato. + + + Deposit NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 215 + + Deposito NFT + + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 46,48 + + Avrai la possibilità di depositare nuovamente l'NFT sulla piattaforma di Soonaverse affinché tu possa fare trading. Una volta completata l'elaborazione dei dati, il tuo NFT sarà bloccato su Soonaverse. Il prelievo può avvenire in qualsiasi momento. + + + Confirm & Start deposit + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 76,77 + + Conferma & Inizia il deposito + + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 113,115 + + Nel caso in cui l'NFT non venga riconosciuto all'interno della piattaforma Soonaverse: avvieremo un processo per la creazione di nuove Collezioni e Spazi a loro associati. Se sei l'autore originale di questo NFT, non dimenticare di rivendicare questo spazio. + + + NFT has been deposited. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 165 + + Un NFT è stato depositato. + + + See NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 169,170 + + Vedi NFT + + + Terms & Conditions + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 85 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 107 + + Termini & Condizioni + + + Send NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 86 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 108 + + Invia l'NFT + + + NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 147 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 172 + + Conferma di ricezione dell'NFT. + + + Invalid NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 191 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 216 + + Conferma di ricezione dell'NFT non autorizzato. + + + Invalid NFT refunded. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 205 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 230 + + Conferma di avvenuto rimborso NFT non autorizzato. + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 19 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 37 + + Anteprima + + + Sale Starts + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 57 + + + src/app/pages/nft/services/helper.service.ts + 142 + + Asta di Apertura + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 60 + + + src/app/pages/nft/pages/nft/nft.page.html + 70 + + Prezzo corrente + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 80 + + Autore + + + System info + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 119 + + + src/app/pages/nft/pages/nft/nft.page.html + 634 + + Informazioni di sistema + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 130 + + + src/app/pages/nft/pages/nft/nft.page.html + 654 + + L'indirizzo attuale non è collegato a una mainnet operativa. Non appena la mainnet sarà resa operativa da IOTA/Shimmer, potrai trasferire con un clic l'NFT verso la rete desiderata. + + + Properties + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 135 + + + src/app/pages/nft/pages/new/single/single.page.html + 90 + + Proprietà + + + Stats + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 139 + + + src/app/pages/nft/pages/new/single/single.page.html + 193,192 + + Stats + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149 + + + src/app/pages/nft/pages/new/single/single.page.html + 301 + + + src/app/pages/nft/pages/nft/nft.page.html + 27 + + Immagine NFT + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + Metadati IPFS + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + Immagine IPFS + + + Available once minted... + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 64 + + + src/app/pages/nft/pages/nft/nft.page.ts + 81 + + Disponibile dopo aver fatto il mint... + + + Set your floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 6,7 + + Stabilisci un prezzo minimo + + + Available time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 42,43 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 42,43 + + Tempi di disponibilità + + + NOW + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 54,55 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 54,55 + + NOW + + + Select Date/Time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Seleziona Data/Ora + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 71 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 71 + + + src/app/pages/nft/pages/new/single/single.page.html + 69 + + Disponibile Da è richiesto. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 80 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 80 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 70 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 81 + + + src/app/pages/nft/pages/new/single/single.page.html + 68 + + + src/app/pages/nft/pages/new/single/single.page.html + 79 + + Disponibile su + + + Auction length + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 91,92 + + Durata dell'asta + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 98 + + La community allo sprint successivo: il voto, passaggio obbligatorio per un uso dello spettro dell'asta in arrivo! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 115 + + La durata dell'asta è di 3 giorni + + + Auction can't be canceled after start date + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 125 + + Impossibile annullare l'asta dopo la data di apertura + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 129 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 145 + + Una volta terminata la lista degli Nft da includere nel listino prezzi fissi, ti verrà inviato un messaggio di conferma. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 138,139 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 154,155 + + Conferma il listing + + + Set your price + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 6,7 + + Fissa il tuo prezzo + + + Sale type + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Tipo di vendite + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 103,104 + + Asta Aperta + + + Specific member(s) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 113,114 + + Membro/i specifico/i + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2 + + + src/app/pages/token/pages/trade/trade.page.html + 110 + + Cronologia degli scambi + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 8,10 + + Il tuo oggetto è esclusivamente tuo + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 16 + + Questo renderà l'elemento non disponibile alla vendita. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 17 + + Stop alle vendite! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 15 + + Lista degli Articoli destinati alla vendita + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 80 + + Non destinato alla vendita + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 88 + + + src/app/pages/token/services/new.service.ts + 29 + + Prezzo fisso + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 96 + + Asta + + + Stake NFT + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 221 + + Fai staking con l'NFT + + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 46,48 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 147,149 + + Il tuo NFT sarà inviato nuovamente nel tuo portafoglio per mezzo del fattore di blocco temporale. È importante fornire sufficienti quantità per il deposito affinché tu possa attivare la funzione di blocco temporale. Aggiungi semplicemente il tag direttamente a "soonaverse", nel tuo portafoglio. + + + For how long you want to stake? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 56,57 + + + src/app/components/token/components/token-stake/token-stake.component.html + 174,175 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 57,58 + + Precisare la durata dell'attività di staking. + + + Stake type? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 77,78 + + Variante della proof of stake? + + + Confirm & Start Stake + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 118,119 + + Confermare & Avviare lo Staking + + + NFT has been staked. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 207 + + È già stato fatto staking con questo NFT. + + + See Collection + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 218,219 + + Vedi Collezione + + + Dynamic + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 76 + + Dinamico + + + Static + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 80 + + Statico + + + More + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 97,98 + + Altro + + + Pending + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 6,7 + + + src/app/pages/token/pages/token/token.page.html + 36 + + + src/app/pages/token/pages/trade/trade.page.html + 524 + + In attesa + + + Rejected + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 12,13 + + + src/app/pages/token/pages/token/token.page.html + 42 + + Rifiutato + + + Commencing + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 18,19 + + In avvio + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 24,25 + + In corso di realizzazione + + + Completed + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 31,32 + + Chiusa + + + Share + + src/app/components/share/share.component.html + 16 + + + src/app/components/share/share.component.html + 39 + + + src/app/pages/token/pages/trade/trade.page.html + 64 + + + src/app/pages/token/pages/trade/trade.page.html + 635,634 + + Condividi + + + Copy to clipboard + + src/app/components/share/share.component.html + 28 + + Copia negli appunti + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 4 + + + src/app/pages/award/pages/new/new.page.html + 121 + + + src/app/pages/proposal/pages/new/new.page.html + 211 + + Lo spazio è richiesto. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 13 + + Selezionare lo Spazio + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 83 + + + src/app/pages/award/pages/new/new.page.html + 152 + + + src/app/pages/proposal/pages/new/new.page.html + 242 + + Selezionare uno spazio + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 20 + + Tutti gli spazi + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 19,20 + + Aggiunto il + + + members + + src/app/components/space/components/space-card/space-card.component.html + 44 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 23 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + membri + + + Space Claim + + src/app/components/space/components/space-claim/space-claim.component.html + 3 + + Richiesta Spazio + + + Confirm and generate address + + src/app/components/space/components/space-claim/space-claim.component.html + 54,55 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 52,53 + + + src/app/components/token/components/token-claim/token-claim.component.html + 138,139 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 96,97 + + + src/app/components/token/components/token-stake/token-stake.component.html + 251,252 + + Conferma e crea un indirizzo + + + Claim complete. Congratulations. + + src/app/components/space/components/space-claim/space-claim.component.html + 160 + + + src/app/components/token/components/token-claim/token-claim.component.html + 281 + + Congratulazioni! La domanda è completa. + + + Close + + src/app/components/space/components/space-claim/space-claim.component.html + 172,173 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 181,182 + + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 29,30 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 79,80 + + + src/app/components/token/components/token-claim/token-claim.component.html + 293,294 + + + src/app/components/token/components/token-stake/token-stake.component.html + 378,379 + + Chiudere + + + Invalid amount or invalid senders address. Refunding transaction... + + src/app/components/space/components/space-claim/space-claim.component.ts + 183 + + L'importo fornito o l'indirizzo del destinatario non sono autorizzati. Rimborso della transazione... + + + Funds refunded. + + src/app/components/space/components/space-claim/space-claim.component.ts + 222 + + Fondi rimborsati. + + + Space claim submitted. + + src/app/components/space/components/space-claim/space-claim.component.ts + 306 + + Richiesta dello spazio inoltrata. + + + Token Reward Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 16 + + Pianificazione Ricompensa Token + + + Existing Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 29 + + Programma Attuale + + + Upload New + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 37 + + Carica nuovo + + + Vault address: + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 55,64 + + Indirizzo del Vault: + + + Schedule a new Reward + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 82,83 + + Pianifica una nuova Ricompensa + + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 93,95 + + Per una pianificazione del programma delle nuove ricompense di staking clicca qui. A tal fine è necessario caricare un file Csv che includa le informazioni sulla distribuzione e gli indirizzi degli utenti. + + + Start Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 148 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 24 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 24 + + Data di inizio + + + End Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 149 + + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 19 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 25 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 25 + + Data di Chiusura + + + Vesting Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 150 + + Periodo di Vesting + + + Tokens to Distribute + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 151 + + Token da Assegnare + + + Status + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 152 + + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 110,109 + + + src/app/pages/token/pages/trade/trade.page.html + 376 + + Stato + + + Proposal created to remove the reward. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 154 + + Iniziativa creata per rimuovere la ricompensa. + + + By checking this box, you agree with + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 12 + + Selezionando questa casella accetti + + + Terms and Conditions + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 13 + + Termini e condizioni + + + Timeline + + src/app/components/timeline/timeline.component.html + 2 + + + src/app/components/timeline/timeline.component.html + 8 + + Schema cronologico + + + Earned Badge + + src/app/components/timeline/timeline.component.html + 66 + + Distintivi guadagnati + + + with + + src/app/components/timeline/timeline.component.html + 66 + + con + + + Listed by + + src/app/components/timeline/timeline.component.html + 109 + + Elencati per + + + Made available for auction by + + src/app/components/timeline/timeline.component.html + 112 + + Assegnati all'asta mediante + + + Purchased by + + src/app/components/timeline/timeline.component.html + 170 + + Comprato da + + + See + + src/app/components/timeline/timeline.component.html + 181 + + Vedi + + + Hide + + src/app/components/timeline/timeline.component.html + 182 + + Nascondi + + + Listed by space + + src/app/components/timeline/timeline.component.html + 287 + + Elencato da spazio + + + Refund blocked funds + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 3 + + Recupero di fondi bloccati + + + Total available tokens to refund + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 29 + + Numero complessivo di token disponibili da recuperare + + + Refund complete. Congratulations. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 169 + + Congratulazioni! Il processo di recupero dei fondi è stato completato. + + + Credit refund submitted. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 309 + + Domanda di recupero della somma esigibile inoltrata. + + + Airdrop tokens on the network + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 3 + + Airdrop di token sulla rete + + + Tokens to airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 56,57 + + Token da distribuire tramite airdrop + + + Confirm & Start Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 86,87 + + Conferma & Avvia Airdrop + + + Tokens to Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 120,121 + + Distribuzione token tramite Airdrop + + + Finish Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 239,240 + + Completamento Airdrop + + + Detail + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 60,61 + + Dettagli + + + Trade + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 70,71 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 201,202 + + Scambia + + + Price (USD) + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 101 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 145 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 86 + + Valuta (USD) + + + 24h Change + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 126,127 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 115,116 + + Cambio 24h + + + 24h Volume + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 154 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 146 + + volume 24h + + + M. Cap + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 172 + + Market Cap + + + Open buy order + + src/app/components/token/components/token-bid/token-bid.component.html + 3 + + Apri ordine di acquisto + + + Summary + + src/app/components/token/components/token-bid/token-bid.component.html + 29,30 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 39,40 + + + src/app/components/token/components/token-offer/token-offer.component.html + 46,47 + + Riepilogo + + + Token amount to buy + + src/app/components/token/components/token-bid/token-bid.component.html + 34,35 + + Importo di token da acquistare + + + Offered price per token + + src/app/components/token/components/token-bid/token-bid.component.html + 44,45 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 44,45 + + + src/app/components/token/components/token-offer/token-offer.component.html + 51,52 + + Prezzo offerto per token + + + Token amount to send + + src/app/components/token/components/token-bid/token-bid.component.html + 73,74 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 117,118 + + Importo di token da inviare + + + ~ + + src/app/components/token/components/token-bid/token-bid.component.html + 89,98 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 60,69 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 90,99 + + + src/app/pages/token/pages/trade/trade.page.html + 553,556 + + ~ + + + I agree with + + src/app/components/token/components/token-bid/token-bid.component.html + 129 + + + src/app/components/token/components/token-claim/token-claim.component.html + 115 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 153 + + + src/app/components/token/components/token-offer/token-offer.component.html + 133 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 78 + + + src/app/components/token/components/token-refund/token-refund.component.html + 65 + + Acconsento con + + + Token terms and Conditions + + src/app/components/token/components/token-bid/token-bid.component.html + 131 + + + src/app/components/token/components/token-claim/token-claim.component.html + 117 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 155 + + + src/app/components/token/components/token-offer/token-offer.component.html + 135 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 80 + + + src/app/components/token/components/token-refund/token-refund.component.html + 67 + + Token: termini e Condizioni + + + and generate address + + src/app/components/token/components/token-bid/token-bid.component.html + 147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 171 + + + src/app/components/token/components/token-vote/token-vote.component.html + 182 + + e genera l'indirizzo + + + Once you agree with the terms, the generated address will remain active during the whole sale. + + src/app/components/token/components/token-bid/token-bid.component.html + 154,155 + + + src/app/components/token/components/token-claim/token-claim.component.html + 146,147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 178,179 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 103,104 + + Con l'accettazione delle condizioni l'indirizzo generato rimarrà attivo per tutta la durata dell'asta. + + + Buy complete. Congratulations. + + src/app/components/token/components/token-bid/token-bid.component.html + 259 + + Congratulazioni! Il processo di acquisto è stato completato. + + + Bid created. + + src/app/components/token/components/token-bid/token-bid.component.ts + 344 + + Offerta creata. + + + Are you sure you want to cancel the sale? + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 17 + + Sei sicuro di volere annullare la vendita? + + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 23,25 + + Un processo di rimborso automatizzato sarà attivato con la rinuncia all'acquisto al fine di consentire il versamento immediato delle indennità a tutti gli investitori. + + + Cancel sale + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 32,33 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 74,75 + + Annullamento della vendita + + + Canceled public sale. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts + 56 + + La vendita pubblica è stata annullata. + + + Total () + + src/app/components/token/components/token-cancel/token-cancel.component.html + 51,52 + + Quantità totale () + + + Are you sure you want to cancel your buy order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 66 + + Sei sicuro di volere annullare l'ordine di acquisto? + + + Are you sure you want to cancel your sell order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 69 + + Sei sicuro di volere annullare l'ordine di vendita? + + + Confirm + + src/app/components/token/components/token-cancel/token-cancel.component.html + 76,77 + + Conferma + + + Cancelled. + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 48 + + + src/app/pages/token/pages/trade/trade.page.ts + 589 + + Revocato. + + + Cancel your buy + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 80 + + Annullare l'acquisto + + + Cancel your sell + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 81 + + Annullare la vendita + + + Ongoing sale + + src/app/components/token/components/token-card/token-card.component.html + 22 + + Asta in corso + + + Sale ends soon + + src/app/components/token/components/token-card/token-card.component.html + 23 + + La vendita sta per chiudersi + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 24 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 21 + + Termine raffreddamento + + + Sale starts + + src/app/components/token/components/token-card/token-card.component.html + 55,57 + + Asta di apertura + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 115,117 + + + src/app/components/token/components/token-card/token-card.component.html + 175,177 + + Asta di chiusura + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 130 + + + src/app/components/token/components/token-card/token-card.component.html + 190 + + + src/app/components/token/components/token-card/token-card.component.html + 250 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 176 + + + src/app/components/token/components/token-row/token-row.component.html + 79 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 20 + + Asta di chiusura + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 235,237 + + Termine raffreddamento + + + Token Claim + + src/app/components/token/components/token-claim/token-claim.component.html + 3 + + Richiesta di Token + + + Total available tokens to claim as of today + + src/app/components/token/components/token-claim/token-claim.component.html + 42 + + + src/app/components/token/components/token-claim/token-claim.component.html + 56 + + Numero complessivo di token disponibili che possono essere richiesti a partire da oggi + + + Tokens available from + + src/app/components/token/components/token-claim/token-claim.component.html + 76 + + Token disponibili da + + + Total tokens to claim + + src/app/components/token/components/token-claim/token-claim.component.html + 84 + + Numero complessivo di token richiedibili + + + Token claim submitted. + + src/app/components/token/components/token-claim/token-claim.component.ts + 320 + + Richiesta token inoltrata. + + + Guardian's of the space will be able to decide where this token will be minted. + + src/app/components/token/components/token-info/token-info-description.component.html + 41 + + I guardiani dello spazio potranno decidere dove verrà effettuato il mint di questo token. + + + Icon + + src/app/components/token/components/token-info/token-info-description.component.ts + 25 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 24 + + Icona + + + Name + + src/app/components/token/components/token-info/token-info-description.component.ts + 26 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 25 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 31,30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 74 + + + src/app/pages/nft/pages/new/single/single.page.html + 21 + + + src/app/pages/nft/pages/new/single/single.page.html + 27,26 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 15 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 21,20 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 25 + + Nome + + + Symbol + + src/app/components/token/components/token-info/token-info-description.component.ts + 27 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 30 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 39,38 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 26 + + Simbolo + + + Launchpad Price + + src/app/components/token/components/token-info/token-info-description.component.ts + 28 + + Prezzo di Lancio + + + Network + + src/app/components/token/components/token-info/token-info-description.component.ts + 29 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 20 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 5,4 + + + src/app/pages/nft/pages/nft/nft.page.html + 542 + + + src/app/pages/nft/pages/nft/nft.page.html + 564 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 119 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 160 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 28 + + Network + + + Total supply + + src/app/components/token/components/token-info/token-info-description.component.ts + 30 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 29 + + Total supply + + + Current distribution + + src/app/components/token/components/token-info/token-info-description.component.ts + 31 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 30 + + Distribuzione attuale + + + Type + + src/app/components/token/components/token-info/token-info-description.component.ts + 32 + + + src/app/pages/member/pages/tokens/tokens.page.html + 58 + + + src/app/pages/member/pages/tokens/tokens.page.html + 325 + + + src/app/pages/member/pages/transactions/transactions.page.html + 24 + + + src/app/pages/nft/pages/nft/nft.page.html + 384 + + + src/app/pages/nft/pages/nft/nft.page.html + 434 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 31 + + + src/app/pages/token/pages/trade/trade.page.html + 361 + + Tipo + + + Coming soon + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 91,92 + + In arrivo + + + In Cooldown + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 98,99 + + + src/app/components/token/components/token-row/token-row.component.html + 245,246 + + Raffreddamento + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 108,109 + + + src/app/components/token/components/token-row/token-row.component.html + 256,257 + + + src/app/pages/token/pages/trade/trade.page.html + 456 + + + src/app/pages/token/pages/trade/trade.page.html + 467 + + + src/app/pages/token/pages/trade/trade.page.html + 909,910 + + Acquisto + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 116 + + + src/app/pages/token/pages/trade/trade.page.html + 387 + + + src/app/pages/token/pages/trade/trade.page.html + 1210 + + Acquisto + + + Sale starts + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 167 + + + src/app/components/token/components/token-row/token-row.component.html + 70 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 19 + + Asta di apertura + + + Cooldown period ends + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 187,188 + + + src/app/components/token/components/token-row/token-row.component.html + 90,91 + + Termine del periodo di raffreddamento + + + Mint token on network + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 3 + + Mint token sulla rete + + + Public sale will no longer be available after bringing token to a network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 45,46 + + Una volta che il token sarà stato reindirizzato verso una rete, la vendita pubblica non sarà più disponibile. + + + Once minted all owners will have the option to migrate their tokens to the selected network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 56,58 + + Tutti i proprietari potranno trasferire i propri token nella rete selezionata solo al momento del reveal e una volta completato il processo di creazione di token. + + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 68,70 + + Nota: tutti i token non assegnati saranno depositati nel tuo profilo membro e l'esercizio dei diritti di proprietà sui token sarà soggetto a condizioni applicabili al tuo profilo. + + + Tokens to migrate + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 92,93 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 173,174 + + Token da trasferire + + + Locked public tokens + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 107,108 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 189,190 + + Token pubblici bloccati + + + Open sale order + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 3 + + Aprire l'ordine di vendita + + + Token ID + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 30,31 + + + src/app/components/token/components/token-offer/token-offer.component.html + 27,28 + + ID Token + + + You will receive + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 74,75 + + + src/app/components/token/components/token-offer/token-offer.component.html + 73,74 + + + src/app/pages/token/pages/trade/trade.page.html + 1132,1133 + + Ricevi + + + Fee + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 103 + + + src/app/components/token/components/token-offer/token-offer.component.html + 101 + + + src/app/pages/token/pages/trade/trade.page.html + 1172 + + Costi di Transazione + + + No FEES! + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 110,111 + + + src/app/components/token/components/token-offer/token-offer.component.html + 108,109 + + + src/app/pages/token/pages/trade/trade.page.html + 1188,1189 + + 0% COMMISSIONE! + + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 232,234 + + + src/app/components/token/components/token-vote/token-vote.component.html + 249,251 + + Assicurati che le funzioni di bonus del deposito siano abilitate nel tuo portafoglio Firefly al momento dell'invio dei token. + + + Sell complete. Congratulations. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 301 + + + src/app/components/token/components/token-vote/token-vote.component.html + 318 + + Congratulazioni! Il processo di vendita è stato completato. + + + Offer order created. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 346 + + Conferma d'ordine creata. + + + Open Token Sell + + src/app/components/token/components/token-offer/token-offer.component.html + 3 + + Aprire la Posizione di Vendita + + + Your Balance + + src/app/components/token/components/token-offer/token-offer.component.html + 35,36 + + Il tuo Saldo + + + Offered amount of tokens + + src/app/components/token/components/token-offer/token-offer.component.html + 64,65 + + Quantità di token offerti + + + Create a Sell Order + + src/app/components/token/components/token-offer/token-offer.component.html + 151,152 + + Creare un Ordine di Vendita + + + Offer created. + + src/app/components/token/components/token-offer/token-offer.component.ts + 102 + + Offerta creata. + + + Public sale info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 4 + + Asta pubblica: Info + + + Start date is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 7 + + È richiesta la data di apertura. + + + Start date for the token offering + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 16 + + Data di apertura dell'offerta di token al pubblico + + + Offering length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 23 + + È richiesta la durata di validità dell'offerta. + + + Select token offering length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 48 + + Seleziona la durata di validità dell'offerta pubblica di token (Impostazione Predefinita: 2 giorni) + + + Token allocation info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 63 + + Distribuzione di token: Info + + + Sale Setup + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 81 + + Impostazioni Vendita + + + Enable Cooldown period + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 87,88 + + Attivazione del ciclo di Raffreddamento + + + Enable Cooldown with refund option. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 98,99 + + Attiva la funzione di Raffreddamento con indennità. + + + Cooldown period length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 103 + + È richiesta la durata del ciclo di raffreddamento. + + + Select token cooldown length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 129 + + Seleziona la durata di validità di raffreddamento token (Impostazione Predefinita: 2 giorni) + + + No Cooldown. Participants can’t refund. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 149,150 + + Nessun Raffreddamento. I partecipanti non possono versare indennità. + + + Enable Oversale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 160,161 + + Attiva l'Overselling + + + No Oversale. Sale ends with 100% reached. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 171,172 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 54,55 + + 0% Overselling. L'asta si è conclusa raggiungendo il 100% della vendita. + + + Sale continues after 100% reached + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 179,180 + + L'asta continua dopo aver raggiunto il 100% della vendita + + + Confirm and schedule sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 195,196 + + Confermare e pianificare la vendita + + + Price per token + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 106 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 34 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 42 + + Prezzo per token + + + Public sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 135 + + + src/app/pages/token/pages/new/summary/summary.component.html + 214 + + Vendita pubblica + + + Purchase token + + src/app/components/token/components/token-purchase/token-purchase.component.html + 3 + + Acquisto token + + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 113 + + Digitare il numero di token desiderati per l'acquisto. La quotazione avviene in IOTA. + + + Enter how much you want to spend. Amount of tokens will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 116 + + Digitare l'importo desiderato. L'ammontare di token sarà calcolato. + + + Purchased tokens + + src/app/components/token/components/token-purchase/token-purchase.component.html + 243,244 + + Token acquistati + + + Price + + src/app/components/token/components/token-purchase/token-purchase.component.html + 260,261 + + Prezzo + + + Cooldown period ends + + src/app/components/token/components/token-refund/token-refund.component.html + 23 + + Termine del periodo di raffreddamento + + + Confirm and refund + + src/app/components/token/components/token-refund/token-refund.component.html + 82,83 + + Confermare e rimborsare + + + Refund token + + src/app/components/token/components/token-refund/token-refund.component.ts + 61 + + Indennità + + + Initial Price + + src/app/components/token/components/token-row/token-row.component.html + 39 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 27 + + Prezzo iniziale + + + Avg. Price + + src/app/components/token/components/token-row/token-row.component.html + 47 + + Prezzo Medio + + + Change (24h) + + src/app/components/token/components/token-row/token-row.component.html + 107,108 + + Cambio (24 ore) + + + Volume 24h + + src/app/components/token/components/token-row/token-row.component.html + 150 + + Volume 24h + + + Market Cap + + src/app/components/token/components/token-row/token-row.component.html + 166 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 169 + + + src/app/pages/token/pages/trade/trade.page.html + 582 + + Market Cap + + + Claim + + src/app/components/token/components/token-row/token-row.component.html + 210,211 + + Riscatta + + + Refund + + src/app/components/token/components/token-row/token-row.component.html + 222,223 + + Rimborso + + + Launching soon + + src/app/components/token/components/token-row/token-row.component.html + 238,239 + + Lancio a breve + + + Buy / Sell + + src/app/components/token/components/token-row/token-row.component.html + 259,260 + + Acquisto/Vendita + + + Stake your token + + src/app/components/token/components/token-stake/token-stake.component.html + 3 + + Fai staking con il tuo token + + + Select or define the amount you want to stake and the period for how long you want to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 13,15 + + Seleziona o specifica la quantità di token con i quali desideri fare staking e la durata dell'attività di deposito nel tuo conto che sarà vincolato. + + + Since you are a guardian you can also + + src/app/components/token/components/token-stake/token-stake.component.html + 17 + + Considerato il tuo ruolo di guardiano puoi anche + + + - Choose an amount and for how long you’d like to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 50 + + - Scegli l'importo e la durata desiderata di staking. + + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + src/app/components/token/components/token-stake/token-stake.component.html + 52,54 + + - Il tuo capitale si trova nel tuo portafoglio, ma non potrai attingere alla riserva durante il periodo di staking. + + + - You will get staked points based on your input. + + src/app/components/token/components/token-stake/token-stake.component.html + 56,57 + + - Il tuo contributo determinerà l'entità della tua ricompensa di staking. + + + See Staking reward page for more info + + src/app/components/token/components/token-stake/token-stake.component.html + 62 + + Per ulteriori informazioni, visitare la pagina Ricompense di Staking + + + here. + + src/app/components/token/components/token-stake/token-stake.component.html + 63 + + qui. + + + How it works + + src/app/components/token/components/token-stake/token-stake.component.html + 71 + + Come funziona + + + How much you want to stake? + + src/app/components/token/components/token-stake/token-stake.component.html + 87,88 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 21,22 + + Indicare la quantità di token con la quale si desidera fare staking. + + + Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 192 + + Calcolatrice delle Ricompense + + + Staking Value + + src/app/components/token/components/token-stake/token-stake.component.html + 210,219 + + Rendimento da Staking + + + Staked amount * Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 216 + + + src/app/pages/member/pages/activity/activity.page.html + 36 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 107 + + Quantità di token con la quale è stato fatto staking * Calcolatrice delle Ricompense + + + You will earn + + src/app/components/token/components/token-stake/token-stake.component.html + 230 + + Guadagnerai + + + Stake complete. Congratulations. + + src/app/components/token/components/token-stake/token-stake.component.html + 366 + + Congratulazioni! Il processo di staking è stato completato. + + + Token stake submitted. + + src/app/components/token/components/token-stake/token-stake.component.ts + 410 + + La richiesta di staking con token è stata inoltrata. + + + Trade details + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 3 + + Particolarità del Trade + + + Traded amount + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 29,30 + + Volume negoziato + + + Price per token + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 48,49 + + + src/app/pages/token/pages/new/summary/summary.component.html + 69,70 + + Prezzo per token + + + Date and Time + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 79,80 + + Timestamp + + + Fullfilled + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 94,95 + + Realizzato + + + Date + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 109 + + + src/app/pages/member/pages/transactions/transactions.page.html + 22 + + + src/app/pages/nft/pages/nft/nft.page.html + 383 + + + src/app/pages/nft/pages/nft/nft.page.html + 433 + + + src/app/pages/proposal/pages/votes/votes.page.html + 15 + + + src/app/pages/token/pages/trade/trade.page.html + 198 + + + src/app/pages/token/pages/trade/trade.page.html + 272 + + + src/app/pages/token/pages/trade/trade.page.html + 360 + + Data + + + State + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 111 + + Stato + + + Storage deposit fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 144 + + Deposito e spese di stoccaggio + + + Fullfilment + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 171 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 252 + + Realizzazione + + + Seller + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 176 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 247 + + Venditore + + + Transaction + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 204 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 280 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 314 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 358 + + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 41 + + + src/app/pages/member/pages/transactions/transactions.page.html + 74 + + Transazione + + + Non Transferable + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 153 + + + src/app/pages/member/pages/transactions/transactions.page.html + 77 + + Non Trasferibile + + + Processing... + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 155 + + + src/app/pages/member/pages/transactions/transactions.page.html + 87 + + Elaborazione delle immagini... + + + Soonaverse Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 170 + + Costi di Transazione su Soonaverse + + + Exchange Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 172 + + Commissioni di Cambio + + + 24h change/Price + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 46 + + Scambio 24h/Prezzo + + + Markets + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 6 + + + src/app/pages/token/pages/trade/trade.page.html + 1242 + + Mercati + + + No Tokens + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 38,39 + + + src/app/pages/tokens/pages/favourites/favourites.page.html + 25,26 + + Non ci sono Token + + + Cast Vote + + src/app/components/token/components/token-vote/token-vote.component.html + 3 + + Dai il Tuo Voto + + + Question + + src/app/components/token/components/token-vote/token-vote.component.html + 16,17 + + Domanda + + + Selected option + + src/app/components/token/components/token-vote/token-vote.component.html + 23,24 + + Opzione selezionata + + + How do you set your votes? + + src/app/components/token/components/token-vote/token-vote.component.html + 33,34 + + Come imposti i tuoi voti? + + + Total native tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 88,89 + + Importo totale di token nativi + + + Total staked tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 105,106 + + Numero complessivo di token con i quali è stato fatto staking + + + Voting is active on + + src/app/components/token/components/token-vote/token-vote.component.html + 119,120 + + Il sistema di voto sarà operativo il + + + Your total voting weight + + src/app/components/token/components/token-vote/token-vote.component.html + 131,132 + + Il tuo peso di voto complessivo + + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + src/app/components/token/components/token-vote/token-vote.component.html + 151,153 + + Nota: i token con i quali è stato fatto staking possono essere utilizzati una sola volta per partecipare alla votazione. Il peso della tua partecipazione al voto sarà dimezzato se i token con i quali è stato fatto staking saranno già stati utilizzati per un'altra offerta. + + + Cast Votes + + src/app/components/token/components/token-vote/token-vote.component.html + 193 + + Dai i Tuoi Voti + + + Send Native Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 124 + + Invia Token Nativi + + + Use Staked Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 128 + + Usa Token di Staking + + + Vote received. + + src/app/components/token/components/token-vote/token-vote.component.ts + 191 + + Voto ricevuto. + + + Transaction confirmed and funds refunded. + + src/app/components/token/components/token-vote/token-vote.component.ts + 217 + + Conferma della transazione e versamento dell'indennità effettuato. + + + Token vote executed. + + src/app/components/token/components/token-vote/token-vote.component.ts + 375 + + Votazione token effettuata. + + + Token vote order created. + + src/app/components/token/components/token-vote/token-vote.component.ts + 392 + + Ordine di voto token creato. + + + Type + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 13,14 + + Tipo + + + Date + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 22,23 + + Data + + + Manage addresses + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 3 + + Gestione degli indirizzi + + + Not yet verified + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 59 + + Non ancora verificato + + + Change + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 66 + + Rinnovo + + + Verify + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 67 + + Verifica + + + You will be asked to send funds to the new + + src/app/components/wallet-address/verify-address/verify-address.component.html + 33 + + Ti sarà chiesto di inviare capitale al nuovo + + + address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/verify-address/verify-address.component.html + 36,37 + + indirizzo per il processo di approvazione. L'Indirizzo dal quale viene inviato il capitale sarà dotato di un link di collegamento con il tuo + + + space + + src/app/components/wallet-address/verify-address/verify-address.component.html + 41 + + spazio + + + profile + + src/app/components/wallet-address/verify-address/verify-address.component.html + 43 + + profilo + + + for future transactions. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 44 + + per le transazioni future. + + + Generate new address + + src/app/components/wallet-address/verify-address/verify-address.component.html + 55,56 + + Genera un nuovo indirizzo + + + Send a small + + src/app/components/wallet-address/verify-address/verify-address.component.html + 66 + + Invia un piccolo + + + amount to validate your address. This expires in + + src/app/components/wallet-address/verify-address/verify-address.component.html + 67 + + per convalidare il tuo indirizzo. Questo scade in + + + Expired. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 70 + + Scaduto. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/verify-address/verify-address.component.html + 106,107 + + Attendere la convalida di pagamento. Non appena la transazione sarà stata elaborata, riceverai una notifica di convalida della transazione + + + Validating address... + + src/app/components/wallet-address/verify-address/verify-address.component.html + 136 + + Verifica indirizzo... + + + Now you can deal with NFTs and participate in token trading. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 174 + + Adesso puoi scambiare NFT e partecipare al trading di token. + + + Your new address has been verified! + + src/app/components/wallet-address/verify-address/verify-address.component.html + 176 + + Il processo di approvazione del tuo nuovo indirizzo è stato completato! + + + Finish Verification + + src/app/components/wallet-address/verify-address/verify-address.component.html + 181,182 + + Completamento Processo di Approvazione + + + Generate address + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 76 + + Genera un indirizzo + + + Refunding your payment... + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 192 + + Rimborsa pagamento... + + + Address is not verified + + src/app/components/wallet-address/wallet-address.component.html + 4 + + Indirizzo non verificato + + + wallet + + src/app/components/wallet-address/wallet-address.component.html + 25 + + portafoglio digitale + + + Copy address + + src/app/components/wallet-address/wallet-address.component.html + 30 + + Copia l'indirizzo + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + Verifica il tuo + + + address + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + indirizzo + + + This network is currently not enabled. + + src/app/components/wallet-address/wallet-address.component.ts + 82 + + Attualmente la rete non è operativa. + + + Award Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Info: Premio + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 20 + + Proprietario + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 18 + + Badge usati / disponibili + + + Badge lock period + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 20 + + Periodo di blocco del badge + + + Award info + + src/app/pages/award/pages/award/award.page.html + 3 + + + src/app/pages/award/pages/new/new.page.html + 17 + + Info: premio + + + Minted on: + + src/app/pages/award/pages/award/award.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 47 + + Processo di Minting effettuato il + + + Fund Award + + src/app/pages/award/pages/award/award.page.html + 121,122 + + Finanziamento Premio + + + Minting in Progress + + src/app/pages/award/pages/award/award.page.html + 129,130 + + Processo di Minting in Corso + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 136 + + + src/app/pages/award/pages/award/award.page.html + 210 + + Verifica il premio + + + Reject Award + + src/app/pages/award/pages/award/award.page.html + 157 + + Rifiuta Ricompensa + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 166 + + Conferma la tua partecipazione + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 174,176 + + L'intera comunicazione è ora gestita al di fuori della piattaforma, fai sapere al creatore del premio come contattarti. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 180 + + Allega una descrizione o fornisci un link al tuo lavoro. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 188 + + Sottoporre al premio + + + Cancel + + src/app/pages/award/pages/award/award.page.html + 189 + + + src/app/pages/token/pages/trade/trade.page.html + 245 + + + src/app/pages/token/pages/trade/trade.page.html + 333 + + Annullare + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 41 + + + src/app/pages/token/pages/new/new.page.ts + 34 + + + src/app/pages/token/pages/token/token.page.ts + 36 + + Panoramica + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 105 + + Partecipanti + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2 + + Nuovo premio + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14 + + + src/app/pages/award/pages/new/new.page.html + 77 + + + src/app/pages/proposal/pages/new/new.page.html + 24 + + Il titolo è richiesto. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19 + + Il nome e la descrizione saranno inclusi nel Premio. Con la data di chiusura si stabilisce la durata del Premio. + + + Title + + src/app/pages/award/pages/new/new.page.html + 23 + + + src/app/pages/award/pages/new/new.page.html + 29,28 + + + src/app/pages/award/pages/new/new.page.html + 76 + + + src/app/pages/award/pages/new/new.page.html + 83,82 + + + src/app/pages/proposal/pages/new/new.page.html + 23 + + + src/app/pages/proposal/pages/new/new.page.html + 29,28 + + + src/app/pages/proposal/pages/new/new.page.html + 103 + + + src/app/pages/proposal/pages/new/new.page.html + 109,108 + + + src/app/pages/proposal/pages/new/new.page.html + 156 + + + src/app/pages/proposal/pages/new/new.page.html + 162,161 + + + src/app/pages/space/pages/upsert/upsert.page.html + 24 + + + src/app/pages/space/pages/upsert/upsert.page.html + 30,29 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 106 + + + src/app/pages/token/pages/new/overview/overview.component.html + 22 + + + src/app/pages/token/pages/new/overview/overview.component.html + 29,28 + + + src/app/pages/token/pages/new/overview/overview.component.html + 65 + + + src/app/pages/token/pages/new/overview/overview.component.html + 72,71 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 9 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 16,15 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 55 + + Titolo + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 24 + + Devi inserire il nome. + + + End + + src/app/pages/award/pages/new/new.page.html + 36 + + + src/app/pages/award/pages/new/new.page.html + 47,46 + + + src/app/pages/proposal/pages/new/new.page.html + 56 + + + src/app/pages/proposal/pages/new/new.page.html + 68,67 + + Fine + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 37 + + + src/app/pages/proposal/pages/new/new.page.html + 57 + + La data di fine è richiesta. + + + Description + + src/app/pages/award/pages/new/new.page.html + 52 + + + src/app/pages/award/pages/new/new.page.html + 58 + + + src/app/pages/award/pages/new/new.page.html + 91 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 40 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 45 + + + src/app/pages/nft/pages/new/single/single.page.html + 33 + + + src/app/pages/nft/pages/new/single/single.page.html + 38 + + + src/app/pages/proposal/pages/new/new.page.html + 76 + + + src/app/pages/proposal/pages/new/new.page.html + 82 + + + src/app/pages/proposal/pages/new/new.page.html + 119 + + + src/app/pages/proposal/pages/new/new.page.html + 124 + + + src/app/pages/proposal/pages/new/new.page.html + 171 + + + src/app/pages/proposal/pages/new/new.page.html + 176 + + + src/app/pages/space/pages/upsert/upsert.page.html + 36 + + + src/app/pages/space/pages/upsert/upsert.page.html + 41 + + + src/app/pages/token/pages/new/overview/overview.component.html + 37 + + + src/app/pages/token/pages/new/overview/overview.component.html + 43 + + + src/app/pages/token/pages/new/overview/overview.component.html + 80 + + + src/app/pages/token/pages/new/overview/overview.component.html + 86 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 21 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 67 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 21 + + Descrizione + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 69 + + Definizione di badge + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 71 + + Il nome e la descrizione saranno inclusi nel badge. + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 97 + + Descrizione del badge + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 115 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 369 + + + src/app/pages/proposal/pages/new/new.page.html + 205 + + Info: Space + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 117 + + Questo è lo spazio che elencherà il premio. + + + Reward info + + src/app/pages/award/pages/new/new.page.html + 170 + + Info: ricompensa + + + You need to fund this award with native token. Select which token will be used as reward. + + src/app/pages/award/pages/new/new.page.html + 172 + + È necessario finanziare la ricompensa con un token nativo. Scegli il token che verrà utilizzato per la ricompensa. + + + Token is required. + + src/app/pages/award/pages/new/new.page.html + 176 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 247 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + È necessario utilizzare i token. + + + Select a token + + src/app/pages/award/pages/new/new.page.html + 207 + + Seleziona un token + + + Defines the amount of tokens for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 222,223 + + Questo fornisce chiarimenti sulla quantità di token per ogni badge e sul numero di badge disponibili. + + + Invalid token amount per badge + + src/app/pages/award/pages/new/new.page.html + 226 + + Importo token per badge non autorizzato + + + Tokens per badge + + src/app/pages/award/pages/new/new.page.html + 234 + + Token per badge + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 251 + + + src/app/pages/award/pages/new/new.page.html + 338 + + Numero minimo: 1. Numero massimo: 10000. + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 273 + + È necessario determinare il numero di badge che si desidera rendere disponibili per questo premio, ovvero la quantità di premi che si desidera distribuire. + + + Total to be funded + + src/app/pages/award/pages/new/new.page.html + 284,285 + + Importo totale da finanziare + + + Upload image that will be used as a Reward Badge. + + src/app/pages/award/pages/new/new.page.html + 299 + + Caricare l'immagine da utilizzare come Badge di Ricompensa. + + + Badge is required. + + src/app/pages/award/pages/new/new.page.html + 328,329 + + È necessario utilizzare i badge. + + + Set the duration for which the badge will be locked in the Firefly wallet. + + src/app/pages/award/pages/new/new.page.html + 334,335 + + Imposta un periodo di tempo durante il quale il badge sarà bloccato nel portafoglio Firefly. + + + Create award + + src/app/pages/award/pages/new/new.page.html + 369,370 + + Creare premio + + + Award - New + + src/app/pages/award/pages/new/new.page.ts + 119 + + + src/app/pages/award/pages/new/new.page.ts + 134 + + Premio - Novità + + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/award/pages/new/new.page.ts + 120 + + + src/app/pages/award/pages/new/new.page.ts + 135 + + Crea impegno e crescita per le tue DAO e per tutte le community digitali. Impostazioni di sistema bonus/voto senza costo di registrazione, in 1 solo clic. Iscriviti oggi stesso. + + + Member seems to log out during the file upload request. + + src/app/pages/award/pages/new/new.page.ts + 184 + + + src/app/pages/collection/pages/upsert/upsert.page.ts + 403 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 240 + + + src/app/pages/nft/pages/new/single/single.page.ts + 180 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 131 + + + src/app/pages/token/services/new.service.ts + 202 + + Problema apparente di disconnessione membro durante la richiesta di caricamento del file. + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2 + + Descrizione Premio + + + Award - + + src/app/pages/award/pages/overview/overview.page.ts + 17 + + + src/app/pages/award/pages/participants/participants.page.ts + 83 + + Premio - + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 49 + + + src/app/pages/award/pages/participants/participants.page.html + 63 + + + src/app/pages/proposal/pages/participants/participants.page.html + 49 + + + src/app/pages/proposal/pages/participants/participants.page.html + 63 + + Cerca Partecipante + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 72 + + + src/app/pages/proposal/pages/participants/participants.page.html + 72 + + + src/app/pages/space/pages/members/members.page.html + 92 + + Visualizzare solo alcune delle migliori registrazioni... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 90,91 + + + src/app/pages/proposal/pages/participants/participants.page.html + 90,91 + + Non ci sono Partecipanti + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 118,119 + + Premiare + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 138,139 + + Nuova ricompensa + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 50 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 158 + + + src/app/pages/space/pages/awards/awards.page.ts + 30 + + + src/app/pages/space/pages/collections/collections.page.ts + 30 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 30 + + Aperta + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 51 + + Emissione + + + See all participants within the award. + + src/app/pages/award/pages/participants/participants.page.ts + 84 + + + src/app/pages/proposal/pages/overview/overview.page.ts + 60 + + Vedi tutti i partecipanti al premio. + + + applied on + + src/app/pages/award/pages/participants/participants.page.ts + 257 + + domanda inoltrata il + + + Make NFT’s from this collection available on decentralised network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 12,13 + + Rendere disponibili parti di questa collezione di NFT sulla rete decentralizzata. + + + Minting + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 29 + + Minting + + + NFTs left + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 32 + + Restanti NFT + + + Collection is not yet migrated to the decentralized network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 47,48 + + La collezione non è ancora stata trasferita alla rete decentralizzata. + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 611 + + Chi può acquistare? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 63,64 + + Asta aperta + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 76,77 + + Solo Membri dello Spazio + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89,90 + + Spazio riservato ai guardiani + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 102,103 + + Solo Membri dello Spazio con Badge + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 118,119 + + È necessario possedere almeno un NFT per ogni Collezione selezionata + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 126,127 + + (Un NFT per membro) + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 175 + + AirDrop e sconti per i membri + + + discount for members with rewards from this space in total value of + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 190 + + sconto riservato ai membri che hanno accumulato premi in questo spazio per un importo totale corrispondente al valore di + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 5 + + A proposito della collezione + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 22,23 + + Limite di creazione + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 81,82 + + + src/app/pages/collection/pages/collection/collection.page.html + 301,302 + + Pubblicare collezione + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 93,94 + + + src/app/pages/collection/pages/collection/collection.page.html + 313,314 + + Edit Collection + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Le royalties vengono versate a + + + Rank + + src/app/pages/collection/pages/collection/collection.page.html + 170,171 + + + src/app/pages/token/pages/token/token.page.html + 73,74 + + Rank + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 189 + + La vendita avrà inizio alle ore + + + Deposited + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + Depositato + + + Staked + + src/app/pages/collection/pages/collection/collection.page.html + 218 + + È stato fatto Staking + + + Links + + src/app/pages/collection/pages/collection/collection.page.html + 227 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 154,153 + + + src/app/pages/token/pages/new/overview/overview.component.html + 160,159 + + + src/app/pages/token/pages/new/summary/summary.component.html + 307,306 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 79 + + Links + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 330 + + + src/app/pages/collection/pages/collection/collection.page.html + 376 + + Declinare la Collezione + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 346 + + + src/app/pages/collection/pages/collection/collection.page.html + 392 + + Annullare Collezione + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 413 + + + src/app/pages/nft/pages/new/new.page.html + 2 + + Creare NFT + + + Rank amount must be between + + src/app/pages/collection/pages/collection/collection.page.ts + 285 + + + src/app/pages/token/pages/token/token.page.ts + 195 + + Il punteggio di Rank deve essere compreso tra + + + records + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 13 + + + src/app/pages/discover/pages/awards/awards.page.html + 13 + + + src/app/pages/discover/pages/members/members.page.html + 13 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 13 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 13 + + + src/app/pages/market/pages/collections/collections.page.html + 13 + + + src/app/pages/member/pages/nfts/nfts.page.html + 13 + + risultati + + + Filters&Sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 30 + + + src/app/pages/discover/pages/awards/awards.page.html + 30 + + + src/app/pages/discover/pages/members/members.page.html + 30 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 30 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 30 + + + src/app/pages/market/pages/collections/collections.page.html + 30 + + Filtri&Selezione + + + Filters&sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 71 + + + src/app/pages/discover/pages/awards/awards.page.html + 78 + + + src/app/pages/discover/pages/members/members.page.html + 78 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 78 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 79 + + + src/app/pages/market/pages/collections/collections.page.html + 79 + + Filtri&selezione + + + Sort by + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 93,92 + + + src/app/pages/discover/pages/awards/awards.page.html + 94,93 + + + src/app/pages/discover/pages/members/members.page.html + 94,93 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 94,93 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 95,94 + + + src/app/pages/market/pages/collections/collections.page.html + 95,94 + + Seleziona per + + + Price range + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 131 + + Fascia di prezzo + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2 + + Crea una nuova collezione + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3 + + Edit collection + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18 + + Info sulla collezione + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20 + + La denominazione e la descrizione saranno inclusi nella Collezione. + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 58 + + + src/app/pages/nft/pages/new/single/single.page.html + 51 + + Info vendite + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 60 + + Tutte le fasce di fuso orario sono riportate nella fascia di fuso orario dell'utente. Per gli NFT e gli SFT generati, il prezzo viene fissato in questa zona e non può essere modificato sull'NFT. Il prezzo puramente indicativo della collezione classica di NFT può essere modificato sullo stesso NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 90 + + Royalties + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 93,95 + + La percentuale di royalty in questione sarà applicata alla prima creazione di NFT e a tutte le vendite secondarie. L'indirizzo IOTA che trarrà beneficio dalle royalties sarà sempre soggetto a un saldo disponibile di almeno 1 Mi (a causa del meccanismo di protezione della polvere del protocollo IOTA). + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 106 + + Royalties - Quota percentuale + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 116 + + Esempio: 10 % , 20 % , ecc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 124 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 131 + + Le royalties vengono versate in uno spazio distinto + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 155 + + Sul piano delle caratteristiche dell'NFT saranno inclusi dei link. Per Twitter o Discord utilizzare i nomi utente (nome#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 160 + + Non è ammesso l'utilizzo dell'URL. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 167,166 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 312,311 + + + src/app/pages/token/pages/new/overview/overview.component.html + 175,174 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 91,90 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 183 + + Link al tuo account Twitter + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + Nome utente Discord non valido. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 200 + + Link al tuo account Discord + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 215 + + Sconti + + + The discount applies only to members who have earned tokens from awards issued by this space. + + src/app/pages/collection/pages/upsert/upsert.page.html + 217 + + Lo sconto si applica solo ai membri che hanno guadagnato token per i premi emessi in questo spazio. + + + Token amount higher than + + src/app/pages/collection/pages/upsert/upsert.page.html + 231 + + Quantità di token maggiore di + + + Type awarded token... + + src/app/pages/collection/pages/upsert/upsert.page.html + 257 + + Inserire il token ricevuto in premio... + + + Discount % + + src/app/pages/collection/pages/upsert/upsert.page.html + 271 + + Sconto % + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 299 + + Sconto + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 310 + + Sconto XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 330,331 + + Importo dello sconto + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 356 + + Aggiungere il livello di sconto + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 371 + + Questo è lo spazio che conia la collezione NFT. Solo gli spazi con portafogli verificati appaiono nell'elenco a discesa. Assicurati di scegliere lo spazio corretto perché tutti i fondi della vendita di NFT andranno al portafoglio verificato di questo spazio. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 389 + + Tipo di Collezione + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 391 + + Ogni collezione ha le sue caratteristiche che la differenziano dalle altre. Una volta creata, non sarà possibile apportare alcuna modifica alla collezione. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 423,422 + + + src/app/pages/space/pages/upsert/upsert.page.html + 200 + + Banner + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + Il nome è richiesto. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 463 + + Segnaposto + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 493,494 + + Il segnaposto è richiesto. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 503 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 516 + + + src/app/pages/market/pages/collections/collections.page.html + 177 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138 + + Categoria + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 505 + + La categoria è usata quando si filtra il contenuto. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 509 + + Categoria. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 534 + + Impostare la raccolta + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 536 + + Chi ha accesso a una data collezione. + + + Open Sale + + src/app/pages/collection/pages/upsert/upsert.page.html + 545 + + Asta Aperta + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 551 + + Tutti hanno accesso a questa collezione. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 563 + + Solo le guardie spaziali hanno accesso. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 576 + + L' accesso è consentito Solo ai Membri dello Spazio. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 589 + + L' accesso è consentito Solo ai Membri dello Spazio con badge. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 607 + + Opzioni di raccolta + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 625 + + Un NFT Solo per i Membri + + + Select collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 650 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 147 + + + src/app/pages/nft/pages/new/single/single.page.html + 361 + + Seleziona la collezione + + + Select award + + src/app/pages/collection/pages/upsert/upsert.page.html + 669 + + Seleziona il premio + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 691,692 + + Creare una collezione + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 704,705 + + Salva la raccolta + + + Check out collection + + src/app/pages/collection/services/helper.service.ts + 68 + + Verifica collezione + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 5 + + Domande Membri Pendenti + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 16 + + I tuoi spazi + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 32,33 + + Non ci sono ancora spazi + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 41,42 + + Scopri Spazi + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 56 + + Premi attivi + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 68 + + Offerte attive + + + Spaces + + src/app/pages/discover/pages/awards/awards.page.html + 115,114 + + + src/app/pages/discover/pages/discover/discover.page.ts + 9 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 115,114 + + + src/app/pages/market/pages/collections/collections.page.html + 146,145 + + + src/app/pages/member/pages/member/member.page.ts + 65 + + Spazi + + + Discover - Awards + + src/app/pages/discover/pages/awards/awards.page.ts + 58 + + Scopri - Premi + + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/discover/pages/awards/awards.page.ts + 59 + + Esplora modi migliori per avvicinarti alla DAO e adoperati per far crescere la comunità. Impostazioni di sistema bonus/voto senza costi di registrazione, in un solo clic. Iscriviti oggi stesso. + + + Awards + + src/app/pages/discover/pages/discover/discover.page.ts + 10 + + + src/app/pages/member/pages/member/member.page.ts + 64 + + + src/app/pages/space/pages/space/space.page.ts + 47 + + Premi + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 11 + + + src/app/pages/space/pages/space/space.page.ts + 46 + + Proposte + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 12 + + + src/app/pages/space/pages/space/space.page.ts + 48 + + Membri + + + Discover - Members + + src/app/pages/discover/pages/members/members.page.ts + 51 + + Scopri - Membri + + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + src/app/pages/discover/pages/members/members.page.ts + 52 + + Entra a far parte di una community considerata come il fiore all'occhiello dell'imprenditoria d'avanguardia, e dell'innovazione nel campo delle criptovalute. Per unirsi immediatamente utilizza la Metamaschera. + + + Discover - Proposals + + src/app/pages/discover/pages/proposals/proposals.page.ts + 57 + + Scopri - Offerte + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + src/app/pages/discover/pages/proposals/proposals.page.ts + 58 + + Sostieni le community partecipando alla creazione e alla votazione delle offerte e contribuisci a plasmare il futuro delle DAO e del metaverso. Configurazione in UN solo clic. Iscriviti oggi stesso. + + + Discover - Spaces + + src/app/pages/discover/pages/spaces/spaces.page.ts + 54 + + Scopri - Spazi + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/discover/pages/spaces/spaces.page.ts + 55 + + Registrati per ottenere l'implementazione immediata del sistema DAO on Demand, in pochi minuti. Sistemi di e-voting gratuiti su blockchain. Scopri le comunità DAO più sorprendenti sulla piattaforma Soonaverse. + + + Sale type + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Tipo di vendita + + + Collections - NFT + + src/app/pages/market/pages/collections/collections.page.ts + 68 + + Collezioni - NFT + + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + src/app/pages/market/pages/collections/collections.page.ts + 69 + + Un marketplace di Gettoni Non Fungibili (NFT), di oggetti digitali da collezione, dell'arte digitale, dei diritti di proprietà e altro ancora, completamente gratuito. + + + NFT Collections + + src/app/pages/market/pages/market/market.page.html + 2 + + Collezioni NFT + + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/market/pages/market/market.page.html + 11,13 + + Alcune collezioni potrebbero non essere ancora state trasferite alla rete decentralizzata. Sii consapevole di ciò che stai acquistando. + + + I understand + + src/app/pages/market/pages/market/market.page.html + 22,23 + + + src/app/pages/member/pages/tokens/tokens.page.html + 43,44 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 22,23 + + Ho capito + + + Collections + + src/app/pages/market/pages/market/market.page.ts + 12 + + + src/app/pages/market/pages/market/market.page.ts + 33 + + + src/app/pages/space/pages/space/space.page.ts + 45 + + Collezioni + + + Total staked + + src/app/pages/member/pages/activity/activity.page.html + 17,18 + + Totale in stake + + + Staking Value: + + src/app/pages/member/pages/activity/activity.page.html + 29,39 + + Rendimento da Staking: + + + Claimable Reward + + src/app/pages/member/pages/activity/activity.page.html + 47,48 + + Ricompensa Rivendicabile + + + Stake more + + src/app/pages/member/pages/activity/activity.page.html + 104,105 + + Aggiungi a stake + + + Stake + + src/app/pages/member/pages/activity/activity.page.html + 107,108 + + Stake + + + My Staking + + src/app/pages/member/pages/activity/activity.page.html + 133 + + Il mio Staking + + + until + + src/app/pages/member/pages/activity/activity.page.html + 138 + + fino a + + + My Favourites + + src/app/pages/member/pages/activity/activity.page.html + 152 + + I Miei Preferiti + + + View All + + src/app/pages/member/pages/activity/activity.page.html + 155 + + Visualizza tutto + + + Profile Options + + src/app/pages/member/pages/activity/activity.page.html + 172 + + Opzioni profilo + + + Edit Profile + + src/app/pages/member/pages/activity/activity.page.html + 185 + + Modifica profilo + + + Manage Addresses + + src/app/pages/member/pages/activity/activity.page.html + 191 + + + src/app/pages/space/pages/manage/manage.page.html + 27 + + Gestione Indirizzi + + + Export All Transactions + + src/app/pages/member/pages/activity/activity.page.html + 202 + + Esporta tutte le transazioni + + + Request Verification + + src/app/pages/member/pages/activity/activity.page.html + 227 + + + src/app/pages/space/pages/manage/manage.page.html + 85 + + Richiedi la verifica + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + In attesa + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 18,19 + + Emesso + + + No Awards + + src/app/pages/member/pages/awards/awards.page.html + 34,35 + + + src/app/pages/space/pages/awards/awards.page.html + 63,64 + + Nessun premio + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 44,45 + + Scopri Premi + + + Reputation + + src/app/pages/member/pages/badges/badges.page.html + 2 + + + src/app/pages/member/pages/member/member.page.ts + 63 + + Reputazione + + + Spaces + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Spazi + + + Awards + + src/app/pages/member/pages/badges/badges.page.html + 27,28 + + Premi + + + Total Rewards + + src/app/pages/member/pages/badges/badges.page.html + 33,34 + + Ricompense Totali + + + My profile + + src/app/pages/member/pages/member/member.page.html + 13 + + Profilo + + + Profile + + src/app/pages/member/pages/member/member.page.html + 15 + + Profilo + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 27,28 + + Info Profilo + + + Joined + + src/app/pages/member/pages/member/member.page.html + 49 + + Si è aggiunto + + + Member - + + src/app/pages/member/pages/member/member.page.ts + 83 + + Membro - + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 145 + + Attività + + + Transactions + + src/app/pages/member/pages/member/member.page.ts + 147 + + + src/app/pages/member/pages/transactions/transactions.page.html + 18 + + Transazioni + + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + src/app/pages/member/pages/nfts/nfts.page.html + 25,26 + + Procedere all'importazione dell'NFT da un'altra rete verso la piattaforma di Soonaverse sbloccando le varie opzioni di trading. + + + Deposit NFT + + src/app/pages/member/pages/nfts/nfts.page.html + 29,30 + + Deposito NFT + + + No NFTs + + src/app/pages/member/pages/nfts/nfts.page.html + 59,60 + + + src/app/pages/nft/pages/nft/nft.page.html + 744,745 + + Nessuno NFTs + + + Tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 11,12 + + Token + + + Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 20,21 + + Staking + + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + src/app/pages/member/pages/tokens/tokens.page.html + 32,34 + + I token che possono essere richiesti o che non sono ancora stati creati potranno essere cercati solo qui. Il reveal di token creati avverrà sempre in portafogli congiunti quali Firefly o TanglePay. + + + Item + + src/app/pages/member/pages/tokens/tokens.page.html + 57 + + + src/app/pages/member/pages/tokens/tokens.page.html + 324 + + + src/app/pages/member/pages/transactions/transactions.page.html + 23 + + Elemento + + + Total + + src/app/pages/member/pages/tokens/tokens.page.html + 59 + + + src/app/pages/token/pages/trade/trade.page.html + 204 + + + src/app/pages/token/pages/trade/trade.page.html + 278 + + + src/app/pages/token/pages/trade/trade.page.html + 367 + + + src/app/pages/token/pages/trade/trade.page.html + 668 + + Totale + + + Owned + + src/app/pages/member/pages/tokens/tokens.page.html + 87 + + + src/app/pages/member/pages/tokens/tokens.page.html + 170 + + + src/app/pages/nft/pages/nft/nft.page.html + 17 + + Posseduto + + + Airdropped + + src/app/pages/member/pages/tokens/tokens.page.html + 118 + + + src/app/pages/member/pages/tokens/tokens.page.html + 172 + + Distribuito tramite Airdrop + + + from + + src/app/pages/member/pages/tokens/tokens.page.html + 120 + + da + + + Deposit for purchase + + src/app/pages/member/pages/tokens/tokens.page.html + 215 + + Deposito per l'acquisto + + + No tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 258,259 + + Senza token + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 297 + + Staking Attivo + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 300 + + Staking Scaduto + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 307,308 + + Staking Attivo + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 310,311 + + Staking Scaduto + + + Staked From + + src/app/pages/member/pages/tokens/tokens.page.html + 326 + + È stato fatto Staking Dalla + + + Staked Until + + src/app/pages/member/pages/tokens/tokens.page.html + 327 + + È stato fatto Staking Fino al + + + Multiplier + + src/app/pages/member/pages/tokens/tokens.page.html + 329 + + Moltiplicatore + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 330 + + Valore Aggiunto da Staking + + + Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 380 + + Stakes + + + No Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 403,404 + + No Stakes + + + Staked from - to + + src/app/pages/member/pages/tokens/tokens.page.html + 432,433 + + È stato fatto Staking da - a + + + Amount (Multiplier) + + src/app/pages/member/pages/tokens/tokens.page.html + 445,446 + + Ammontare (Moltiplicatore) + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 457,458 + + Valore Aggiunto da Staking + + + Claim + + src/app/pages/member/pages/tokens/tokens.page.ts + 57 + + Richiedi + + + Refund + + src/app/pages/member/pages/tokens/tokens.page.ts + 58 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 19 + + Rimborso + + + Export CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 9 + + Esportare CSV + + + Exporting CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 13 + + Esportazione CSV + + + No transactions + + src/app/pages/member/pages/transactions/transactions.page.html + 120,121 + + Nessuna transazione + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 40 + + Alcuni file non sono stati caricati + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 51,52 + + Utilizzare esclusivamente stringhe composte dai seguenti caratteri: a-z, A-Z, _, -, 0-9. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + Carica CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 67 + + Alcuni NFT sono falsi! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 73 + + Nome del file + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 101 + + Errore + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 160 + + Carica il CSV esistente + + + Upload back once you generate below + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 162 + + Una volta generato sotto carica ancora + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 193,194 + + È necessario in primo luogo caricare le immagini. + + + Generate CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 211 + + Genera CSV + + + Publish NFTs + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 212 + + Pubblica NFTs + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 224,225 + + Per far crescere la tua capacità di creazione di NFT classici devi utilizzare la versione web di Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Singolo + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Multiplo + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14 + + Info NFT + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16 + + Il nome e la descrizione saranno inclusi nel NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 22 + + Il nome è richiesto. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 34 + + + src/app/pages/proposal/pages/new/new.page.html + 77 + + La descrizione è necessaria. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 53 + + Tutte le fasce di fuso orario sono riportate nella fascia di fuso orario dell'utente. Per gli NFT e gli SFT generati il prezzo viene fissato per collezione e non può essere modificato qui. + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 92 + + Le proprietà appaiono sotto il tuo oggetto. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 102 + + Nome della proprietà (es. carattere) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 103 + + Valore (es. Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 115 + + + src/app/pages/nft/pages/new/single/single.page.html + 151 + + + src/app/pages/nft/pages/new/single/single.page.html + 158 + + Nome della proprietà + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 126,125 + + + src/app/pages/nft/pages/new/single/single.page.html + 163 + + + src/app/pages/nft/pages/new/single/single.page.html + 171,170 + + + src/app/pages/nft/pages/new/single/single.page.html + 228,227 + + + src/app/pages/nft/pages/new/single/single.page.html + 266 + + + src/app/pages/nft/pages/new/single/single.page.html + 272,271 + + Valore + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 142 + + Proprietà + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 185 + + Aggiungi proprietà + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 194 + + Le proprietà appaiono sotto il tuo oggetto. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Nome delle statistiche (es. Stamina) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 205 + + Valore (es. 10, 1/10, ecc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 217 + + + src/app/pages/nft/pages/new/single/single.page.html + 254 + + + src/app/pages/nft/pages/new/single/single.page.html + 261 + + Nome statistica + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 245 + + Stat + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287 + + Aggiungi statistica + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 303 + + Carica l'immagine del tuo NFT. Tipi di file supportati: PNG, JPEG, WEBP, MP4. Dimensione massima: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 333 + + I media sono obbligatori + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 348 + + Seleziona una delle tue collezioni per visualizzare questo NFT. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 383,384 + + Creare NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 393,394 + + Anteprima NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 168 + + Nome del file non valido + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 7 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 48 + + + src/app/pages/nft/pages/nft/nft.page.html + 516 + + Controlla nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 109 + + Prezzo Bid corrente più alto + + + remaining + + src/app/pages/nft/pages/nft/nft.page.html + 155 + + rimanente + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 165 + + Asta conclusa + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 173 + + L' Asta non è ancora iniziata + + + NFT is pending other member's transaction + + src/app/pages/nft/pages/nft/nft.page.html + 181 + + Transazione membro pendente dall'utilizzo di un NFT + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 190 + + Collezione in attesa di convalida + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 198 + + La Collezione è stata declinata! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 213 + + Vendi NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 218 + + Modifica Prezzo Fisso + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 223 + + Modifica Asta + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 240,241 + + Fai un'offerta + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 263,264 + + Compra ora + + + Bidding + + src/app/pages/nft/pages/nft/nft.page.html + 281 + + Offerta + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 290 + + Prezzi Bid correnti + + + Past bids + + src/app/pages/nft/pages/nft/nft.page.html + 298 + + Offerte precedenti + + + My biddings + + src/app/pages/nft/pages/nft/nft.page.html + 307 + + Le mie offerte + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 321 + + Membro + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 322 + + Offerta su + + + There are no current bids + + src/app/pages/nft/pages/nft/nft.page.html + 369,370 + + Non ci sono prezzi bid correnti + + + There are no past bids + + src/app/pages/nft/pages/nft/nft.page.html + 419,420 + + Non ci sono prezzi bid precedenti + + + There are no records. + + src/app/pages/nft/pages/nft/nft.page.html + 469,470 + + Non ci sono risultati. + + + Withdraw NFT + + src/app/pages/nft/pages/nft/nft.page.html + 509,510 + + Prelievo NFT + + + History + + src/app/pages/nft/pages/nft/nft.page.html + 522 + + Cronologia + + + Minting in Progress + + src/app/pages/nft/pages/nft/nft.page.html + 556 + + Processo di Minting in Corso + + + Available for specific Member Only + + src/app/pages/nft/pages/nft/nft.page.html + 619 + + Disponibile Solo per Membri specifici + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 647 + + Visualizza tutti i dettagli della transazione di questo NFT sul Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 685 + + A proposito di questa collezione + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 694 + + Mostra + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 695 + + raccolta + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 707,706 + + di + + + Are you sure you want to withdraw NFT from Soonaverse? + + src/app/pages/nft/pages/nft/nft.page.html + 800 + + Se questa è la tua scelta, si prega di prelevare gli NFT dalla piattaforma Soonaverse. + + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + src/app/pages/nft/pages/nft/nft.page.html + 802 + + Una volta effettuato il prelievo l'NFT non sarà più disponibile sulla piattaforma di Soonaverse. L'NFT apparirà allora solo nel proprio portafoglio Firefly. L'importazione a posteriori dell'NFT in Soonaverse è sempre possibile. + + + Confirm with Metamask + + src/app/pages/nft/pages/nft/nft.page.html + 804 + + Conferma con Metamask + + + View + + src/app/pages/nft/pages/nft/nft.page.ts + 82 + + Visualizza + + + NFT Withdrawn. + + src/app/pages/nft/pages/nft/nft.page.ts + 688 + + Prelievi NFT. + + + Oops, it's in another universe + + src/app/pages/nft/pages/not-found/not-found.page.html + 8 + + Oddìo, siamo in un altro universo + + + NFT you are looking for no longer exists on Soonaverse. + + src/app/pages/nft/pages/not-found/not-found.page.html + 12,14 + + Non esiste più un NFT simile a quello che stai cercando sulla piattaforma Soonaverse. + + + Back to Marketplace + + src/app/pages/nft/pages/not-found/not-found.page.html + 22,24 + + Torna indietro al Marketplace + + + Auction Starts + + src/app/pages/nft/services/helper.service.ts + 145 + + Asta di Apertura + + + Auction Ends + + src/app/pages/nft/services/helper.service.ts + 148 + + Asta di chiusura + + + Pool by + + src/app/pages/pool/pages/market/pool.page.html + 3,12 + + Pool by + + + What is Pool? + + src/app/pages/pool/pages/market/pool.page.html + 20,21 + + Cos'è il Pool? + + + Anyone can become a liquidity provider (LP) by depositing an equivalent value of each underlying token in return for pool tokens. These tokens track pro-rata LP shares of the total reserves, and can be redeemed for the underlying assets at any time. + + src/app/pages/pool/pages/market/pool.page.html + 23,26 + + Chiunque può diventare un fornitore di liquidità (LP) depositando fondi dello stesso valore di ciascun token sottostante e ricevere token LP come ricompensa per il deposito di token. L'importo dei token sarà calcolato in proporzione alla quantità totale di liquidità fornita al pool e i token potranno essere scambiati con gli asset sottostanti in qualsiasi momento. + + + Coming SOON + + src/app/pages/pool/pages/market/pool.page.html + 35 + + + src/app/pages/swap/pages/market/swap.page.html + 35 + + Coming SOON + + + See Pool on iotabee + + src/app/pages/pool/pages/market/pool.page.html + 37,39 + + Vedi Pool su iotabee + + + What is iotabee? + + src/app/pages/pool/pages/market/pool.page.html + 49 + + + src/app/pages/swap/pages/market/swap.page.html + 49 + + Iotabee: che cos'è? + + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + src/app/pages/pool/pages/market/pool.page.html + 51,54 + + + src/app/pages/swap/pages/market/swap.page.html + 51,54 + + Iotabee è l'unione tra un protocollo decentralizzato peer-to-peer DEX e un exchange cross-chain semi-centralizzato SWAP, a partire dal quale le persone possono creare liquidità e fare trading di token su IOTA, Shimmer, Shimmer EVM e altre chain compatibili EVM come il BSC. + + + iotabee.com + + src/app/pages/pool/pages/market/pool.page.html + 61,62 + + + src/app/pages/swap/pages/market/swap.page.html + 61,62 + + iotabee.com + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2 + + Nuova proposta + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 3 + + Informazioni sulla proposta + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19 + + Il titolo e la descrizione saranno inclusi nella proposta. Le date di inizio e fine determinano la durata della proposta. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 39 + + + src/app/pages/proposal/pages/new/new.page.html + 50,49 + + Inizio + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 40 + + È richiesta la Data di Apertura. + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 93 + + Informazioni Domanda + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 95 + + Il titolo e la descrizione saranno visualizzati solo per questa domanda. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 104 + + Il titolo della domanda è richiesto. + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 143 + + Testo e descrizione per ogni singola risposta. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 157 + + Il testo di risposta è richiesto. + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 192 + + Aggiungi scelta + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 207 + + Questo è lo spazio che elencherà la proposta. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 259 + + Configurazione Proposte + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 261 + + Definisce chi ha accesso alla proposta e quale è il metodo di voto. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 269 + + Target dei Partecipnti + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 276 + + Tutti i Guardiani + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 283 + + Solo i guardiani possono votare su questa proposta + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 289 + + Tutti i Membri + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 296 + + Tutti i membri possono votare questa proposta + + + Space's Native Token + + src/app/pages/proposal/pages/new/new.page.html + 302 + + + src/app/pages/proposal/services/helper.service.ts + 23 + + Token Nativo Dello Spazio + + + You must have minted token linked to your space first! + + src/app/pages/proposal/pages/new/new.page.html + 313 + + Devi prima aver coniato il token collegato al tuo spazio! + + + All token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 321 + + Tutti i titolari di token possono votare. + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 343,344 + + Creare una proposta + + + Proposal - New + + src/app/pages/proposal/pages/new/new.page.ts + 136 + + + src/app/pages/proposal/pages/new/new.page.ts + 151 + + Novità - Offerta + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + src/app/pages/proposal/pages/new/new.page.ts + 137 + + + src/app/pages/proposal/pages/new/new.page.ts + 152 + + Sostieni le community partecipando alla creazione e alla votazione delle offerte e contribuisci a plasmare il futuro delle DAO e del metaverso. Configurazione immediata, in UN solo clic. Iscriviti oggi stesso. + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 321 + + Opzioni + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 328 + + medaglia + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 332 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 5 + + Risultati finali + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 74 + + Descrizione della proposta + + + Proposal - + + src/app/pages/proposal/pages/overview/overview.page.ts + 59 + + Proposta - + + + Change Vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 23,24 + + Cambiare Voto + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 26,27 + + Adesso Vota + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 38 + + Apertura delle votazioni + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 51 + + Non fai parte del voto + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 55 + + Per poter votare, devi far parte dello spazio prima della creazione della proposta. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 64 + + Accedi per votare + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 68 + + Per votare, devi prima effettuare il login. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 79 + + Procedura di Convalida Guardiano Pendente + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 83 + + Questa proposta non è stata ancora approvata da nessun Guardiano. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 102 + + Peso + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 48 + + Procedura di Voto Pendente + + + Voted + + src/app/pages/proposal/pages/participants/participants.page.ts + 49 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 156 + + Votato + + + Proposal - Participants + + src/app/pages/proposal/pages/participants/participants.page.ts + 83 + + Partecipanti - Offerta + + + See all participants within the proposal + + src/app/pages/proposal/pages/participants/participants.page.ts + 84 + + Vedi tutti i partecipanti all'offerta + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 151 + + si è unito a Soonaverse il + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 12,13 + + Approvare + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 23,24 + + Declino + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 67 + + Votare Tipo di proposta. + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 75 + + Peso totale all'interno di questa proposta per tutti i partecipanti. + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 22 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 22 + + Pietra miliare attuale + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 23 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 23 + + Data di inizio + + + Voting Type + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 26 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 26 + + Tipo di voto + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 27 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 27 + + Peso totale + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 79 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 152 + + Controlla proposta + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 87 + + Risultati attuali + + + (weight: ) + + src/app/pages/proposal/pages/proposal/proposal.page.html + 101,102 + + (peso: ) + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 124 + + Distintivi selezionati + + + Votes + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 42 + + Voti + + + Voter + + src/app/pages/proposal/pages/votes/votes.page.html + 14 + + L'elettore + + + Option (Weight) + + src/app/pages/proposal/pages/votes/votes.page.html + 16 + + Opzione (peso) + + + Expired On + + src/app/pages/proposal/pages/votes/votes.page.html + 18 + + Scaduto Il + + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + src/app/pages/proposal/pages/votes/votes.page.html + 24 + + Una volta effettuato il pagamento delle indennità e liquidate le somme corrispondenti, la votazione è considerata conclusa conferendo ai voti un peso proporzionale. Partecipa nuovamente al voto per poter esprimere il tuo voto. + + + One Member One Vote + + src/app/pages/proposal/services/helper.service.ts + 25 + + Un Membro Un Voto + + + XP Reputation - Space + + src/app/pages/proposal/services/helper.service.ts + 27 + + Reputazione XP - Spazio + + + XP Reputation - Selected Badges + + src/app/pages/proposal/services/helper.service.ts + 29 + + Reputazione XP - Distintivi selezionati + + + Staking + + src/app/pages/soon-staking/pages/staking/staking.page.html + 3,4 + + Staking + + + How much I earn? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 13 + + Qual è l'importo delle plusvalenze? + + + How it works? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 135 + + Come funziona? + + + Stake your tokens to earn rewards and unlock new features. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 137,139 + + Fai staking con i tuoi token e inizia a guadagnare ricompense, nonché a sbloccare nuove funzionalità. + + + Unique Perks for stakers + + src/app/pages/soon-staking/pages/staking/staking.page.html + 160 + + Particolari Benefici per gli staker + + + Rewards + + src/app/pages/soon-staking/pages/staking/staking.page.html + 167,168 + + Ricompense + + + Trading Bonuses + + src/app/pages/soon-staking/pages/staking/staking.page.html + 180 + + Bonus Trading + + + Unique Features + + src/app/pages/soon-staking/pages/staking/staking.page.html + 193 + + Funzionalità Uniche + + + Earn more er than you think + + src/app/pages/soon-staking/pages/staking/staking.page.html + 209 + + Guadagna er di quanto si pensi + + + The more you hold, the more rewards you get. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 214,215 + + Più hai, più ricompense si riceverai. + + + New + + src/app/pages/space/pages/awards/awards.page.html + 43 + + + src/app/pages/space/pages/collections/collections.page.html + 48 + + + src/app/pages/space/pages/proposals/proposals.page.html + 42 + + Nuovo + + + award + + src/app/pages/space/pages/awards/awards.page.html + 44 + + premio + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 31 + + + src/app/pages/space/pages/members/members.page.html + 45 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 31 + + Operative + + + Space - Awards + + src/app/pages/space/pages/awards/awards.page.ts + 54 + + Spazio - Premi + + + Space's awards + + src/app/pages/space/pages/awards/awards.page.ts + 55 + + Premi dello spazio + + + No Collections + + src/app/pages/space/pages/collections/collections.page.html + 69,70 + + Nessuna raccolta + + + Space - Collections + + src/app/pages/space/pages/collections/collections.page.ts + 65 + + Spazio - Collezioni + + + Space's collections + + src/app/pages/space/pages/collections/collections.page.ts + 66 + + Collezioni dello spazio + + + Space Options + + src/app/pages/space/pages/manage/manage.page.html + 2 + + Opzioni Spazio + + + Token Options + + src/app/pages/space/pages/manage/manage.page.html + 6 + + Opzioni Token + + + Edit Space + + src/app/pages/space/pages/manage/manage.page.html + 21 + + Modifica Spazio + + + Manage Guardians + + src/app/pages/space/pages/manage/manage.page.html + 38 + + Gestisci Guardiani + + + Export Current Members + + src/app/pages/space/pages/manage/manage.page.html + 44 + + Esporta Membri Attuali + + + Create New Award + + src/app/pages/space/pages/manage/manage.page.html + 57 + + Crea Nuova Ricompensa + + + Create New Proposal + + src/app/pages/space/pages/manage/manage.page.html + 68 + + Crea Nuova Proposta + + + Create New Collection + + src/app/pages/space/pages/manage/manage.page.html + 79 + + Crea Nuova Collezione + + + Edit Token + + src/app/pages/space/pages/manage/manage.page.html + 105 + + Modifica Token + + + Create Airdrop + + src/app/pages/space/pages/manage/manage.page.html + 127 + + Crea Airdrop + + + Staking Reward Schedule + + src/app/pages/space/pages/manage/manage.page.html + 135 + + Pianificazione Ricompensa Staking + + + Export Current Stakers + + src/app/pages/space/pages/manage/manage.page.html + 141 + + Esporta Stakers Correnti + + + Active + + src/app/pages/space/pages/members/members.page.html + 18,19 + + Attivo + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 35,36 + + Bloccato + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 52 + + Bloccato + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 67 + + + src/app/pages/space/pages/members/members.page.html + 82 + + Trova Membri + + + No Members + + src/app/pages/space/pages/members/members.page.html + 110,111 + + Nessun Membro + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 118 + + spazio unito su + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 161,162 + + Rimuovi Guardiano + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 174,175 + + Nomina Guardiano + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 184,185 + + Disabilita Accesso ai Contenuti Membro + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 187,188 + + Accetta Membro + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 190,191 + + Abilita Accesso ai Contenuti Membro + + + Space - Members + + src/app/pages/space/pages/members/members.page.ts + 76 + + Spazio - Membri + + + Space's members + + src/app/pages/space/pages/members/members.page.ts + 77 + + Membri dello spazio + + + Upcoming Sale + + src/app/pages/space/pages/overview/overview.page.html + 7 + + Prossime Vendite + + + Live Token Sale + + src/app/pages/space/pages/overview/overview.page.html + 9 + + Vendita Diretta Token + + + Space - + + src/app/pages/space/pages/overview/overview.page.ts + 55 + + Spazio - + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 43 + + proposta + + + No Proposals + + src/app/pages/space/pages/proposals/proposals.page.html + 62,63 + + Nessuna Proposta + + + Space - Proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 54 + + Spazio - Offerte + + + Space's proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 55 + + Offerte dello spazio + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 34 + + Controlla spazio + + + pending + + src/app/pages/space/pages/space/space-about/space-about.component.html + 153 + + in attesa + + + Export members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 168 + + Esporta membri + + + Exporting members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 172 + + Esportazione membri + + + Open to join instantly + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Apri per partecipare istantaneamente + + + Requires approval to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 183 + + Richiede approvazione per partecipare + + + Requires + + src/app/pages/space/pages/space/space-about/space-about.component.html + 187 + + Richiede + + + staked value to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 193 + + valore Aggiunto da Staking da includere + + + Related Links + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 92 + + Link correlati + + + Claim ownership + + src/app/pages/space/pages/space/space-about/space-about.component.html + 259,260 + + Entra in Possesso + + + Space's Wallet Addresses + + src/app/pages/space/pages/space/space-about/space-about.component.html + 290 + + Indirizzo del portafoglio dello spazio + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 321 + + Lasciare spazio + + + About space + + src/app/pages/space/pages/space/space.page.html + 3 + + Circa lo spazio + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 55,56 + + + src/app/pages/space/pages/space/space.page.html + 118,119 + + Unisciti allo spazio + + + Pending Request + + src/app/pages/space/pages/space/space.page.html + 68 + + + src/app/pages/space/pages/space/space.page.html + 131 + + Domanda Pendente + + + Ask to join Space + + src/app/pages/space/pages/space/space.page.html + 70 + + + src/app/pages/space/pages/space/space.page.html + 133 + + Chiedi per partecipare allo Spazio + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 82,83 + + + src/app/pages/space/pages/space/space.page.html + 160,161 + + Modifica Spazio + + + Stake + + src/app/pages/space/pages/space/space.page.html + 144 + + Stake + + + to Join + + src/app/pages/space/pages/space/space.page.html + 147 + + per Unirsi + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2 + + Aggiungere un nuovo spazio + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3 + + Modifica spazio + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17 + + Info: space + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19 + + Il titolo e la descrizione saranno inclusi nello Spazio. + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 56 + + I link saranno inclusi nel dettaglio dello spazio. Usa i nomi utente degli account per Github, Twitter e Discord (nome#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 97 + + Solo il codice di invito discord supportato (cioè RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 104 + + Inserisci il tuo codice di invito Discord + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 125 + + Tipo di spazio + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 127 + + Ogni collezione ha le sue caratteristiche che la differenziano dalle altre. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 137,138 + + Accesso gratuito per consentire a tutti gli interessati di aderire immediatamente + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 142 + + Richiede l'approvazione dei membri + + + Requires stake value (in space's token) + + src/app/pages/space/pages/upsert/upsert.page.html + 146 + + Richiede il valore in stake (in token dello spazio) + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 174 + + L'Avatar è obbligatorio + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 243,244 + + Creare spazio + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 256,257 + + Salva lo spazio + + + Space - New + + src/app/pages/space/pages/upsert/upsert.page.ts + 76 + + Novità - Spazio + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/space/pages/upsert/upsert.page.ts + 77 + + Registrati per ottenere l'implementazione immediata del sistema DAO on Demand, in pochi minuti. Sistemi di e-voting gratuiti su blockchain, Scopri le comunità DAO più sorprendenti sulla piattaforma Soonaverse. + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 210 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 216 + + Carica nuovo per sostituire quello esistente. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 211 + + Il tuo marchio è fondamentale. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 217 + + Rendilo personale. + + + Swap by + + src/app/pages/swap/pages/market/swap.page.html + 3,12 + + Swap by + + + What is Swap? + + src/app/pages/swap/pages/market/swap.page.html + 20,21 + + Cos'è il Swap? + + + See Swap on iotabee + + src/app/pages/swap/pages/market/swap.page.html + 37,39 + + Vedi Swap su iotabee + + + Create airdrop + + src/app/pages/token/pages/airdrops/airdrops.page.html + 8,9 + + Crea un airdrop + + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/pages/token/pages/airdrops/airdrops.page.html + 17,19 + + Puoi creare un token airdrop di governance per i tuoi membri. Per fare questo, carica un file .csv contenente indirizzi utente e dettagli di allocazione. + + + Some rows have been removed + + src/app/pages/token/pages/airdrops/airdrops.page.html + 92 + + Alcune righe sono state rimosse + + + Submit airdrop + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 118,119 + + Invia airdrop + + + + row is not valid + + src/app/pages/token/pages/airdrops/airdrops.page.ts + 73 + + la riga non è valida + + + Breakdown + + src/app/pages/token/pages/metrics/metrics.page.html + 1 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 284 + + Ripartizione + + + Token distribution + + src/app/pages/token/pages/metrics/metrics.page.html + 5 + + Distribuzione del token + + + Total token supply + + src/app/pages/token/pages/metrics/metrics.page.ts + 56 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 96 + + Total token supply + + + Launchpad price per token + + src/app/pages/token/pages/metrics/metrics.page.ts + 67 + + Prezzo di lancio per token + + + Initial Cap + + src/app/pages/token/pages/metrics/metrics.page.ts + 74 + + Capitalizzazione iniziale + + + Total melted tokens + + src/app/pages/token/pages/metrics/metrics.page.ts + 82 + + Numero complessivo di token sbloccati + + + You can create only ONE token per space and it can never be changed. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 14,15 + + È possibile creare solo un token per spazio e non può mai essere modificato. + + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 23,26 + + Importanti aspetti di cui tenere conto per la creazione di un token su Soonaverse: Si prega di leggere le istruzioni e di compilare il modulo di richiesta disponibile su questo schermo, se si è interessati a rendere disponibile il proprio token alla vendita sulla piattaforma di scambio di Soonaverse. + + + Continue + + src/app/pages/token/pages/new/introduction/introduction.component.html + 38,39 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 191,192 + + + src/app/pages/token/pages/new/overview/overview.component.html + 104,105 + + Continua + + + Token Sale Requirements + + src/app/pages/token/pages/new/introduction/introduction.component.html + 50 + + Condizioni di Vendita di Token + + + To create a public sale or use the Token Exchange you must complete our KYC process. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 52 + + Per poter creare una vendita pubblica o utilizzare la piattaforma di Scambio di Token è necessario completare il nostro processo KYC. + + + Begin Process + + src/app/pages/token/pages/new/introduction/introduction.component.html + 58 + + Avviare il Processo + + + Continue + + + src/app/pages/token/pages/new/introduction/introduction.component.html + 73,74 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 330,331 + + + src/app/pages/token/pages/new/overview/overview.component.html + 214,215 + + Continua + + + Token info + + src/app/pages/token/pages/new/metrics/metrics.component.html + 9 + + + src/app/pages/token/pages/new/summary/summary.component.html + 14 + + + src/app/pages/token/pages/token/token.page.html + 3 + + Informazioni del Token + + + Name is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 16 + + Nome non valido. + + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + src/app/pages/token/pages/new/metrics/metrics.component.html + 33 + + Il simbolo non è valido (la lunghezza deve essere 3 - 5 e le lettere devono essere A-Z). + + + Token supply + + src/app/pages/token/pages/new/metrics/metrics.component.html + 47 + + + src/app/pages/token/pages/new/summary/summary.component.html + 53 + + Total supply + + + Price per token (MIOTA) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 53 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 58 + + Prezzo per token (MIOTA) + + + Price is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 54 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 38 + + Il prezzo non è valido. + + + Total token supply (up to 6 decimals are supported) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 68 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 74 + + Total token supply (sono supportati fino a 6 cifre decimali) + + + Total supply is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 69 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 107 + + La Total supply non è autorizzata. + + + Allocation title + + src/app/pages/token/pages/new/metrics/metrics.component.html + 111 + + Titolo dell’assegnazione + + + % of tokens for sale + + src/app/pages/token/pages/new/metrics/metrics.component.html + 121 + + % di token in vendita + + + Percentage of tokens is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 122 + + Percentuale di token non autorizzata. + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 126 + + % dei token in vendita (Predefinito100%) + + + Only 1 of the allocations can be public + + src/app/pages/token/pages/new/metrics/metrics.component.html + 149 + + Solo 1 delle assegnazioni può essere pubblica + + + Sum of the percentages must be 100 + + src/app/pages/token/pages/new/metrics/metrics.component.html + 155 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 166 + + Somma delle percentuali deve essere 100 + + + Invalid sum of percentages + + src/app/pages/token/pages/new/metrics/metrics.component.html + 160 + + Importo delle percentuali non valido + + + Add allocation + + src/app/pages/token/pages/new/metrics/metrics.component.html + 179 + + Aggiungi assegnazione + + + Token icon + + src/app/pages/token/pages/new/metrics/metrics.component.html + 221 + + + src/app/pages/token/pages/new/summary/summary.component.html + 265 + + Icona del token + + + (Recomended size: 400 x 400px) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 223 + + (Dimensione consigliata: 400 x 400px) + + + Icon is mandatory + + src/app/pages/token/pages/new/metrics/metrics.component.html + 232 + + Icona obbligatoria + + + Token price + + src/app/pages/token/pages/new/metrics/metrics.component.html + 264 + + + src/app/pages/token/pages/new/summary/summary.component.html + 283 + + Prezzo del token + + + Distribution of the token happens after the token offering end date. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 266 + + + src/app/pages/token/pages/new/summary/summary.component.html + 285 + + La distribuzione del token avviene al termine della data di offerta. + + + Configure the token supply first to see breakdown. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 288 + + È necessario, in primo luogo, impostare la Supply per poter vedere la distribuzione. + + + Token terms and conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 298 + + + src/app/pages/token/pages/new/summary/summary.component.html + 324 + + Termini e condizioni del Token + + + Provide link for Terms and Conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 300 + + Inserisci un link alla pagina Termini e Condizioni + + + Terms and Conditions link is invalid. (Start with http:// or https://) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 306 + + I caratteri del link Termini e condizioni non sono consentiti. (Iniziare a digitare gli Url http://; https://) + + + Token allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 75 + + + src/app/pages/token/pages/new/summary/summary.component.html + 165 + + Assegnazione del token + + + Allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 76 + + + src/app/pages/token/pages/new/summary/summary.component.ts + 30 + + Assegnazione + + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 81,82 + + Assicurati che ci sia una sola distribuzione per vendita pubblica: è fondamentale per un'eventuale vendita su Soonaverse. + Una volta creato il token e ottenuta l'approvazione, potrai rendere pubblico il tuo marketplace per la vendita. + + + Create token + + src/app/pages/token/pages/new/new.page.html + 2 + + Crea token + + + Introduction + + src/app/pages/token/pages/new/new.page.ts + 32 + + Introduzione + + + Metrics + + src/app/pages/token/pages/new/new.page.ts + 33 + + + src/app/pages/token/pages/token/token.page.ts + 38 + + Metriche + + + Summary + + src/app/pages/token/pages/new/new.page.ts + 35 + + Riepilogo + + + New Token + + src/app/pages/token/pages/new/new.page.ts + 72 + + Nuovo Token + + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + src/app/pages/token/pages/new/new.page.ts + 73 + + Avvia il tuo progetto della criptovaluta sulla rete Shimmer: il garante a titolo gratuito della sicurezza e della protezione. Crea il tuo token oggi stesso. + + + Token description + + src/app/pages/token/pages/new/overview/overview.component.html + 12 + + + src/app/pages/token/pages/new/summary/summary.component.html + 93 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 6 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 27 + + Descrizione token + + + This text will be displayed on the main token page. + + src/app/pages/token/pages/new/overview/overview.component.html + 14 + + Questo testo sarà visualizzato nella pagina principale del token. + + + Title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 23 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 10 + + Titolo non valido. + + + Description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 38 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 22 + + Descrizione non valida. + + + Short description + + src/app/pages/token/pages/new/overview/overview.component.html + 55 + + + src/app/pages/token/pages/new/summary/summary.component.html + 129 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 49 + + Breve descrizione + + + Short description of the token which will be displayed on the token trading page. + + src/app/pages/token/pages/new/overview/overview.component.html + 57 + + Breve descrizione del token che verrà visualizzato nella pagina di trading . + + + Short title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 66 + + Titolo breve non valido. + + + Short description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 81 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 68 + + Breve descrizione non valida. + + + Overview graphics + + src/app/pages/token/pages/new/overview/overview.component.html + 121 + + Visualizza grafico completo + + + Token introductory video / image + + src/app/pages/token/pages/new/overview/overview.component.html + 123 + + Video / Immaginne introduttiva del Token + + + Introductionary media is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 132 + + Media introduttivi non validi. + + + Invalid URL. (Start with http:// or https://) + + src/app/pages/token/pages/new/overview/overview.component.html + 168 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 84 + + Non è ammesso l'utilizzo dell'URL. (Inizia con http:// o https://) + + + Add link + + src/app/pages/token/pages/new/overview/overview.component.html + 191 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 107 + + Aggiungi link + + + Edit + + src/app/pages/token/pages/new/summary/summary.component.html + 22,23 + + + src/app/pages/token/pages/new/summary/summary.component.html + 61,62 + + + src/app/pages/token/pages/new/summary/summary.component.html + 101,102 + + + src/app/pages/token/pages/new/summary/summary.component.html + 137,138 + + + src/app/pages/token/pages/new/summary/summary.component.html + 173,174 + + Modifica + + + Name + + src/app/pages/token/pages/new/summary/summary.component.html + 30,31 + + Nome + + + Symbol + + src/app/pages/token/pages/new/summary/summary.component.html + 41,42 + + Simbolo + + + Total token supply + + src/app/pages/token/pages/new/summary/summary.component.html + 80,81 + + Total token supply + + + Description title + + src/app/pages/token/pages/new/summary/summary.component.html + 109,110 + + Descrizione titolo + + + Description + + src/app/pages/token/pages/new/summary/summary.component.html + 120,121 + + Descrizione + + + Short description title + + src/app/pages/token/pages/new/summary/summary.component.html + 145,146 + + Breve descrizione titolo + + + Short description + + src/app/pages/token/pages/new/summary/summary.component.html + 156,157 + + Breve descrizione + + + Allocation title + + src/app/pages/token/pages/new/summary/summary.component.html + 187,188 + + Assegnazione titolo + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/summary/summary.component.html + 198,199 + + % di token in vendita (Predefinito100%) + + + Submit token + + src/app/pages/token/pages/new/summary/summary.component.html + 227,228 + + Rimettere token + + + (Recommended size: 400 x 400px) + + src/app/pages/token/pages/new/summary/summary.component.html + 267 + + (Dimensioni consigliate: 400 x 400px) + + + Some description + + src/app/pages/token/pages/new/summary/summary.component.html + 326 + + Qualche descrizione + + + Terms&conditions + + src/app/pages/token/pages/new/summary/summary.component.html + 340 + + Termini&condizioni + + + Submit token + + + src/app/pages/token/pages/new/summary/summary.component.html + 356,357 + + Rimettere token + + + + Trade token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 15,16 + + Scambia token + + + Buy Tokens + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 28,29 + + Acquista Tokens + + + Schedule public sale + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 42,43 + + Pianifica la vendita pubblica + + + Allow Trading + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 57,58 + + Consenti Trading + + + Edit token info + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 86 + + Modifica informazioni sul token + + + Check out token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 100 + + Controlla il token + + + Mint & Approve Token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 132,133 + + Mint & Convalida Token + + + Minting in progress + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 144,145 + + Processo di Minting in corso + + + Token was not made available on decentralised network yet. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 150 + + Il token non è ancora disponibile sulla rete decentralizzata. + + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 153,154 + + Il trasferimento del token verso la rete decentralizzata non è stato ancora avviato. Sii consapevole di ciò che stai acquistando. + + + Trading enabled. + + src/app/pages/token/pages/token/token-buy/token-buy.component.ts + 86 + + Trading abilitato. + + + Short description title is invalid. + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 56 + + Titolo descrizione breve non valido. + + + Short description title + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 61 + + Breve descrizione titolo + + + Short token description + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 73 + + Descrizione breve del Token + + + Sale Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 4 + + Info Vendita + + + Sale schedule + + src/app/pages/token/pages/token/token-info/token-info.component.html + 10 + + Pianifica vendita + + + During cooldown period you are able to trigger refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 41 + + Possibilità di attivazione del servizio di rimborso in fase cooldown. + + + No Cooldown. Participants can't refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 75,76 + + Nessun Raffreddamento. I partecipanti non possono rimborsare. + + + Token Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 80 + + + src/app/pages/token/pages/trade/trade.page.html + 57 + + + src/app/pages/token/pages/trade/trade.page.html + 624 + + Informazioni Token + + + My purchased tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 4 + + I Miei Token acquistati + + + + + + + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 78,80 + + + + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 90,92 + + Obiettivo di vendita token raggiunto! Il calcolo di emissione token sarà effettuato in modo equo e le eccedenze saranno rimborsate. + + + Your Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 21 + + Il Tuo Deposito + + + Potential Tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 22 + + Token potenziali + + + Token Owned + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 23 + + Token Posseduti + + + Total Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 24 + + Deposito Totale + + + Total Participants + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 25 + + Partecipanti totali + + + Sale ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 45 + + Le vendite terminano tra + + + Cooldown in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 62 + + Cooldown in corso + + + Sale in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 64 + + Vendita in corso + + + Sale starts in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 69 + + L' asta si apre in + + + Cooldown ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 73 + + Termine cooldown in + + + + + + + src/app/pages/token/pages/token/token.page.html + 47,48 + + + + + Airdrops + + src/app/pages/token/pages/token/token.page.ts + 41 + + Airdrops + + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + src/app/pages/token/pages/token/token.page.ts + 100 + + + src/app/pages/token/pages/trade/trade.page.ts + 275 + + Compra, vendi e scambia SOON e Shimmer token su un exchange layer 1: una piattaforma di scambio decentralizzata e autonoma, che garantisce sicurezza e protezione. In soli pochi minuti. Unisciti a noi oggi stesso. + + + Ongoing Sale + + src/app/pages/token/pages/token/token.page.ts + 248 + + Asta In Corso + + + Scheduled + + src/app/pages/token/pages/token/token.page.ts + 250 + + Pianificato + + + Cooldown + + src/app/pages/token/pages/token/token.page.ts + 252 + + Cooldown + + + Processing + + src/app/pages/token/pages/token/token.page.ts + 254 + + In lavorazione + + + Order book + + src/app/pages/token/pages/trade/trade.page.html + 94 + + + src/app/pages/token/pages/trade/trade.page.html + 644 + + Libro degli Ordini + + + Token chart + + src/app/pages/token/pages/trade/trade.page.html + 102 + + + src/app/pages/token/pages/trade/trade.page.html + 795 + + Andamento grafico Token + + + My trading + + src/app/pages/token/pages/trade/trade.page.html + 158 + + I miei ordini di acquisto/vendita + + + Open buy orders + + src/app/pages/token/pages/trade/trade.page.html + 166 + + Aprire gli ordini di acquisto + + + Open sell orders + + src/app/pages/token/pages/trade/trade.page.html + 174 + + Aprire gli ordini di vendita + + + Order history + + src/app/pages/token/pages/trade/trade.page.html + 182 + + Storico degli ordini + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 213 + + + src/app/pages/token/pages/trade/trade.page.html + 287 + + Completato + + + There are no buys + + src/app/pages/token/pages/trade/trade.page.html + 257,258 + + Non ci sono posizioni di acquisto aperte + + + Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 321,322 + + + src/app/pages/token/pages/trade/trade.page.html + 416,417 + + Annullato + + + Expired + + src/app/pages/token/pages/trade/trade.page.html + 324,325 + + + src/app/pages/token/pages/trade/trade.page.html + 422,423 + + Scaduto + + + There are no sells + + src/app/pages/token/pages/trade/trade.page.html + 345,346 + + Non ci sono posizioni di vendita aperte + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 388 + + + src/app/pages/token/pages/trade/trade.page.html + 1213 + + Vendita + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 404,405 + + Completato + + + Partially Fulfilled / Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 410,411 + + Parzialmente Soddisfatto / Annullato + + + Fulfilled / Cancelled (unfulfillable) + + src/app/pages/token/pages/trade/trade.page.html + 419,420 + + Soddisfatti / Annullati (insoddisfatti) + + + There is no order history + + src/app/pages/token/pages/trade/trade.page.html + 434,435 + + Nessun risultato trovato per storico degli ordini + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 477,478 + + + src/app/pages/token/pages/trade/trade.page.html + 488,489 + + + src/app/pages/token/pages/trade/trade.page.html + 919,920 + + Vendi + + + Available + + src/app/pages/token/pages/trade/trade.page.html + 530,531 + + Disponibile + + + Current Price + + src/app/pages/token/pages/trade/trade.page.html + 542 + + Prezzo attuale + + + Change 24h + + src/app/pages/token/pages/trade/trade.page.html + 564,565 + + Variazione 24h + + + ( ~ ) + + src/app/pages/token/pages/trade/trade.page.html + 729,732 + + ( ~ ) + + + current price + + src/app/pages/token/pages/trade/trade.page.html + 737,738 + + prezzo corrente + + + There is no activity yet + + src/app/pages/token/pages/trade/trade.page.html + 788,789 + + Non ci sono ancora attività di acquisto o di vendita + + + Trade history + + src/app/pages/token/pages/trade/trade.page.html + 829,830 + + Cronologia degli scambi + + + There is no trade history + + src/app/pages/token/pages/trade/trade.page.html + 894,895 + + Nessun risultato trovato per storico di acquisto/vendita + + + You don’t have enough tokens + + src/app/pages/token/pages/trade/trade.page.html + 928 + + La quantità di token posseduti non è sufficiente + + + Amount to + + src/app/pages/token/pages/trade/trade.page.html + 935,936 + + Dimensione del lotto che intendi + + + Balance + + src/app/pages/token/pages/trade/trade.page.html + 979 + + Saldo + + + Set your price per 1 + + src/app/pages/token/pages/trade/trade.page.html + 998,1000 + + Fissa il tuo prezzo a 1 + + + LIMIT PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1009,1010 + + PREZZO LIMITE + + + MARKET PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1017,1018 + + PREZZO DI MERCATO + + + ~ + + src/app/pages/token/pages/trade/trade.page.html + 1038,1041 + + + src/app/pages/token/pages/trade/trade.page.html + 1145,1148 + + ~ + + + Set Current Price + + src/app/pages/token/pages/trade/trade.page.html + 1069 + + Imposta il Prezzo Corrente + + + Set BID + + src/app/pages/token/pages/trade/trade.page.html + 1093,1104 + + Imposta BID + + + The bid price is the highest price that a particular buyer is willing to pay. + + src/app/pages/token/pages/trade/trade.page.html + 1100 + + Il prezzo bid rappresenta il prezzo più alto che un determinato acquirente è disposto a pagare. + + + Set ASK + + src/app/pages/token/pages/trade/trade.page.html + 1109,1120 + + Imposta ASK + + + The asking price is the minimum price that an individual would be willing to sell their asset. + + src/app/pages/token/pages/trade/trade.page.html + 1116 + + Per prezzo ask si intende il prezzo minimo auspicato dal singolo per la vendita dei suoi asset tokenizzati. + + + You will spend + + src/app/pages/token/pages/trade/trade.page.html + 1129,1130 + + Spenderai + + + Minimum total has to be at least + + src/app/pages/token/pages/trade/trade.page.html + 1163 + + Il totale minimo deve essere almeno + + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + src/app/pages/token/pages/trade/trade.page.html + 1179 + + L'importo pari al 2,5% del prezzo di vendita è destinato alla tesoreria di Soonaverse. Non ci sono commissioni aggiuntive o nascoste. Sei libero di acquistare token. + + + 1h + + src/app/pages/token/pages/trade/trade.page.ts + 118 + + 1h + + + 4h + + src/app/pages/token/pages/trade/trade.page.ts + 119 + + 4h + + + 1d + + src/app/pages/token/pages/trade/trade.page.ts + 120 + + 1gg. + + + 1w + + src/app/pages/token/pages/trade/trade.page.ts + 121 + + 1sett. + + + Bids + + src/app/pages/token/pages/trade/trade.page.ts + 563 + + Offerte + + + Asks + + src/app/pages/token/pages/trade/trade.page.ts + 567 + + Richieste + + + Cancelled + + src/app/pages/token/services/helper.service.ts + 201 + + Cancellato + + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 42 + + Scopri le migliori criptovalute Shimmer, IOTA e SOON. Grafici a linee e profili di criptovalute su L1: una piattaforma di scambio decentralizzata e autonoma che garantisce sicurezza e protezione! Iscriviti oggi stesso. + + + Go to trading pairs to add your favourite tokens. + + src/app/pages/tokens/pages/favourites/favourites.page.html + 47,48 + + Vai su Coppie di Trading e aggiungi i tuoi token preferiti. + + + Add favourites + + src/app/pages/tokens/pages/favourites/favourites.page.html + 56,57 + + Aggiungi ai preferiti + + + Tokens - Favourite + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 52 + + Token - Preferiti + + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 53 + + Compra, scambia e detieni i tuoi token Shimmer, IOTA e SOON preferiti. La nostra piattaforma di scambio layer 1, decentralizzata e autonoma, garante di sicurezza e protezione aspetta solo te! Iscriviti oggi stesso. + + + Tokens - Launchpad + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 41 + + Launchpad - Token + + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 42 + + Aumenta il tuo capitale, il riconoscimento e fai crescere l'audience, LANCIA i tuoi token Shimmer attraverso il progetto Soonaverse Launchpad. Unisciti a noi, oggi. + + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/tokens/pages/tokens/tokens.page.html + 11,13 + + Alcuni token potrebbero non essere ancora stati trasferiti alla rete decentralizzata. Sii consapevole di ciò che stai acquistando. + + + Highlighted Token + + src/app/pages/tokens/pages/tokens/tokens.page.html + 49 + + Token In Evidenza + + + Favorites + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 17 + + Preferiti + + + All tokens + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 20 + + Tutti i token + + + Trading pairs + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 21 + + Coppie di scambio + + + Launchpad + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 22 + + Launchpad + + + Tokens - Trading Pairs + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 43 + + Token - Coppie di Trading + + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 44 + + L'elenco più completo di progetti Shimmer, coppie valutarie SOON e rispettivi mercati, su un exchange layer 1: una piattaforma di trading decentralizzata e autonoma, che garantisce sicurezza e protezione. Registrati oggi stesso! + + + AuditOne Validation + + src/app/service-modules/audit-one/components/modal/modal.component.html + 3 + + Convalida AuditOne + + + Requested On + + src/app/service-modules/audit-one/components/modal/modal.component.html + 22 + + Richiesto il + + + Last Update + + src/app/service-modules/audit-one/components/modal/modal.component.html + 23 + + Ultimo Aggiornamento + + + There are no records. + + src/app/service-modules/audit-one/components/modal/modal.component.html + 52 + + Non ci sono risultati. + + + AuditOne + + src/app/service-modules/audit-one/components/widget/widget.component.html + 11 + + AuditOne + + + Verified + + src/app/service-modules/audit-one/components/widget/widget.component.html + 47 + + Verificato + + + See more + + src/app/service-modules/audit-one/components/widget/widget.component.html + 52 + + Vedi altro + + + + diff --git a/src/locale/messages.ja-JP.xlf b/src/locale/messages.ja-JP.xlf new file mode 100644 index 0000000..0fc32fc --- /dev/null +++ b/src/locale/messages.ja-JP.xlf @@ -0,0 +1,6844 @@ + + + + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 69 + + Back + + + Discover + + src/app/@shell/ui/header/header.component.html + 56,57 + + + src/app/pages/home/home.page.html + 18,19 + + Discover + + + Create new + + src/app/@shell/ui/header/header.component.html + 62 + + Create new + + + Space + + src/app/@shell/ui/header/header.component.html + 68,69 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 83,84 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 6,7 + + + src/app/pages/collection/pages/collection/collection.page.html + 54,55 + + + src/app/pages/market/pages/collections/collections.page.html + 122,123 + + + src/app/pages/market/pages/nfts/nfts.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 69,70 + + Space + + + Proposal + + src/app/@shell/ui/header/header.component.html + 71,72 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 23,24 + + Proposal + + + Award + + src/app/@shell/ui/header/header.component.html + 74,75 + + + src/app/pages/award/pages/award/award.page.html + 26,27 + + Award + + + Collection + + src/app/@shell/ui/header/header.component.html + 77,78 + + + src/app/pages/collection/pages/collection/collection.page.html + 19,20 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 114,115 + + + src/app/pages/nft/pages/new/single/single.page.html + 336,337 + + + src/app/pages/space/pages/collections/collections.page.html + 26 + + Collection + + + None. + + src/app/@shell/ui/header/header.component.html + 128,129 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 52 + + None. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 137,138 + + + src/app/components/auth/services/auth.service.ts + 315 + + My Profile + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 152,153 + + Purchase has not been completed + + + You have + + src/app/@shell/ui/header/header.component.html + 154 + + You have + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 154,155 + + to finish your transaction + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 156,157 + + Open Checkout + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 272 + + You won the NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 273 + + You are a proud owner of a new NFT. Congratulations! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 280 + + You lost your bid! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 281 + + Your bid on + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 282 + + was outbid. Try again! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 289 + + just offered + + + for + + src/app/@shell/ui/header/header.component.ts + 290 + + + src/app/components/timeline-nft/timeline-nft.component.html + 60 + + for + + + Your + + src/app/@shell/ui/header/header.component.ts + 291 + + Your + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 292 + + has received a new bid for + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 300,299 + + Unsupported + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 301 + + This notification is not yet supported in your language + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 12 + + Space + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 17 + + Proposal + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 22 + + Award + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27 + + Collection + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 34,35 + + Connect to your MetaMask wallet + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 52,53 + + Log out + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 56,57 + + Powered by + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8,10 + + The page you were looking for was not found + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 11,13 + + Discover Soonaverse + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 28,29 + + See Docs + + + Coming SOON + + src/app/@shell/ui/sider/sider.component.html + 35,36 + + + src/app/pages/award/pages/new/new.page.html + 271,272 + + + src/app/pages/award/pages/new/new.page.html + 281,282 + + + src/app/pages/award/pages/new/new.page.html + 291,292 + + Coming SOON + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 8,9 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 9,10 + + Connect to your Metamask wallet + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 20,21 + + Make sure you select public IOTA EVM Chain in MetaMask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 22,23 + + Network Name: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23,24 + + RPC URL: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 24,25 + + Chain ID: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 31,32 + + + src/app/pages/award/pages/award/award.page.html + 154 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 152 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 184 + + Cancel + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 1,3 + + Connect + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Disconnect + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 111 + + Unable to sign transaction. Please try to reload page. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 156 + + You must unlock your MetaMask first! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 167 + + You must enable access to read your account address. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 189 + + Please make sure you select address in MetaMask! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 196 + + Unable to get nonce to authenticate! + + + You have to open Soonaverse in MetaMask app. + + src/app/components/auth/services/auth.service.ts + 239 + + You have to open Soonaverse in MetaMask app. + + + Failed to initialize MetaMask, try to reload page. + + src/app/components/auth/services/auth.service.ts + 241 + + Failed to initialize MetaMask, try to reload page. + + + Pending + + + src/app/components/award/components/award-status/award-status.component.html + 1,2 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 1,2 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 1,2 + + Pending + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 3,4 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 3,4 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 3,4 + + Rejected + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 5 + + + src/app/pages/space/pages/awards/awards.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 25 + + Completed + + + Available + + src/app/components/award/components/award-status/award-status.component.html + 6 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 62 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 150,149 + + + src/app/pages/collection/pages/collection/collection.page.html + 91,92 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 39,37 + + + src/app/pages/space/pages/collections/collections.page.ts + 24 + + Available + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 4 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 553,554 + + Space Members Only + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 542,543 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 14 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 564,565 + + Space Members with Badge Only + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 574,575 + + At least one NFT from Collections + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 19 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 43,44 + + Starts in + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 21 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 46,47 + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26,27 + + days + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 24 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 50,51 + + Starts today + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 42 + + Limited Edition + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 57 + + Pending approval + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 67 + + + src/app/pages/space/pages/awards/awards.page.ts + 26 + + + src/app/pages/space/pages/collections/collections.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 26 + + Rejected + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 2,3 + + + src/app/pages/nft/pages/new/single/single.page.html + 342,343 + + Collection is required. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 11,12 + + Select Collection + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 65,67 + + Select a Collection + + + Search + + src/app/components/collection/components/select-collection/select-collection.component.html + 74 + + + src/app/components/space/components/select-space/select-space.component.html + 74 + + + src/app/pages/discover/pages/discover/discover.page.html + 22,23 + + + src/app/pages/market/pages/market/market.page.html + 22,23 + + Search + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 84 + + + src/app/components/space/components/select-space/select-space.component.html + 84 + + No results for + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 14,13 + + All Collections + + + Wallet details + + src/app/components/member/components/member-about/member-about.component.html + 42,43 + + Wallet details + + + Member's Wallet Address. + + src/app/components/member/components/member-about/member-about.component.html + 44,45 + + Member's Wallet Address. + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 55,56 + + Recently joined spaces + + + All + + src/app/components/member/components/member-about/member-about.component.html + 58,59 + + + src/app/pages/discover/pages/spaces/spaces.page.ts + 28,27 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 38,37 + + All + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 78,79 + + No Contribution Yet. + + + Latest Badges + + src/app/components/member/components/member-about/member-about.component.html + 84,85 + + Latest Badges + + + No badges + + src/app/components/member/components/member-about/member-about.component.html + 93,94 + + No badges + + + See all + + src/app/components/member/components/member-about/member-about.component.html + 97,98 + + See all + + + Connections + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 5 + + + src/app/pages/member/pages/activity/activity.page.html + 68 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 50,51 + + Connections + + + Awards + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 6 + + + src/app/pages/discover/pages/discover/discover.page.ts + 23 + + + src/app/pages/member/pages/member/member.page.ts + 27 + + + src/app/pages/space/pages/space/space.page.ts + 33 + + Awards + + + XP + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 7 + + + src/app/components/member/components/member-card/member-card.component.html + 31,32 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 16,17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 25,26 + + XP + + + Total reputation + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 29 + + Total reputation + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 38,39 + + awards + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 6,7 + + Display Name + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 7,8 + + Set a display name. This does not change your username. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 11 + + Display name (optional) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 18,19 + + About + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19,20 + + A brief description of yourself shown on your profile. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 22 + + Your description (optional) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 29,30 + + + src/app/pages/space/pages/upsert/upsert.page.html + 154 + + Avatar + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 30,31 + + Customise your Soonaverse identity. + + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 34,37 + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 43,44 + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 49,50 + + + src/app/pages/space/pages/upsert/upsert.page.html + 52,53 + + Networking + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 51,52 + + + src/app/pages/space/pages/upsert/upsert.page.html + 60,61 + + Invalid Github username. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 53,54 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67,68 + + Type your Github account username + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 63,64 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 206,207 + + + src/app/pages/space/pages/upsert/upsert.page.html + 80,81 + + Invalid Twitter username. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 65,66 + + + src/app/pages/space/pages/upsert/upsert.page.html + 87,88 + + Type your Twitter account username + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,76 + + Only username#1234 format supported. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 77,78 + + Type your Discord account username + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 89,90 + + Settings + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 91,92 + + Save changes + + + reputation + + src/app/components/member/components/member-reputation-drawer/member-reputation-drawer.component.html + 15 + + + src/app/components/member/components/member-reputation-modal/member-reputation-modal.component.html + 17 + + reputation + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 15,16 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 29,30 + + Make a bid + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 44,45 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 9,10 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 44,45 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46,47 + + NFT image + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 61 + + Ends + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 66 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 63 + + Royalties + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 72,73 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 116,117 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 66,67 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 69,70 + + Royalties are automatically deducted and paid to artists. + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 91 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 94 + + Current highest bid + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 92 + + + src/app/pages/nft/pages/nft/nft.page.html + 59 + + Min bid + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 95 + + + src/app/pages/nft/pages/nft/nft.page.html + 61 + + Your bid is the highest + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Current price is refreshing in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 152,153 + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 156,157 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 196,197 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 277,278 + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + + By checking this box, you agree with + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 162,163 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 108,109 + + By checking this box, you agree with + + + Terms and Conditions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 165,166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 111,112 + + Terms and Conditions + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 171 + + Make a bid + + + Send IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 180,181 + + Send IOTA to following address (please restake after!): + + + Copied + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 189 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 240 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150 + + + src/app/components/share/share.component.html + 11 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 139 + + + src/app/components/wallet-address/wallet-address.component.html + 24 + + Copied + + + Copy + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 190 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 241 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 151 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 140 + + + src/app/components/wallet-address/wallet-address.component.html + 25 + + Copy + + + Do not send funds from an exchange, always use wallets you fully control. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 201 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + Do not send funds from an exchange, always use wallets you fully control. + + + Firefly + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 210 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 166 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 151 + + Firefly + + + Tanglepay + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 219 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 300 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 175 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 160 + + Tanglepay + + + Send + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130 + + Send + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231,232 + + IOTA to following address (please restake after!): + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 247 + + Your transactions + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 253,254 + + Sent Date + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 254,255 + + Time + + + Action + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,256 + + Action + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 256,257 + + + src/app/pages/nft/pages/nft/nft.page.html + 170,171 + + + src/app/pages/nft/pages/nft/nft.page.html + 204,205 + + Amount + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 258,259 + + Detail + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 270,271 + + + src/app/pages/nft/pages/nft/nft.page.html + 171,172 + + + src/app/pages/nft/pages/nft/nft.page.html + 190,191 + + + src/app/pages/nft/pages/nft/nft.page.html + 205,206 + + + src/app/pages/nft/pages/nft/nft.page.html + 219,220 + + Link + + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 282 + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 314,315 + + Congratulations you won the NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 320 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 238 + + Close checkout + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 325 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 243 + + Show my NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 337,338 + + Bidding is expired. Good luck next time :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 227 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 368 + + Generated NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 229 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 370 + + SFT + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 47,48 + + day + + + Price + + src/app/components/nft/components/nft-card/nft-card.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 12 + + + src/app/pages/collection/pages/collection/collection.page.html + 190 + + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 65 + + + src/app/pages/market/pages/collections/collections.page.html + 162 + + + src/app/pages/market/pages/nfts/nfts.page.html + 50 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 71,72 + + + src/app/pages/nft/pages/new/single/single.page.html + 62 + + Price + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 73 + + Current bid + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 88,89 + + Owned by + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 100,101 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 155,154 + + New NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 15,16 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 29,30 + + Checkout + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 71,72 + + Total price + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 117 + + Confirm and Lock + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121 + + Your NFT will be locked for purchase for + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121,122 + + minutes + + + remaining to make the transfer. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 132,133 + + remaining to make the transfer. + + + Expired + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 133,134 + + Expired + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 137 + + We received invalid amount. Try again. + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141,142 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130,131 + + IOTA to following address (please restake after!): + + + Transaction history + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 214 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 177 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 204 + + Transaction history + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 204 + + Validating your transaction... + + + Transaction complete. Congratulations. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 232,233 + + Transaction complete. Congratulations. + + + + + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 10,11 + + + src/app/pages/collection/pages/collection/collection.page.html + 55,56 + + + src/app/pages/collection/pages/collection/collection.page.html + 70,71 + + + + + d + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26 + + d + + + h + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34 + + h + + + hours + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34,35 + + hours + + + m + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42 + + m + + + min + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42,43 + + min + + + s + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50 + + s + + + sec + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50,51 + + sec + + + Sale Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 34 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 50,51 + + Sale Starts + + + Auction Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 37 + + Auction Starts + + + Auction Ends + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 40 + + Auction Ends + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 16,17 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 31,32 + + Preview + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 59,60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 74,75 + + + src/app/pages/nft/pages/nft/nft.page.html + 43,44 + + Current price + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68,69 + + Author + + + Migrate + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100,101 + + + src/app/pages/nft/pages/nft/nft.page.html + 291,292 + + Migrate + + + Shimmer/Mainnet (Tokenization)...SOON. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 102,104 + + + src/app/pages/nft/pages/nft/nft.page.html + 293,295 + + Shimmer/Mainnet (Tokenization)...SOON. + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 108,109 + + + src/app/pages/nft/pages/nft/nft.page.html + 299,300 + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 114,115 + + + src/app/pages/nft/pages/nft/nft.page.html + 305,306 + + IPFS Metadata + + + Preparing... + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 116 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 122 + + Preparing... + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 120,121 + + + src/app/pages/nft/pages/nft/nft.page.html + 312,313 + + IPFS Image + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149,150 + + + src/app/pages/nft/pages/new/single/single.page.html + 297,298 + + + src/app/pages/nft/pages/nft/nft.page.html + 15 + + NFT Image + + + Trade info + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 3,5 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 3,4 + + Trade info + + + Floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 12 + + Floor price + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 41 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 40,41 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 101,102 + + + src/app/pages/nft/pages/new/single/single.page.html + 90,91 + + Available On is required. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 50 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 49,50 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 112,113 + + + src/app/pages/nft/pages/new/single/single.page.html + 100,101 + + Available on + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 57 + + Various auction length coming next sprint once community have a vote! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + Duration of auction is 3 days + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 158 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 91,92 + + Once your listing is complete, you will get a confirmation message. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 159 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Confirm listing + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 62,63 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 532,533 + + Open Sale + + + Specific member(s) only (Transfer) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Specific member(s) only (Transfer) + + + Reserve for specific buyer + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 82,83 + + Reserve for specific buyer + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2,4 + + Trade history + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 6,8 + + Item is yours and yours only + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 11 + + This will make your item unavailable for sale. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 12 + + Stop sale! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 16,17 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 31,32 + + List Item for sale + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 86,87 + + Not for sale + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 90,91 + + Fixed price + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 94,95 + + Auction + + + Donut graph coming SOON. + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 40,41 + + Donut graph coming SOON. + + + Commencing + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 5,6 + + Commencing + + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 7,8 + + In-Progress + + + Completed + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 9,10 + + Completed + + + + Share + + src/app/components/share/share.component.html + 5,6 + + + src/app/components/share/share.component.html + 18,19 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 14,15 + + Share + + + Copy to clipboard + + src/app/components/share/share.component.html + 12 + + Copy to clipboard + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 2,3 + + + src/app/pages/award/pages/new/new.page.html + 109,110 + + + src/app/pages/proposal/pages/new/new.page.html + 248,249 + + Space is required. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 11,12 + + Select Space + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 65,67 + + + src/app/pages/award/pages/new/new.page.html + 138,139 + + + src/app/pages/proposal/pages/new/new.page.html + 277,278 + + Select a space + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 14,13 + + All Spaces + + + No Connections + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 2,3 + + No Connections + + + Rep. weight + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 7,8 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 68,69 + + Rep. weight + + + Status + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 8,9 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 72,73 + + Status + + + Established + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 33 + + Established + + + Recognised + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 34 + + Recognised + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 11,12 + + + src/app/pages/member/pages/member/member.page.html + 30 + + Joined + + + members + + src/app/components/space/components/space-card/space-card.component.html + 28 + + + src/app/pages/discover/pages/members/members.page.html + 55,56 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 10,11 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 35,36 + + members + + + Value range is 0-1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 8 + + Value range is 0-1000 + + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 30,31 + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + + Equal + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 39 + + Equal + + + Half + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 40 + + Half + + + Double + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 41 + + Double + + + Earned Badge + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + Earned Badge + + + with + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + with + + + Show less + + src/app/components/timeline-badges/timeline-badges.component.html + 38 + + + src/app/components/timeline-nft/timeline-nft.component.html + 114 + + Show less + + + Show more + + src/app/components/timeline-badges/timeline-badges.component.html + 39 + + + src/app/components/timeline-nft/timeline-nft.component.html + 115 + + Show more + + + Timeline + + src/app/components/timeline-nft/timeline-nft.component.html + 1 + + Timeline + + + Listed by + + src/app/components/timeline-nft/timeline-nft.component.html + 20 + + Listed by + + + Made available for auction by + + src/app/components/timeline-nft/timeline-nft.component.html + 23 + + Made available for auction by + + + Purchased by + + src/app/components/timeline-nft/timeline-nft.component.html + 59 + + Purchased by + + + details + + src/app/components/timeline-nft/timeline-nft.component.html + 61 + + details + + + Invalid + + src/app/components/timeline-nft/timeline-nft.component.html + 73,74 + + Invalid + + + Listed by space + + src/app/components/timeline-nft/timeline-nft.component.html + 104 + + Listed by space + + + Bill (owner) + + src/app/components/timeline-nft/timeline-nft.component.ts + 46 + + Bill (owner) + + + Bill (royalty) + + src/app/components/timeline-nft/timeline-nft.component.ts + 48 + + Bill (royalty) + + + Credit + + src/app/components/timeline-nft/timeline-nft.component.ts + 51 + + Credit + + + Payment + + src/app/components/timeline-nft/timeline-nft.component.ts + 53 + + Payment + + + Order + + src/app/components/timeline-nft/timeline-nft.component.ts + 55 + + Order + + + Generate address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 12,13 + + Generate address + + + Make transaction + + src/app/components/wallet-address/iota-address/iota-address.component.html + 33,34 + + Make transaction + + + Wait for confirmation + + src/app/components/wallet-address/iota-address/iota-address.component.html + 55,56 + + Wait for confirmation + + + Confirmed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 78,79 + + Confirmed + + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/iota-address/iota-address.component.html + 104,105 + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/iota-address/iota-address.component.html + 105 + + space + + + profile + + src/app/components/wallet-address/iota-address/iota-address.component.html + 106 + + profile + + + for future transactions. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 107,108 + + for future transactions. + + + Generate new address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 111 + + Generate new address + + + Send a small + + src/app/components/wallet-address/iota-address/iota-address.component.html + 120 + + Send a small + + + amount to validate your address. This expires in + + src/app/components/wallet-address/iota-address/iota-address.component.html + 121 + + amount to validate your address. This expires in + + + Expired. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 123,124 + + Expired. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 172 + + Wait for transaction to be validated. We will send back your transaction once completed + + + Validating address... + + src/app/components/wallet-address/iota-address/iota-address.component.html + 194 + + Validating address... + + + Now you can deal with NFT`s + + src/app/components/wallet-address/iota-address/iota-address.component.html + 221,222 + + Now you can deal with NFT`s + + + Finish Verification + + src/app/components/wallet-address/iota-address/iota-address.component.html + 225 + + Finish Verification + + + Not verified + + src/app/components/wallet-address/wallet-address.component.html + 4,5 + + Not verified + + + Verify wallet + + src/app/components/wallet-address/wallet-address.component.html + 9,10 + + Verify wallet + + + Verified + + src/app/components/wallet-address/wallet-address.component.html + 18,19 + + Verified + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 43 + + Verify your + + + address + + src/app/components/wallet-address/wallet-address.component.html + 43 + + + src/app/components/wallet-address/wallet-address.component.html + 59 + + address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 59 + + Verify your + + + Detailed Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Detailed Info + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.html + 3,4 + + Badges used / available + + + End Date + + src/app/pages/award/pages/award/award-info/award-info.component.html + 9,10 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 50 + + End Date + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 16 + + Owner + + + Award info + + src/app/pages/award/pages/award/award.page.html + 5,6 + + + src/app/pages/award/pages/new/new.page.html + 17,18 + + Award info + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 81,82 + + + src/app/pages/award/pages/award/award.page.html + 176,177 + + Check out award + + + Approve Award + + src/app/pages/award/pages/award/award.page.html + 91,92 + + Approve Award + + + Approve + + src/app/pages/award/pages/award/award.page.html + 103 + + Approve + + + Decline + + src/app/pages/award/pages/award/award.page.html + 114 + + Decline + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 128,129 + + Confirm your participation + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 136,137 + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 142,143 + + Provide description or link to your work. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 151 + + Submit + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 35 + + + src/app/pages/space/pages/space/space.page.ts + 30 + + Overview + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 94 + + Participants + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2,4 + + New Award + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14,15 + + + src/app/pages/proposal/pages/new/new.page.html + 23,24 + + Title is required. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19,20 + + Title and description will be included on the Award. End date determines the duration of the Award. + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 23,24 + + You must enter name. + + + Title + + src/app/pages/award/pages/new/new.page.html + 28 + + + src/app/pages/proposal/pages/new/new.page.html + 28 + + + src/app/pages/space/pages/upsert/upsert.page.html + 29 + + Title + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 35,36 + + + src/app/pages/proposal/pages/new/new.page.html + 51,52 + + End Date is required. + + + End + + src/app/pages/award/pages/new/new.page.html + 45 + + + src/app/pages/proposal/pages/new/new.page.html + 62 + + End + + + Award description + + src/app/pages/award/pages/new/new.page.html + 55,56 + + Award description + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 66,67 + + Badge definition + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 68,69 + + Title and description will be included on the badge. + + + Badge Title is required. + + src/app/pages/award/pages/new/new.page.html + 73,74 + + Badge Title is required. + + + Badge Title + + src/app/pages/award/pages/new/new.page.html + 78,79 + + Badge Title + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 89,90 + + Badge description + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 103,104 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 363,364 + + + src/app/pages/proposal/pages/new/new.page.html + 242,243 + + Space Info + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 105,106 + + This is the space that will list the award. + + + Reward Info + + src/app/pages/award/pages/new/new.page.html + 155,156 + + Reward Info + + + Defines the amount of XP for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 157,158 + + Defines the amount of XP for each badge and the number of badges available. + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 162,163 + + + src/app/pages/award/pages/new/new.page.html + 182,183 + + Minimum 1 and maximum 10000. + + + Total XP (Max 10000) + + src/app/pages/award/pages/new/new.page.html + 167,168 + + Total XP (Max 10000) + + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + src/app/pages/award/pages/new/new.page.html + 177,178 + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + + Number of Badges + + src/app/pages/award/pages/new/new.page.html + 187,188 + + Number of Badges + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 197,198 + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + + Badge + + src/app/pages/award/pages/new/new.page.html + 206 + + Badge + + + What the badge looks like. + + src/app/pages/award/pages/new/new.page.html + 207,208 + + What the badge looks like. + + + Mint an unique NTT badge. + + src/app/pages/award/pages/new/new.page.html + 216,217 + + Mint an unique NTT badge. + + + Mint Avatar + + src/app/pages/award/pages/new/new.page.html + 225 + + Mint Avatar + + + WOW! Now reward your members with it! + + src/app/pages/award/pages/new/new.page.html + 238,239 + + WOW! Now reward your members with it! + + + Award Setup + + src/app/pages/award/pages/new/new.page.html + 245,246 + + Award Setup + + + Defines who and how can get a badge. + + src/app/pages/award/pages/new/new.page.html + 247,248 + + Defines who and how can get a badge. + + + Guardian approval + + src/app/pages/award/pages/new/new.page.html + 254,255 + + Guardian approval + + + The award must be approved by the guardians of the space before it's active or distributed + + src/app/pages/award/pages/new/new.page.html + 260,261 + + The award must be approved by the guardians of the space before it's active or distributed + + + Discord Activity + + src/app/pages/award/pages/new/new.page.html + 265,266 + + Discord Activity + + + Github Activity + + src/app/pages/award/pages/new/new.page.html + 275,276 + + Github Activity + + + Custom and more + + src/app/pages/award/pages/new/new.page.html + 285,286 + + Custom and more + + + Create award + + src/app/pages/award/pages/new/new.page.html + 310,311 + + Create award + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2,3 + + Award Description + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 39 + + + src/app/pages/award/pages/participants/participants.page.html + 46,47 + + + src/app/pages/proposal/pages/participants/participants.page.html + 24 + + + src/app/pages/proposal/pages/participants/participants.page.html + 31,32 + + Find Participant + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 51 + + + src/app/pages/proposal/pages/participants/participants.page.html + 36 + + + src/app/pages/space/pages/members/members.page.html + 49,50 + + Showing only few top records... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 59 + + + src/app/pages/proposal/pages/participants/participants.page.html + 44 + + No Participants + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 71 + + Reward + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 82 + + Reward again + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 39 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 131 + + + src/app/pages/space/pages/awards/awards.page.ts + 23 + + + src/app/pages/space/pages/collections/collections.page.ts + 23 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 23 + + Pending + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 40 + + Issued + + + Visit website + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 7,8 + + Visit website + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 18,19 + + Who can buy? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 22,23 + + Open sale + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 28,29 + + Space Members Only + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 34,35 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 40,41 + + Space Members with Badge Only + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 46,47 + + Must hold at least one NFT from each selected Collections + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51,52 + + (One NFT per member) + + + The badges you need + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 78 + + The badges you need + + + Resources + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89 + + Resources + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 114 + + Member discounts + + + Discount for members with XP + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 119 + + Discount for members with XP + + + Guardians of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 47 + + Guardians of Space Only + + + Members of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 49 + + Members of Space Only + + + Members With Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 51 + + Members With Badge Only + + + Check out collection + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 72 + + Check out collection + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 3 + + About collection + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 11 + + Limited edition + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 26 + + + src/app/pages/collection/pages/collection/collection.page.html + 118 + + Publish Collection + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 30 + + + src/app/pages/collection/pages/collection/collection.page.html + 122 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 36 + + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Cancel Collection + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 132 + + Edit Collection + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 69,70 + + Royalties goes to + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 79,80 + + Starts at + + + Items + + src/app/pages/collection/pages/collection/collection.page.html + 86,87 + + Items + + + Price starts at + + src/app/pages/collection/pages/collection/collection.page.html + 96,97 + + Price starts at + + + Sale in progress + + src/app/pages/collection/pages/collection/collection.page.html + 104,105 + + Sale in progress + + + remaining + + src/app/pages/collection/pages/collection/collection.page.html + 106,107 + + + src/app/pages/nft/pages/nft/nft.page.html + 86,87 + + remaining + + + Find item + + src/app/pages/collection/pages/collection/collection.page.html + 156 + + + src/app/pages/member/pages/nfts/nfts.page.html + 12 + + Find item + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 166,167 + + + src/app/pages/nft/pages/new/new.page.html + 2,3 + + Create NFT + + + Recent + + src/app/pages/collection/pages/collection/collection.page.html + 192 + + + src/app/pages/collection/pages/collection/collection.page.html + 209 + + + src/app/pages/discover/pages/awards/awards.page.html + 20 + + + src/app/pages/discover/pages/awards/awards.page.html + 31 + + + src/app/pages/discover/pages/collections/collections.page.html + 40 + + + src/app/pages/discover/pages/collections/collections.page.html + 51 + + + src/app/pages/discover/pages/members/members.page.html + 31 + + + src/app/pages/discover/pages/members/members.page.html + 42 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 20 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 31 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 20 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 33 + + + src/app/pages/market/pages/collections/collections.page.html + 154 + + + src/app/pages/market/pages/collections/collections.page.html + 171 + + + src/app/pages/market/pages/nfts/nfts.page.html + 42 + + + src/app/pages/market/pages/nfts/nfts.page.html + 59 + + Recent + + + Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 193 + + + src/app/pages/market/pages/collections/collections.page.html + 155 + + + src/app/pages/market/pages/nfts/nfts.page.html + 43 + + + src/app/pages/market/pages/nfts/nfts.page.html + 60 + + Low to High + + + High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 194 + + + src/app/pages/market/pages/collections/collections.page.html + 156 + + + src/app/pages/market/pages/nfts/nfts.page.html + 44 + + + src/app/pages/market/pages/nfts/nfts.page.html + 61 + + High to Low + + + Sort by + + src/app/pages/collection/pages/collection/collection.page.html + 199 + + + src/app/pages/discover/pages/awards/awards.page.html + 18 + + + src/app/pages/discover/pages/awards/awards.page.html + 24,25 + + + src/app/pages/discover/pages/collections/collections.page.html + 37,38 + + + src/app/pages/discover/pages/collections/collections.page.html + 44,45 + + + src/app/pages/discover/pages/members/members.page.html + 29 + + + src/app/pages/discover/pages/members/members.page.html + 35,36 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 18 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 24,25 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 18 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 24,25 + + + src/app/pages/market/pages/collections/collections.page.html + 152 + + + src/app/pages/market/pages/collections/collections.page.html + 161 + + + src/app/pages/market/pages/nfts/nfts.page.html + 40 + + + src/app/pages/market/pages/nfts/nfts.page.html + 49 + + Sort by + + + Price: Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 210 + + + src/app/pages/market/pages/collections/collections.page.html + 172 + + Price: Low to High + + + Price: High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 211 + + + src/app/pages/market/pages/collections/collections.page.html + 173 + + Price: High to Low + + + No NFTs + + src/app/pages/collection/pages/collection/collection.page.html + 233 + + + src/app/pages/market/pages/nfts/nfts.page.html + 84 + + + src/app/pages/member/pages/nfts/nfts.page.html + 32 + + + src/app/pages/nft/pages/nft/nft.page.html + 375 + + No NFTs + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2,3 + + Create new collection + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3,5 + + Edit collection + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18,19 + + Collection info + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20,21 + + Name and description will be included on the Collection. + + + Name + + src/app/pages/collection/pages/upsert/upsert.page.html + 30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 70,71 + + + src/app/pages/nft/pages/new/single/single.page.html + 26 + + Name + + + Description + + src/app/pages/collection/pages/upsert/upsert.page.html + 40,41 + + + src/app/pages/nft/pages/new/single/single.page.html + 36,37 + + Description + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 53,54 + + + src/app/pages/nft/pages/new/single/single.page.html + 49,50 + + Sales info + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 55,56 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 118 + + Royalty + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 120 + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 131,132 + + Royalties - Percentage fee + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 141,142 + + Example: 10 % , 20 % , etc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 150 + + Royalties goes to a different space + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 158,159 + + Royalties goes to a different space + + + Links + + src/app/pages/collection/pages/upsert/upsert.page.html + 181 + + Links + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 182,183 + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 187,188 + + Invalid URL. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 213,214 + + Link to your Twitter account + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 226,227 + + Invalid Discord username. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 233,234 + + Link to your Discord account + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 248,249 + + Discounts + + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + src/app/pages/collection/pages/upsert/upsert.page.html + 250,251 + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 298 + + Discount + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 311 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + Discount Amount + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 350,351 + + Add discount level + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 365,366 + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 383,384 + + Collection Type + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 385,386 + + Each type has different characteristics. This cannot be changed after creation. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 417 + + + src/app/pages/space/pages/upsert/upsert.page.html + 192 + + Banner + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 443 + + Banner is required. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + Placeholder + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 478 + + Placeholder is required. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 488,489 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 501,502 + + + src/app/pages/market/pages/collections/collections.page.html + 132,133 + + + src/app/pages/market/pages/collections/collections.page.html + 137,138 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 116,117 + + Category + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 490,491 + + Category is used when filtering content. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 494,495 + + Category. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 519,520 + + Collection Setup + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 521,522 + + Who has access to a given collection. + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 537,538 + + Everyone has access to this collection. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 547,548 + + Only Space Guardians can access. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 558,559 + + Only Space Members can access. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 569,570 + + Only Space Members with badge can access. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 585,586 + + Collection Options + + + Limited Edition + + src/app/pages/collection/pages/upsert/upsert.page.html + 590 + + Limited Edition + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 606 + + One NFT per Member Only + + + Select Collections + + src/app/pages/collection/pages/upsert/upsert.page.html + 629,630 + + Select Collections + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 677,678 + + Create collection + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 690,691 + + Save collection + + + Member seems to log out during the file upload request. + + src/app/pages/collection/pages/upsert/upsert.page.ts + 317 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 195 + + + src/app/pages/nft/pages/new/single/single.page.ts + 154 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 107 + + Member seems to log out during the file upload request. + + + My Overview + + src/app/pages/dashboard/dashboard.page.html + 2,3 + + My Overview + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 6,7 + + Pending Membership Requests + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 14,15 + + Your spaces + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 23 + + No Spaces yet + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 25,26 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 36,37 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 48,49 + + Active proposals + + + Oldest + + src/app/pages/discover/pages/awards/awards.page.html + 21 + + + src/app/pages/discover/pages/awards/awards.page.html + 32 + + + src/app/pages/discover/pages/collections/collections.page.html + 41 + + + src/app/pages/discover/pages/collections/collections.page.html + 52 + + + src/app/pages/discover/pages/members/members.page.html + 32 + + + src/app/pages/discover/pages/members/members.page.html + 43 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 21 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 32 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 21 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 34 + + Oldest + + + No Awards + + src/app/pages/discover/pages/awards/awards.page.html + 54 + + + src/app/pages/member/pages/awards/awards.page.html + 19 + + + src/app/pages/space/pages/awards/awards.page.html + 35 + + No Awards + + + collections + + src/app/pages/discover/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 185,186 + + collections + + + No Collections + + src/app/pages/discover/pages/collections/collections.page.html + 75 + + + src/app/pages/space/pages/collections/collections.page.html + 38 + + No Collections + + + Discover Soonaverse + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Discover Soonaverse + + + Enter the first few letters to search... + + src/app/pages/discover/pages/discover/discover.page.html + 7 + + Enter the first few letters to search... + + + Spaces + + src/app/pages/discover/pages/discover/discover.page.ts + 21 + + + src/app/pages/member/pages/member/member.page.ts + 29 + + Spaces + + + Collections + + src/app/pages/discover/pages/discover/discover.page.ts + 22 + + + src/app/pages/market/pages/market/market.page.ts + 23 + + + src/app/pages/space/pages/space/space.page.ts + 31 + + Collections + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 24 + + + src/app/pages/space/pages/space/space.page.ts + 32 + + Proposals + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 25 + + + src/app/pages/space/pages/space/space.page.ts + 34 + + Members + + + Include connections + + src/app/pages/discover/pages/members/members.page.html + 23,24 + + + src/app/pages/member/pages/activity/activity.page.html + 28,29 + + + src/app/pages/member/pages/spaces/member-spaces.component.html + 5,6 + + Include connections + + + (Select some space) + + src/app/pages/discover/pages/members/members.page.html + 24 + + + src/app/pages/member/pages/activity/activity.page.html + 29 + + (Select some space) + + + No Members + + src/app/pages/discover/pages/members/members.page.html + 66 + + + src/app/pages/space/pages/members/members.page.html + 58 + + No Members + + + proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 43,44 + + proposals + + + No Proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 55 + + + src/app/pages/space/pages/proposals/proposals.page.html + 35 + + No Proposals + + + No Spaces + + src/app/pages/discover/pages/spaces/spaces.page.html + 56 + + No Spaces + + + Open + + src/app/pages/discover/pages/spaces/spaces.page.ts + 29 + + Open + + + Welcome to The Soonaverse + + src/app/pages/home/home.page.html + 5,6 + + Welcome to The Soonaverse + + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + src/app/pages/home/home.page.html + 8,9 + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + + Join Us + + src/app/pages/home/home.page.html + 19,20 + + Join Us + + + Marketplace + + src/app/pages/home/home.page.html + 31 + + Marketplace + + + See Docs + + src/app/pages/home/home.page.html + 43,44 + + See Docs + + + Get started with the Soonaverse + + src/app/pages/home/home.page.html + 52,53 + + Get started with the Soonaverse + + + Not sure where to start? Find featured spaces and NFT Collections below. + + src/app/pages/home/home.page.html + 54 + + Not sure where to start? Find featured spaces and NFT Collections below. + + + Trending Collections + + src/app/pages/home/home.page.html + 60,61 + + Trending Collections + + + Go to Marketplace + + src/app/pages/home/home.page.html + 70 + + Go to Marketplace + + + Discover more + + src/app/pages/home/home.page.html + 86 + + + src/app/pages/home/home.page.html + 102 + + + src/app/pages/home/home.page.html + 122 + + Discover more + + + Popular spaces + + src/app/pages/home/home.page.html + 92,93 + + Popular spaces + + + Creating your community is easy as 1-2-3 + + src/app/pages/home/home.page.html + 130,131 + + Creating your community is easy as 1-2-3 + + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + src/app/pages/home/home.page.html + 132,133 + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + + StepArticle image + + src/app/pages/home/home.page.html + 143,144 + + StepArticle image + + + Voting is essential and it needs to be on-chain and FREE. + + src/app/pages/home/home.page.html + 162 + + Voting is essential and it needs to be on-chain and FREE. + + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + src/app/pages/home/home.page.html + 165,167 + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + + Go there now + + src/app/pages/home/home.page.html + 177 + + Go there now + + + Want to learn more about SoonLabs? + + src/app/pages/home/home.page.html + 202,203 + + Want to learn more about SoonLabs? + + + Visit YouTube + + src/app/pages/home/home.page.html + 213 + + Visit YouTube + + + Who’s using the Soonaverse? + + src/app/pages/home/home.page.html + 222,224 + + Who’s using the Soonaverse? + + + Investors + + src/app/pages/home/home.page.html + 275,276 + + Investors + + + Privacy + + src/app/pages/home/home.page.html + 285,286 + + Privacy + + + Terms + + src/app/pages/home/home.page.html + 295,296 + + Terms + + + Powered by SoonLabs + + src/app/pages/home/home.page.html + 306,307 + + + src/app/pages/home/home.page.html + 318,319 + + Powered by SoonLabs + + + Create your community + + src/app/pages/home/home.page.ts + 33,31 + + Create your community + + + Feeless, secure, on-chain voting, and “one click” creation tools. + + src/app/pages/home/home.page.ts + 34 + + Feeless, secure, on-chain voting, and “one click” creation tools. + + + Build reputation and rewards + + src/app/pages/home/home.page.ts + 38,36 + + Build reputation and rewards + + + Create incentives and build reputation, trust and community engagement. + + src/app/pages/home/home.page.ts + 39 + + Create incentives and build reputation, trust and community engagement. + + + Manage, Maintain, Grow + + src/app/pages/home/home.page.ts + 43,41 + + Manage, Maintain, Grow + + + Governance, voting, for both public and private communities. + + src/app/pages/home/home.page.ts + 44 + + Governance, voting, for both public and private communities. + + + NFTs + + src/app/pages/market/pages/collections/collections.page.html + 12,13 + + + src/app/pages/market/pages/nfts/nfts.page.html + 13,14 + + + src/app/pages/member/pages/member/member.page.ts + 30 + + NFTs + + + Select Access type + + src/app/pages/market/pages/collections/collections.page.html + 20,21 + + Select Access type + + + All accesses + + src/app/pages/market/pages/collections/collections.page.html + 25,26 + + + src/app/pages/market/pages/collections/collections.page.html + 32,33 + + + src/app/pages/market/pages/collections/collections.page.html + 111 + + All accesses + + + Open sale + + src/app/pages/market/pages/collections/collections.page.html + 38,39 + + + src/app/pages/market/pages/collections/collections.page.html + 45,46 + + + src/app/pages/market/pages/collections/collections.page.html + 112 + + Open sale + + + Space members only + + src/app/pages/market/pages/collections/collections.page.html + 51,52 + + + src/app/pages/market/pages/collections/collections.page.html + 58,59 + + + src/app/pages/market/pages/collections/collections.page.html + 113 + + Space members only + + + Space guardians only + + src/app/pages/market/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 71,72 + + + src/app/pages/market/pages/collections/collections.page.html + 114 + + Space guardians only + + + Space members with badge only + + src/app/pages/market/pages/collections/collections.page.html + 77,78 + + + src/app/pages/market/pages/collections/collections.page.html + 84,85 + + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Space members with badge only + + + At least one NFT from collections + + src/app/pages/market/pages/collections/collections.page.html + 90,91 + + + src/app/pages/market/pages/collections/collections.page.html + 97,98 + + + src/app/pages/market/pages/collections/collections.page.html + 116 + + At least one NFT from collections + + + No collections + + src/app/pages/market/pages/collections/collections.page.html + 196 + + No collections + + + Marketplace + + src/app/pages/market/pages/market/market.page.html + 2,4 + + Marketplace + + + Spaces, awards, proposals or members... + + src/app/pages/market/pages/market/market.page.html + 7 + + Spaces, awards, proposals or members... + + + NFT's + + src/app/pages/market/pages/market/market.page.ts + 24 + + NFT's + + + On Auction + + src/app/pages/market/pages/nfts/nfts.page.ts + 40,37 + + On Auction + + + Owned + + src/app/pages/market/pages/nfts/nfts.page.ts + 41 + + + src/app/pages/nft/pages/nft/nft.page.html + 6,7 + + Owned + + + View space + + src/app/pages/member/pages/activity/activity.page.html + 20,21 + + View space + + + Awards Completed + + src/app/pages/member/pages/activity/activity.page.html + 37 + + Awards Completed + + + Total Reputation + + src/app/pages/member/pages/activity/activity.page.html + 39 + + Total Reputation + + + Earned badges + + src/app/pages/member/pages/activity/activity.page.html + 47 + + Earned badges + + + More + + src/app/pages/member/pages/activity/activity.page.html + 51,52 + + More + + + Reputation + + src/app/pages/member/pages/activity/activity.page.html + 72,73 + + Reputation + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 6,7 + + Pending + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + Issued + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 21,22 + + Discover Awards + + + No Badges yet + + src/app/pages/member/pages/badges/badges.page.html + 19,20 + + No Badges yet + + + Discover Badges + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Discover Badges + + + My profile + + src/app/pages/member/pages/member/member.page.html + 9 + + My profile + + + Profile + + src/app/pages/member/pages/member/member.page.html + 10 + + Profile + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 15,16 + + Profile info + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 26 + + Activity + + + Badges + + src/app/pages/member/pages/member/member.page.ts + 28 + + Badges + + + (Join space with alliance) + + src/app/pages/member/pages/spaces/member-spaces.component.html + 6 + + (Join space with alliance) + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 44,45 + + Some files have not been uploaded + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 48,49 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 57 + + Uploaded CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 69,70 + + Filename + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 92,93 + + Error + + + Select collection + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 123,124 + + + src/app/pages/nft/pages/new/single/single.page.html + 349,350 + + Select collection + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136,137 + + Upload existing CSV + + + Upload back once you generate bellow + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138,139 + + Upload back once you generate bellow + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 166 + + You have to upload images first. + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 191,192 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Single + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Multiple + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14,15 + + NFT info + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16,17 + + Name and description will be included on the NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 21,22 + + Name is required. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 32,33 + + Description is required. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 51,52 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + + Properties + + src/app/pages/nft/pages/new/single/single.page.html + 111,112 + + Properties + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 113,114 + + Properties show up underneath your item. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 120,121 + + Property name (E.g. Character) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 121,122 + + Value (E.g. Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 133,134 + + + src/app/pages/nft/pages/new/single/single.page.html + 166,168 + + + src/app/pages/nft/pages/new/single/single.page.html + 173,174 + + Property name + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 144 + + + src/app/pages/nft/pages/new/single/single.page.html + 178,180 + + + src/app/pages/nft/pages/new/single/single.page.html + 186 + + + src/app/pages/nft/pages/new/single/single.page.html + 236 + + + src/app/pages/nft/pages/new/single/single.page.html + 270,272 + + + src/app/pages/nft/pages/new/single/single.page.html + 276 + + Value + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 159 + + Property + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 196,197 + + Add property + + + Stats + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Stats + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 205,206 + + Stats show up underneath your item. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 212,213 + + Stats name (E.g. Stamina) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 213,214 + + Value (E.g. 10, 1/10 , etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 225,226 + + + src/app/pages/nft/pages/new/single/single.page.html + 258,260 + + + src/app/pages/nft/pages/new/single/single.page.html + 265,266 + + Stat name + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 251 + + Stat + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287,288 + + Add stat + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 299,300 + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 324 + + Media is required + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 338,339 + + Select one of your collections to display this NFT. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 371,372 + + Create NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 381,382 + + Preview NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 142 + + File name is not valid + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 4,5 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 248,249 + + Check out nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 58 + + Current highest bid + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 94 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 102 + + Sale hasn't started yet + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 110 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 118 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 123,124 + + Sell NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 124,125 + + Change Fixed Price + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 125,126 + + Change Auction + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + Place bid + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 138 + + Buy now + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 151,152 + + Current Bids + + + My Bids + + src/app/pages/nft/pages/nft/nft.page.html + 155,156 + + My Bids + + + My Transactions + + src/app/pages/nft/pages/nft/nft.page.html + 159,160 + + My Transactions + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 168,169 + + Member + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 169,170 + + Bidded on + + + Date + + src/app/pages/nft/pages/nft/nft.page.html + 202,203 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 8,9 + + Date + + + Type + + src/app/pages/nft/pages/nft/nft.page.html + 203,204 + + Type + + + On-Chain Record + + src/app/pages/nft/pages/nft/nft.page.html + 276,277 + + On-Chain Record + + + Preparing... + + src/app/pages/nft/pages/nft/nft.page.html + 277,278 + + Preparing... + + + View + + src/app/pages/nft/pages/nft/nft.page.html + 280,281 + + + src/app/pages/nft/pages/nft/nft.page.html + 308,309 + + + src/app/pages/nft/pages/nft/nft.page.html + 315,316 + + View + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 285,286 + + View all of the transaction details of this NFT on the Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 340,341 + + About the collection + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 343,344 + + Show + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 344 + + collection + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 353,355 + + by + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2,4 + + New Proposal + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17,18 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 5,6 + + Proposal info + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19,20 + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 35,36 + + Start Date is required. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 45 + + Start + + + Commencing milestone. + + src/app/pages/proposal/pages/new/new.page.html + 69,70 + + Commencing milestone. + + + Commencing milestone + + src/app/pages/proposal/pages/new/new.page.html + 76,77 + + Commencing milestone + + + Start milestone. + + src/app/pages/proposal/pages/new/new.page.html + 83,84 + + Start milestone. + + + Start milestone + + src/app/pages/proposal/pages/new/new.page.html + 90,91 + + Start milestone + + + End milestone. + + src/app/pages/proposal/pages/new/new.page.html + 97,98 + + End milestone. + + + End milestone + + src/app/pages/proposal/pages/new/new.page.html + 104,105 + + End milestone + + + Proposal description is required. + + src/app/pages/proposal/pages/new/new.page.html + 112,113 + + Proposal description is required. + + + Proposal description + + src/app/pages/proposal/pages/new/new.page.html + 117,118 + + Proposal description + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 127,128 + + Question Info + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 129,130 + + Title and description will only be displayed for this question. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 136,137 + + Question Title is required. + + + Question Title + + src/app/pages/proposal/pages/new/new.page.html + 140,141 + + Question Title + + + Question description + + src/app/pages/proposal/pages/new/new.page.html + 152,153 + + Question description + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 178,179 + + Text and description for each individual answer. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 183,184 + + Answer Text is required. + + + Answer Text + + src/app/pages/proposal/pages/new/new.page.html + 187,188 + + Answer Text + + + Answer description + + src/app/pages/proposal/pages/new/new.page.html + 198,199 + + Answer description + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 233,234 + + Add Choice + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 244,245 + + This is the space that will list the proposal. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 292,293 + + Proposal Setup + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 294,295 + + Defines who has access to the proposal and what is the voting method. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 299 + + Target Participants + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 306,307 + + All Guardians + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 312,313 + + Only guardians can vote on this proposal + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 316,317 + + All Members + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 322,323 + + All members can vote on this proposal + + + IOTA Token Holders + + src/app/pages/proposal/pages/new/new.page.html + 327,328 + + IOTA Token Holders + + + All IOTA token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 333,334 + + All IOTA token holders can vote. + + + Voting Type + + src/app/pages/proposal/pages/new/new.page.html + 341 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 55 + + Voting Type + + + Member - One Vote + + src/app/pages/proposal/pages/new/new.page.html + 348,349 + + Member - One Vote + + + Each member of the space gets one vote + + src/app/pages/proposal/pages/new/new.page.html + 354,355 + + Each member of the space gets one vote + + + XP Reputation - Space + + src/app/pages/proposal/pages/new/new.page.html + 362,363 + + XP Reputation - Space + + + Votes are weighted based on total amount of XP a member has in the space + + src/app/pages/proposal/pages/new/new.page.html + 368,369 + + Votes are weighted based on total amount of XP a member has in the space + + + XP Reputation - Space + Connection + + src/app/pages/proposal/pages/new/new.page.html + 378,379 + + XP Reputation - Space + Connection + + + Votes are weighted based on total amount of XP a member has in the space & connections + + src/app/pages/proposal/pages/new/new.page.html + 384,385 + + Votes are weighted based on total amount of XP a member has in the space & connections + + + XP Reputation - Selected Badges + + src/app/pages/proposal/pages/new/new.page.html + 394,395 + + XP Reputation - Selected Badges + + + Votes are weighted based on total amount of XP a member has for selected badges + + src/app/pages/proposal/pages/new/new.page.html + 400,401 + + Votes are weighted based on total amount of XP a member has for selected badges + + + Reputation Options + + src/app/pages/proposal/pages/new/new.page.html + 412,413 + + Reputation Options + + + Set Minimum Weight + + src/app/pages/proposal/pages/new/new.page.html + 423,424 + + Set Minimum Weight + + + Select Badge + + src/app/pages/proposal/pages/new/new.page.html + 438,439 + + Select Badge + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 465,466 + + Create Proposal + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 322 + + Choice + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + badge + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 2,3 + + Final Results + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 58,59 + + Proposal Description + + + Voted + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 3,4 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 38 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 129 + + Voted + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 4,5 + + Vote Now + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 5 + + Voting starts + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 9 + + You are not part of the vote + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 12 + + In order to vote, you must be part of the space before proposal was created. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 18 + + Log in to vote + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 21 + + In order to vote, you must login first. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 27 + + Pending Guardian Approval + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 30 + + This proposal has not been approved by any Guardian yet. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 52 + + Weight + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 37 + + Pending Vote + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 124 + + joined soonaverse on + + + Voter + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 7,8 + + Voter + + + Option + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 9,10 + + Option + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 26 + + Approve + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 28 + + Decline + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 34,35 + + Current Milestone + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 39 + + Commence Date + + + Start Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 45 + + Start Date + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 56 + + Voting Type of this proposal. + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 60 + + Total Weight + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 61 + + Total weight within this proposal for all participants. + + + Export to JSON + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 65,67 + + Export to JSON + + + Cast your vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 50,51 + + Cast your vote + + + Open Firefly to Vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 53 + + Open Firefly to Vote + + + Voting instructions + + src/app/pages/proposal/pages/proposal/proposal.page.html + 55 + + Voting instructions + + + You will select your options and execute the vote within Firefly. + + src/app/pages/proposal/pages/proposal/proposal.page.html + 57,58 + + You will select your options and execute the vote within Firefly. + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 64,65 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 117,118 + + Check out proposal + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 70,71 + + Current Results + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 91 + + Selected Badges + + + New + + src/app/pages/space/pages/awards/awards.page.html + 23,24 + + + src/app/pages/space/pages/collections/collections.page.html + 25,26 + + + src/app/pages/space/pages/proposals/proposals.page.html + 23,24 + + New + + + award + + src/app/pages/space/pages/awards/awards.page.html + 24 + + award + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 24 + + + src/app/pages/space/pages/members/members.page.html + 24 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 24 + + Active + + + Active + + src/app/pages/space/pages/members/members.page.html + 9 + + Active + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 18 + + Blocked + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 28 + + Blocked + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 35 + + + src/app/pages/space/pages/members/members.page.html + 43,44 + + Find Member + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 63 + + joined space on + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 78,79 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 81,82 + + Make Guardian + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 84,86 + + Accept Member + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 89,91 + + Block Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 91,93 + + Unblock Member + + + Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 3,5 + + Active Proposals + + + No Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 11 + + No Active Proposals + + + Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 24,26 + + Active Awards + + + No Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 32 + + No Active Awards + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 24 + + proposal + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 21,22 + + Check out space + + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 53,54 + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + + Show All + + src/app/pages/space/pages/space/space-about/space-about.component.html + 59,60 + + Show All + + + Connected spaces that you recognize + + src/app/pages/space/pages/space/space-about/space-about.component.html + 65,66 + + Connected spaces that you recognize + + + New connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 76,77 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 88 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 117 + + New connection + + + connections + + src/app/pages/space/pages/space/space-about/space-about.component.html + 104 + + connections + + + Close + + src/app/pages/space/pages/space/space-about/space-about.component.html + 120 + + Close + + + New + + src/app/pages/space/pages/space/space-about/space-about.component.html + 132 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 169 + + New + + + Edit + + src/app/pages/space/pages/space/space-about/space-about.component.html + 133 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 170 + + Edit + + + connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 134,135 + + connection + + + Form a connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 148 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Form a connection + + + Save + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 181 + + Save + + + Terminate alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 159,160 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 190,191 + + Terminate alliance + + + alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 171,172 + + alliance + + + Space's Wallet Address + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201,202 + + Space's Wallet Address + + + Wallet to hold funds for the Space. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 203,204 + + Wallet to hold funds for the Space. + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 252,253 + + Leave Space + + + About space + + src/app/pages/space/pages/space/space.page.html + 5,6 + + About space + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 53 + + + src/app/pages/space/pages/space/space.page.html + 113,114 + + Join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 77 + + + src/app/pages/space/pages/space/space.page.html + 139 + + Edit Space + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2,3 + + Add new space + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3,4 + + Edit space + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17,18 + + Space info + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19,20 + + Title and description will be included on the Space. + + + Space description + + src/app/pages/space/pages/upsert/upsert.page.html + 39,40 + + Space description + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 54,55 + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 100,101 + + Only discord invite code supported (i.e. RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 107,108 + + Type your Discord invite code + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 128,129 + + Space Type + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 130,131 + + Each type has different characteristics. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 139,140 + + Open for anyone to join instantly + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 143,144 + + Requires a member approval + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 163,164 + + Avatar is mandatory + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 236,237 + + Create space + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 249,250 + + Save space + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Upload new to replace existing. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + Your brand is key. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Make it personal. + + + + diff --git a/src/locale/messages.ko-KR.xlf b/src/locale/messages.ko-KR.xlf new file mode 100644 index 0000000..f17e140 --- /dev/null +++ b/src/locale/messages.ko-KR.xlf @@ -0,0 +1,13270 @@ + + + + + + Top Members + + src/app/@core/services/filter-storage/filter-storage.service.ts + 97 + + 상위 멤버 + + + Recent + + src/app/@core/services/filter-storage/filter-storage.service.ts + 98 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 116 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 133 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 147 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 165 + + 최신순 + + + Oldest + + src/app/@core/services/filter-storage/filter-storage.service.ts + 99 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 117 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 134 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 148 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 166 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 188 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 209 + + 오래된순 + + + Ending Soon + + src/app/@core/services/filter-storage/filter-storage.service.ts + 115 + + 곧 종료 + + + Ending SOON + + src/app/@core/services/filter-storage/filter-storage.service.ts + 164 + + 곧 종료 + + + Available Date + + src/app/@core/services/filter-storage/filter-storage.service.ts + 182 + + 출시일순 + + + Recently Created + + src/app/@core/services/filter-storage/filter-storage.service.ts + 183 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 208 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 57 + + 최근생성순 + + + Price: Low to High + + src/app/@core/services/filter-storage/filter-storage.service.ts + 184 + + 가격: 낮은 가격부터 높은 가격 순으로 + + + Price: High to Low + + src/app/@core/services/filter-storage/filter-storage.service.ts + 185 + + 가격: 높은 가격부터 낮은 가격 순으로 + + + Top Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 186 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 206 + + 최다거래순 + + + Recently Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 187 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 207 + + 최근거래순 + + + Public Vote + + src/app/@core/services/filter-storage/filter-storage.service.ts + 202 + + 투표많은순 + + + Community Rank + + src/app/@core/services/filter-storage/filter-storage.service.ts + 203 + + 커뮤니티랭크순 + + + SOON on Sale + + src/app/@core/services/filter-storage/filter-storage.service.ts + 204 + + 판매임박순 + + + Recently Minted + + src/app/@core/services/filter-storage/filter-storage.service.ts + 205 + + 최근발행순 + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 74 + + 뒤로가기 + + + Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products. + + src/app/@core/services/seo/seo.service.ts + 7 + + Soonaverse는 커뮤니티를 위한 플랫폼으로 수수료가 없는 IOTA 네트워크에서 DAO(Decentralized Autonomous Organization), NFT, 프로젝트, 기업, 그리고 시장 등을 생성하고 관리하기 위한 플랫폼입니다. 저희의 마켓플레이스, 런치패드, 그리고 토큰 거래소를 통해서 유동성을 가진 자산들을 출시하고 거래할 수 있습니다. + + + Bill Payment + + src/app/@core/services/transaction/transaction.service.ts + 18 + + 요금 지불 + + + Bill (royalty) + + src/app/@core/services/transaction/transaction.service.ts + 20 + + 청구서 (로열티) + + + Credit + + src/app/@core/services/transaction/transaction.service.ts + 26 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 336 + + 크레딧 + + + Payment + + src/app/@core/services/transaction/transaction.service.ts + 28 + + 결제 + + + Credit NFT + + src/app/@core/services/transaction/transaction.service.ts + 30 + + Credit NFT + + + Mint Collection + + src/app/@core/services/transaction/transaction.service.ts + 32 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 36 + + 컬렉션 발행 + + + Mint Token + + src/app/@core/services/transaction/transaction.service.ts + 34 + + + src/app/pages/space/pages/manage/manage.page.html + 116 + + 토큰 발행 + + + Withdraw Asset + + src/app/@core/services/transaction/transaction.service.ts + 36 + + 자산 인출 + + + Unlock + + src/app/@core/services/transaction/transaction.service.ts + 38 + + 잠금해제 + + + Vote + + src/app/@core/services/transaction/transaction.service.ts + 40 + + 투표 + + + Order + + src/app/@core/services/transaction/transaction.service.ts + 42 + + 주문 + + + (Mint Alias) + + src/app/@core/services/transaction/transaction.service.ts + 49 + + (Mint Alias) + + + (Mint NFTs) + + src/app/@core/services/transaction/transaction.service.ts + 51 + + (Mint NFTs) + + + (Mint Foundry) + + src/app/@core/services/transaction/transaction.service.ts + 53 + + (Mint Foundry) + + + (Send Alias to Guardian) + + src/app/@core/services/transaction/transaction.service.ts + 55 + + (Send Alias to Guardian) + + + (Lock Collection) + + src/app/@core/services/transaction/transaction.service.ts + 57 + + (컬렉션 잠금) + + + Discover + + src/app/@shell/ui/header/header.component.html + 76 + + + src/app/components/auth/services/auth.service.ts + 83 + + 발견하기 + + + Create new + + src/app/@shell/ui/header/header.component.html + 91 + + 새로 만들기 + + + Space + + src/app/@shell/ui/header/header.component.html + 97 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100 + + + src/app/pages/collection/pages/collection/collection.page.html + 110 + + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 206,205 + + + src/app/pages/token/pages/new/summary/summary.component.html + 242,241 + + 스페이스 + + + Proposal + + src/app/@shell/ui/header/header.component.html + 103 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 29 + + 제안 + + + Award + + src/app/@shell/ui/header/header.component.html + 106 + + + src/app/pages/award/pages/award/award.page.html + 29 + + + src/app/pages/award/pages/award/award.page.ts + 100 + + 보상 + + + Collection + + src/app/@shell/ui/header/header.component.html + 110 + + + src/app/@shell/ui/header/header.component.html + 129 + + + src/app/pages/collection/pages/collection/collection.page.html + 37 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136 + + + src/app/pages/nft/pages/new/single/single.page.html + 346 + + + src/app/pages/space/pages/collections/collections.page.html + 49 + + 컬렉션 + + + Token + + src/app/@shell/ui/header/header.component.html + 113 + + + src/app/@shell/ui/header/header.component.html + 132 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 321 + + + src/app/pages/token/pages/token/token.page.html + 29 + + + src/app/pages/token/pages/token/token.page.ts + 99 + + + src/app/pages/token/pages/trade/trade.page.ts + 274 + + 토큰 + + + To unlock more features you have to stake SOON token. + + src/app/@shell/ui/header/header.component.html + 124,126 + + 더 많은 기능을 사용하려면 SOON 토큰을 스테이킹 해야 합니다. + + + VIP LEVEL + + src/app/@shell/ui/header/header.component.html + 197,198 + + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 37,38 + + + src/app/pages/member/pages/activity/activity.page.html + 146,147 + + VIP 레벨 + + + None. + + src/app/@shell/ui/header/header.component.html + 232 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 77 + + 없음 + + + My Profile + + src/app/@shell/ui/header/header.component.html + 240 + + + src/app/components/auth/services/auth.service.ts + 551 + + 내 프로필 + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 265,266 + + 구입이 완료되지 않았습니다. + + + You have + + src/app/@shell/ui/header/header.component.html + 270 + + 보유 중: + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 272 + + 거래를 완료하시려면 + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 282,283 + + 계산서 열기 + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 334 + + NFT를 얻으셨습니다. + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 335 + + 당신은 새로운 NFT의 자랑스러운 주인입니다. 축하합니다! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 342 + + 입찰에서 떨어지셨습니다. + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 343 + + 당신의 입찰은 + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 344 + + 더 높은 가격에 팔렸습니다. 다시 시도해보세요! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 351 + + 방금 제안됐습니다. + + + for + + src/app/@shell/ui/header/header.component.ts + 352 + + + src/app/components/timeline/timeline.component.html + 171 + + 를 위해 + + + Your + + src/app/@shell/ui/header/header.component.ts + 353 + + 당신의 + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 354 + + 에 대한 새로운 입찰을 받았습니다. + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 377 + + 지원되지 않음 + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 378 + + 이 알림은 해당 언어에서 아직 지원되지 않습니다. + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27,28 + + 공간 + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 38,39 + + 제안 + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 49,50 + + + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 60,61 + + 컬렉션 + + + Token + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 70,71 + + 토큰 + + + Stake more SOON to create tokens and collections. + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 81,84 + + 토큰과 컬렉션을 생성하기 위해서 더 많은 SOON 토큰을 스테이킹하세요. + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 57,58 + + 메타마스크(MetaMask) 지갑에 연결하세요 + + + Connect via TanglePay + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 73 + + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 47 + + 탱글페이(TanglePay)를 통해서 연결하기 + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 97 + + 로그아웃 + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 103 + + Powered by + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8 + + 요청하신 페이지를 찾을 수 없습니다 + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 9,11 + + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Soonaverse 탐험하기 + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 19 + + 네트워크 상태 + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 30,31 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 84,85 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 140,141 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 197,198 + + 네트워크 상태 + + + Operational + + src/app/@shell/ui/sider/network-status/network-status.component.html + 36 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 90 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 146 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 203 + + 작동중 + + + Degraded Performance + + src/app/@shell/ui/sider/network-status/network-status.component.html + 43 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 97 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 153 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 210 + + 성능 저하 + + + Down + + src/app/@shell/ui/sider/network-status/network-status.component.html + 50 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 104 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 160 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 217 + + 네트워크 다운 + + + Last milestone + + src/app/@shell/ui/sider/network-status/network-status.component.html + 57,58 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 111,112 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 170,171 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 224,225 + + 마지막 마일스톤 + + + Devnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 78,79 + + + src/app/components/network/components/select-network/select-network.component.html + 61,63 + + 개발자 네트워크(Devnet) + + + Shimmer Mainnet Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 132,133 + + Shimmer 메인넷이 곧 다가옵니다 + + + Testnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 191,192 + + + src/app/components/network/components/select-network/select-network.component.html + 33,35 + + 테스트네트워크(Testnet) + + + Assembly + + src/app/@shell/ui/sider/network-status/network-status.component.html + 237 + + 어셈블리(Assembly) + + + Assembly Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 244,245 + + 어셈블리(Assembly) 네트워크가 곧 다가옵니다 + + + Shimmer EVM Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 266,267 + + Shimmer EVM이 곧 다가옵니다 + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 48 + + 문서 보기 + + + Show more + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 47 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 27 + + + src/app/components/timeline/timeline.component.html + 304 + + 더 보기 + + + Show less + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 48 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 28 + + + src/app/components/timeline/timeline.component.html + 303 + + 간략히 보기 + + + Search here... + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 50 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 30 + + 여기에서 검색... + + + Reset + + + src/app/components/algolia/algolia-clear/algolia-clear.component.html + 5,7 + + 초기화 + + + + Search + + src/app/components/algolia/search/search.component.html + 20,19 + + + src/app/components/collection/components/select-collection/select-collection.component.html + 95,94 + + + src/app/components/space/components/select-space/select-space.component.html + 95,94 + + 검색 + + + Start typing... + + src/app/components/algolia/search/search.component.html + 36 + + 입력 시작... + + + Open + + src/app/components/algolia/services/algolia.service.ts + 32 + + 열기 + + + Guardians of Space Only + + src/app/components/algolia/services/algolia.service.ts + 34 + + 스페이스의 가디언들 전용 + + + Members of Space Only + + src/app/components/algolia/services/algolia.service.ts + 36 + + 스페이스의 멤버들 전용 + + + Members With Badge Only + + src/app/components/algolia/services/algolia.service.ts + 38 + + 뱃지를 단 멤버들 전용 + + + Members With NFT only + + src/app/components/algolia/services/algolia.service.ts + 40 + + NFT 가진 멤버 전용 + + + Unavailable for sale + + src/app/components/algolia/services/algolia.service.ts + 53 + + 판매 불가 + + + On Auction + + src/app/components/algolia/services/algolia.service.ts + 55 + + 경매 + + + Available + + src/app/components/algolia/services/algolia.service.ts + 57 + + + src/app/components/award/components/award-status/award-status.component.html + 23 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 61 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 162 + + + src/app/pages/space/pages/collections/collections.page.ts + 31 + + + src/app/pages/token/pages/token/token.page.ts + 256 + + 사용 가능 + + + On Sale + + src/app/components/algolia/services/algolia.service.ts + 59 + + 판매중 + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 19 + + 메타마스크 + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23 + + 메타마스크 지갑에 연결하세요. + + + TanglePay + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 43 + + 탱글페이 + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 67 + + 메타마스크에서 공개된 아이오타 EVM 체인을 선택하였는지 확인하세요. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 69 + + 네트워크명: 아이오타 EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 70 + + RPC URL: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 71 + + 체인 ID: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 89,90 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 120,121 + + 취소 + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 8,10 + + 연결하기 + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + 연결 끊기 + + + Staking + + src/app/components/auth/services/auth.service.ts + 90 + + 스테이킹 + + + Tokens + + src/app/components/auth/services/auth.service.ts + 97 + + + src/app/pages/discover/pages/awards/awards.page.html + 145,144 + + + src/app/pages/member/pages/member/member.page.ts + 66 + + + src/app/pages/member/pages/tokens/tokens.page.html + 49 + + + src/app/pages/member/pages/tokens/tokens.page.html + 235 + + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 41 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 2 + + 토큰 + + + Swap + + src/app/components/auth/services/auth.service.ts + 104 + + 교환(Swap) + + + Pool + + src/app/components/auth/services/auth.service.ts + 111 + + 풀(Pool) + + + Marketplace + + src/app/components/auth/services/auth.service.ts + 118 + + 마켓플레이스 + + + My Overview + + src/app/components/auth/services/auth.service.ts + 125 + + + src/app/pages/dashboard/dashboard.page.html + 2 + + 스페이스 현황 + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 232 + + 트랜잭션에 서명할 수 없습니다. 페이지를 새로고침 해보십시오. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 278 + + 먼저 메타마스크를 잠금해제 해주세요! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 290 + + 계좌 주소를 보려면 설정에서 접근을 허용하셔야 합니다. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 298 + + 메타마스크에 있는 주소를 선택해주세요! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 307 + + + src/app/components/auth/services/auth.service.ts + 378 + + 인증을 위한 nonce를 가져올 수 없습니다! + + + Unable to connect your TanglePay wallet. + + src/app/components/auth/services/auth.service.ts + 343 + + + src/app/components/auth/services/auth.service.ts + 482 + + 탱글페이(TanglePay) 지갑에 연결할 수 없습니다. + + + Unable to detect address in TanglePay! + + src/app/components/auth/services/auth.service.ts + 349 + + 탱글페이에서 주소를 탐지할 수 없습니다! + + + You have to open Soonaverse in wallet app. + + src/app/components/auth/services/auth.service.ts + 443 + + 지갑 앱에서 Soonaverse를 실행해야 합니다. + + + Failed to initialize wallet, try to reload page. + + src/app/components/auth/services/auth.service.ts + 445 + + 지갑의 초기화에 실패하였습니다. 페이지를 새로고침 해보세요. + + + Give badges + + src/app/components/award/components/award-awards/award-awards.component.html + 11 + + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 16 + + 뱃지 주기 + + + Once issued, this badge is sent to the rewarded participant's wallet. + + src/app/components/award/components/award-awards/award-awards.component.html + 36 + + 일단 발급되면, 이 뱃지는 보상받은 참여자의 지갑으로 전송됩니다. + + + Upload CSV + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 31,32 + + CSV 업로드 + + + Download CSV template + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 34 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 85 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 10 + + CSV 서식 다운로드 + + + You can create badge airdrops for any user. You can upload CSV with users addresses and they will be properly reward. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 42,44 + + 모든 사용자를 위해서 뱃지를 생성할 수 있습니다. 사용자 주소의 CSV를 업로드하면 해당 사용자들이 보상받게 됩니다. + + + If you don’t know how to prepare CSV file, you can download our template made for you. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 50,51 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 101,102 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 25,26 + + 만약 CSV 파일을 준비하는 법을 모른다면, 서식을 다운받아 확인하세요. + + + Confirm schedule + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 77 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 128 + + 스케쥴 확인 + + + Address + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 97 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 21 + + 주소 + + + Action + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 98 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 288 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 153 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 22 + + + src/app/pages/token/pages/trade/trade.page.html + 214 + + + src/app/pages/token/pages/trade/trade.page.html + 288 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 24 + + 작업 + + + Badge + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 104 + + + src/app/pages/award/pages/new/new.page.html + 298,297 + + 뱃지 + + + Submitted. + + src/app/components/award/components/award-give-badges/award-give-badges.component.ts + 103 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 137 + + 제출됨 + + + Fund Award & Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 3 + + Fund Award & Mint + + + Reward Token + + src/app/components/award/components/award-mint/award-mint.component.html + 21 + + 보상 토큰 + + + Reward to be funded + + src/app/components/award/components/award-mint/award-mint.component.html + 43 + + Reward to be funded + + + Confirm & Start + + src/app/components/award/components/award-mint/award-mint.component.html + 98,99 + + 확인 & 시작 + + + Once you agree with the terms, the generated address will remain active during the whole process. + + src/app/components/award/components/award-mint/award-mint.component.html + 105,107 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 181,183 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 93,95 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 146,148 + + Once you agree with the terms, the generated address will remain active during the whole process. + + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + src/app/components/award/components/award-mint/award-mint.component.html + 120,121 + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + + Transaction history + + src/app/components/award/components/award-mint/award-mint.component.html + 159 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 252 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 246 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 134 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 176 + + + src/app/components/space/components/space-claim/space-claim.component.html + 113 + + + src/app/components/space/components/space-claim/space-claim.component.html + 135 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 122 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 144 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 207 + + + src/app/components/token/components/token-bid/token-bid.component.html + 212 + + + src/app/components/token/components/token-bid/token-bid.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 256 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 249 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 254 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 276 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 209 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 269 + + + src/app/components/token/components/token-stake/token-stake.component.html + 319 + + + src/app/components/token/components/token-stake/token-stake.component.html + 341 + + + src/app/components/token/components/token-vote/token-vote.component.html + 271 + + + src/app/components/token/components/token-vote/token-vote.component.html + 293 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 110 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 146 + + Transaction history + + + Transaction complete. Congratulations. + + src/app/components/award/components/award-mint/award-mint.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 271 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 235 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 277 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 294 + + 트랜잭션 완료. 축하합니다. + + + Finish Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 191,192 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 289,290 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 281,282 + + Finish Mint + + + Funding info + + src/app/components/award/components/award-mint/award-mint.component.ts + 83 + + Funding info + + + Make transaction + + src/app/components/award/components/award-mint/award-mint.component.ts + 84 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 92 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 87 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 101 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 77 + + 거래하기 + + + Wait for confirmation + + src/app/components/award/components/award-mint/award-mint.component.ts + 85 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 93 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 87 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 109 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 88 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 102 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 78 + + 확인 대기 중 + + + Confirmed + + src/app/components/award/components/award-mint/award-mint.component.ts + 86 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 94 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 88 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 110 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 89 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 103 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 79 + + 확인됨 + + + Payment received. + + src/app/components/award/components/award-mint/award-mint.component.ts + 141 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 150 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 196 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 136 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 136 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 145 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 155 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 140 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 159 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 157 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 131 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 224 + + Payment received. + + + Confirming transaction. + + src/app/components/award/components/award-mint/award-mint.component.ts + 158 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 167 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 213 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 164 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 189 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 153 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 153 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 162 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 172 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 157 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 176 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 174 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 148 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 241 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 208 + + Confirming transaction. + + + Transaction confirmed. + + src/app/components/award/components/award-mint/award-mint.component.ts + 167 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 176 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 222 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 173 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 198 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 162 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 162 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 171 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 181 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 166 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 185 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 183 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 157 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 250 + + Transaction confirmed. + + + Invalid amount received. Refunding transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 186 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 203 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 258 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 182 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 190 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 210 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 186 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 204 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 212 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 190 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 270 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 247 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 159 + + Invalid amount received. Refunding transaction... + + + Invalid transaction.You must gift storage deposit. + + src/app/components/award/components/award-mint/award-mint.component.ts + 209 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 218 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 281 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 206 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 205 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 213 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 225 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 209 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 227 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 227 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 206 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 293 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 262 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 175 + + Invalid transaction.You must gift storage deposit. + + + Invalid payment refunded. + + src/app/components/award/components/award-mint/award-mint.component.ts + 224 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 233 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 296 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 220 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 228 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 241 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 224 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 242 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 243 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 221 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 308 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 279 + + Invalid payment refunded. + + + Waiting for transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 300 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 321 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 442 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 290 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 317 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 311 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 316 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 306 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 348 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 327 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 319 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 350 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 336 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 415 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 398 + + Waiting for transaction... + + + Pending Funding + + + src/app/components/award/components/award-status/award-status.component.html + 5,6 + + Pending Funding + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 11,12 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 11,12 + + 거부됨 + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 17 + + + src/app/pages/space/pages/awards/awards.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 32 + + 완료됨 + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 570 + + 스페이스 회원 전용 + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 557 + + 스페이스 가디언 전용 + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 29 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 583 + + 뱃지를 소유한 스페이스 회원 전용 + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 39 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 595 + + 컬렉션에서 적어도 하나의 NFT + + + Specific members only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 53 + + Specific members only + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 28 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 95 + + + src/app/components/token/components/token-card/token-card.component.html + 70 + + 시작 + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 30 + + + src/app/components/countdown/countdown.component.html + 56 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 109 + + + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 33 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 122 + + 오늘 시작 + + + Collection is not yet migrated to the decentralized network. + + src/app/components/collection/components/collection-card/collection-card.component.html + 59 + + Collection is not yet migrated to the decentralized network. + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 76 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 611 + + 한정판 + + + Floor Price + + src/app/components/collection/components/collection-card/collection-card.component.html + 104 + + + src/app/pages/collection/pages/collection/collection.page.html + 207 + + Floor Price + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 56 + + 승인 대기 중 + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 66 + + + src/app/pages/space/pages/awards/awards.page.ts + 33 + + + src/app/pages/space/pages/collections/collections.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 33 + + 거절됨 + + + Remaining + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 42 + + Remaining + + + NFTs + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 49 + + + src/app/pages/market/pages/market/market.page.ts + 13 + + + src/app/pages/market/pages/market/market.page.ts + 34 + + + src/app/pages/member/pages/member/member.page.ts + 67 + + NFT들 + + + Mint collection on network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 3 + + 네트워크에서 컬렉션 발행(Mint) + + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 43,45 + + 발행된 해당 컬렉션의 모든 NFT는 선택된 네트워크에 소유자들에 의해 병합될 것입니다. + + + Unsold NFT's + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 60,61 + + 판매되지 않은 NFT + + + Decide what should happen with all NFTs that were not sold yet. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 67 + + 아직 판매되지 않은 모든 NFT를 어떻게 처리해야할지 결정하세요. + + + Keep the same price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 76 + + 동일한 가격을 유지 + + + Take Ownership + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 86 + + 소유권 가져오기 + + + Set new price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 96 + + 새로운 가격 설정 + + + Burn all unsold + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 103 + + 판매되지 않은 모든 것을 소각(Burn) + + + Note that the collection ownership will be granted only to your profile. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 130,131 + + 컬렉션 소유권은 당신의 프로필에만 부여될 것임을 알립니다. + + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 141,143 + + 일단 발행되면, 컬렉션은 수정할 수 없고 새로운 NFT를 해당 컬렉션에 추가할 수 없습니다 + + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 150 + + 이 상자에 체크함으로써, 이 컬렉션의 NFT들에 대한 모든 판매가 취소됨을 확인합니다. + + + Confirm & Start minting + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 174,175 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 139,140 + + 확인 & 발행(Mint) 시작 + + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 196,198 + + 일단 트랜잭션이 등록되면, 컬렉션의 NFT에 대한 모든 진행중인 판매를 취소하고 (만약 선택했다면)판매되지 않은 모든 NFT를 소각(burn)할 것입니다. + + + remaining to make the transfer. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 171 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 90 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 132 + + + src/app/components/space/components/space-claim/space-claim.component.html + 78 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 87 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 140 + + + src/app/components/token/components/token-bid/token-bid.component.html + 170 + + + src/app/components/token/components/token-claim/token-claim.component.html + 199 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 194 + + + src/app/components/token/components/token-stake/token-stake.component.html + 279 + + + src/app/components/token/components/token-vote/token-vote.component.html + 209 + + 전송을 위해 그 만큼 남았습니다. + + + Expired + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 213 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 174 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 93 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 135 + + + src/app/components/space/components/space-claim/space-claim.component.html + 81 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 90 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 143 + + + src/app/components/token/components/token-bid/token-bid.component.html + 173 + + + src/app/components/token/components/token-claim/token-claim.component.html + 202 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 197 + + + src/app/components/token/components/token-stake/token-stake.component.html + 282 + + + src/app/components/token/components/token-vote/token-vote.component.html + 212 + + + src/app/pages/token/services/helper.service.ts + 204 + + 만료됨 + + + NFT's from this collection are now being migrated. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 284,285 + + 이 컬렉션의 NFT는 지금 병합되었습니다. + + + NFT's in collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 308,309 + + 컬렉션의 NFT + + + Total Storage Fee + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 318 + + 총 스토리지 수수료 + + + (NFTs Storage Fee + Collection Storage Fee) + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 319 + + (NFT 스토리지 수수료 + 컬렉션 스토리지 수수료) + + + Select network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 91 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 86 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 100 + + 네트워크를 선택하세요 + + + Pending + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5,6 + + 대기중 + + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 4 + + + src/app/pages/nft/pages/new/single/single.page.html + 352 + + 컬렉션이 필요합니다. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 13 + + 컬렉션 선택하기 + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 83 + + 컬렉션 선택하기 + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 114 + + + src/app/components/space/components/select-space/select-space.component.html + 114 + + 결과가 없습니다 + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 20 + + 모든 컬렉션 + + + + + + + src/app/components/confirm-modal/confirm-modal.component.html + 48,50 + + + src/app/components/confirm-modal/confirm-modal.component.html + 51,53 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 246,251 + + + src/app/components/token/components/token-vote/token-vote.component.html + 46,47 + + + src/app/pages/collection/pages/collection/collection.page.html + 130,131 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 55,56 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 71,72 + + + + + Are you sure? + + src/app/components/confirm-modal/confirm-modal.component.ts + 30 + + Are you sure? + + + Close + + src/app/components/confirm-modal/confirm-modal.component.ts + 33 + + Close + + + Confirm + + src/app/components/confirm-modal/confirm-modal.component.ts + 34 + + + src/app/components/token/components/token-bid/token-bid.component.html + 146 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 170 + + + src/app/components/token/components/token-vote/token-vote.component.html + 181 + + Confirm + + + Connect wallet + + src/app/components/connect-wallet/connect-wallet.component.html + 7 + + Connect wallet + + + d + + src/app/components/countdown/countdown.component.html + 55 + + 날짜 + + + h + + src/app/components/countdown/countdown.component.html + 68 + + 시간 + + + hours + + src/app/components/countdown/countdown.component.html + 69 + + 시간 + + + m + + src/app/components/countdown/countdown.component.html + 81 + + + + + min + + src/app/components/countdown/countdown.component.html + 82 + + + + + s + + src/app/components/countdown/countdown.component.html + 94 + + + + + sec + + src/app/components/countdown/countdown.component.html + 95 + + + + + Ends + + src/app/components/date-tag/date-tag.component.ts + 11 + + Ends + + + Price + + src/app/components/iota-input/iota-input.component.html + 3 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 139 + + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 81 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 19 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 124 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 49 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 75 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 37 + + + src/app/pages/token/pages/trade/trade.page.html + 209 + + + src/app/pages/token/pages/trade/trade.page.html + 283 + + + src/app/pages/token/pages/trade/trade.page.html + 372 + + + src/app/pages/token/pages/trade/trade.page.html + 659 + + + src/app/pages/token/pages/trade/trade.page.html + 846 + + 가격 + + + Verified addresses + + src/app/components/member/components/member-about/member-about.component.html + 90 + + Verified addresses + + + Manage + + src/app/components/member/components/member-about/member-about.component.html + 96 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 297 + + + src/app/pages/space/pages/space/space.page.ts + 53 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 18 + + Manage + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 119 + + 최근에 가입한 스페이스 + + + All + + src/app/components/member/components/member-about/member-about.component.html + 124 + + 전체 + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 155 + + 아직 기여한 바 없음. + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 74 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 22 + + 보상 + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 14 + + 이름 표시 + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19 + + 표시되는 이름을 정합니다. 이는 유저네임을 바꾸는 것이 아닙니다. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 26 + + 표시되는 이름 (선택) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 36 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 208 + + + src/app/pages/space/pages/space/space.page.ts + 44 + + 정보 + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 41 + + 프로필에 표시되는 간단한 자기소개입니다. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 48 + + 당신의 설명 (선택 사항) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 57 + + + src/app/pages/space/pages/upsert/upsert.page.html + 166 + + 아바타 + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 62 + + 당신의 수나버스 아이덴티티를 커스터마이즈 하십시오. + + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,78 + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 92 + + 와우! 당신의 아바타가 제일 예쁜 것 같아요. 축하해요. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 97 + + + src/app/pages/space/pages/upsert/upsert.page.html + 54 + + 네트워킹 + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 99 + + + src/app/pages/space/pages/upsert/upsert.page.html + 61 + + 유효하지 않은 깃허브 아이디입니다. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 105 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67 + + 깃허브 계정 아이디를 입력하세요. + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 117 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 177 + + + src/app/pages/space/pages/upsert/upsert.page.html + 78 + + 잘못된 트위터 사용자이름. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 123 + + + src/app/pages/space/pages/upsert/upsert.page.html + 84 + + 당신의 트위터 계정 사용자이름을 입력하세요. + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 135 + + 오직 username#1234 형식의 사용자이름만 지원됩니다. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 141 + + 디스코드 아이디를 입력하세요. + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 155 + + 설정 + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 157,158 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 123,124 + + 변경 사항 저장 + + + + + + + src/app/components/network/components/select-network/select-network.component.html + 4,6 + + + + + + Shimmer + + src/app/components/network/components/select-network/select-network.component.html + 17 + + + src/app/components/network/components/select-network/select-network.component.html + 28 + + + src/app/components/network/components/selected-network/selected-network.component.html + 11 + + + src/app/pages/award/pages/award/award.page.html + 44 + + + src/app/pages/collection/pages/collection/collection.page.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 575 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 169 + + Shimmer + + + IOTA + + src/app/components/network/components/select-network/select-network.component.html + 45 + + + src/app/components/network/components/select-network/select-network.component.html + 56 + + + src/app/components/network/components/selected-network/selected-network.component.html + 19 + + + src/app/pages/award/pages/award/award.page.html + 52 + + + src/app/pages/collection/pages/collection/collection.page.html + 59 + + + src/app/pages/nft/pages/nft/nft.page.html + 583 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 177 + + IOTA + + + Selected Network + + src/app/components/network/components/selected-network/selected-network.component.html + 4,6 + + Selected Network + + + Shimmer Testnet + + src/app/components/network/components/selected-network/selected-network.component.html + 15 + + + src/app/pages/award/pages/award/award.page.html + 48 + + + src/app/pages/collection/pages/collection/collection.page.html + 55 + + + src/app/pages/nft/pages/nft/nft.page.html + 579 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 173 + + Shimmer Testnet + + + IOTA Devnet + + src/app/components/network/components/selected-network/selected-network.component.html + 23 + + + src/app/pages/award/pages/award/award.page.html + 56 + + + src/app/pages/collection/pages/collection/collection.page.html + 63 + + + src/app/pages/nft/pages/nft/nft.page.html + 587 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 181 + + IOTA Devnet + + + Send + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + 보내기 + + + to following address: + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + to following address: + + + Copied + + src/app/components/network/components/send-funds/send-funds.component.html + 25 + + + src/app/components/share/share.component.html + 27 + + + src/app/components/wallet-address/wallet-address.component.html + 29 + + 복사됨 + + + Copy + + src/app/components/network/components/send-funds/send-funds.component.html + 26 + + 복사하기 + + + Do not send funds from an exchange, always use wallets you fully control. + + + src/app/components/network/components/send-funds/send-funds.component.html + 34,36 + + Do not send funds from an exchange, always use wallets you fully control. + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 3 + + 입찰하기 + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 15 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 16 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 25 + + NFT 이미지 + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 38 + + 종료 + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 48 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 36 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46 + + 로열티 + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 55 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 43 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 53 + + 로열티는 자동으로 공제되어 아티스트에게 지급됩니다. + + + Royalties goes to + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 73,74 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 61,62 + + Royalties goes to + + + + + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 75,76 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 63,64 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 262,263 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 188,189 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 264,265 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 306,307 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 344,345 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 45 + + + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 109 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + 현재 최고 입찰가 + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 111 + + + src/app/pages/nft/pages/nft/nft.page.html + 111 + + 최소 입찰가 + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 127 + + + src/app/pages/nft/pages/nft/nft.page.html + 116 + + 당신의 입찰가가 가장 높습니다. + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 172,173 + + Current price is refreshing in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 208,209 + + 경매에 참여하는 NTF의 주소는 경매가 진행되는 동안 당신에게만 열립니다. 결제 후 당신의 입찰은 잠기게 되며, 더 높은 가격의 입찰이 생길 경우 즉시 환불해 드립니다. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 216,218 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,257 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 321,323 + + 더 높은 입찰가가 생기는 경우 즉시 환불됩니다. 만약 다른 입찰을 하려면 똑같은 주소로 더 높은 금액을 직접 보내십시오. + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 237,238 + + 입찰하기 + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 278 + + Your transactions + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 286 + + 보낸 날짜 + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 287 + + + src/app/pages/token/pages/trade/trade.page.html + 854 + + 시간 + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 289 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 33 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 110 + + + src/app/pages/member/pages/tokens/tokens.page.html + 328 + + + src/app/pages/member/pages/transactions/transactions.page.html + 25 + + + src/app/pages/nft/pages/nft/nft.page.html + 323 + + + src/app/pages/nft/pages/nft/nft.page.html + 385 + + + src/app/pages/nft/pages/nft/nft.page.html + 435 + + + src/app/pages/token/pages/trade/trade.page.html + 200 + + + src/app/pages/token/pages/trade/trade.page.html + 274 + + + src/app/pages/token/pages/trade/trade.page.html + 363 + + + src/app/pages/token/pages/trade/trade.page.html + 664 + + + src/app/pages/token/pages/trade/trade.page.html + 851 + + 금액 + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 55 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 96 + + 상세 정보 + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 311,310 + + + src/app/pages/nft/pages/nft/nft.page.html + 324 + + + src/app/pages/nft/pages/nft/nft.page.html + 360,359 + + + src/app/pages/nft/pages/nft/nft.page.html + 386 + + + src/app/pages/nft/pages/nft/nft.page.html + 410,409 + + + src/app/pages/nft/pages/nft/nft.page.html + 436 + + + src/app/pages/nft/pages/nft/nft.page.html + 460,459 + + 링크 + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 345 + + 축하합니다, NFT를 획득하셨습니다. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 357,358 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 283,284 + + + src/app/components/token/components/token-bid/token-bid.component.html + 271,272 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 313,314 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 306,307 + + + src/app/components/token/components/token-vote/token-vote.component.html + 330,331 + + 결제 닫기 + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 368,369 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 294,295 + + 내 NFT 보기 + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 384 + + Bidding is expired. Good luck next time :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 272 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 459 + + 생성된 NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 274 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 461 + + SFT + + + NFT is not yet migrated to the decentralized network. + + src/app/components/nft/components/nft-card/nft-card.component.html + 65 + + NFT is not yet migrated to the decentralized network. + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 118 + + + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 156 + + 현재 입찰가 + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 191 + + + src/app/pages/nft/pages/nft/nft.page.html + 594 + + 소유자: + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 229,231 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 167 + + 새 NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 3 + + 주문하기 + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 74,75 + + Total price + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150,151 + + 확인 및 잠그기 + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 156 + + 을 구매하기 위해 당신의 NFT가 잠깁니다. + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 185 + + 유효하지 않은 금액을 받았습니다. 다시 시도해보세요. + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 237,238 + + 당신의 트랜잭션을 검증하는 중... + + + Order created. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 437 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 332 + + Order created. + + + Deposit NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 215 + + Deposit NFT + + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 46,48 + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + + Confirm & Start deposit + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 76,77 + + Confirm & Start deposit + + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 113,115 + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + + NFT has been deposited. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 165 + + NFT has been deposited. + + + See NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 169,170 + + See NFT + + + Terms & Conditions + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 85 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 107 + + Terms & Conditions + + + Send NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 86 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 108 + + Send NFT + + + NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 147 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 172 + + NFT received. + + + Invalid NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 191 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 216 + + Invalid NFT received. + + + Invalid NFT refunded. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 205 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 230 + + Invalid NFT refunded. + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 19 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 37 + + 미리보기 + + + Sale Starts + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 57 + + + src/app/pages/nft/services/helper.service.ts + 142 + + 판매 개시 + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 60 + + + src/app/pages/nft/pages/nft/nft.page.html + 70 + + 현재 가격 + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 80 + + 작성자 + + + System info + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 119 + + + src/app/pages/nft/pages/nft/nft.page.html + 634 + + System info + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 130 + + + src/app/pages/nft/pages/nft/nft.page.html + 654 + + 현재 주소는 라이브 메인넷에 연결되어 있지 않습니다. IOTA/Shimmer에서 기능이 지원되는 즉시, 이 NFT를 선택한 네트워크로 한 번의 클릭으로 마이그레이션할 수 있어야 합니다. + + + Properties + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 135 + + + src/app/pages/nft/pages/new/single/single.page.html + 90 + + 속성 + + + Stats + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 139 + + + src/app/pages/nft/pages/new/single/single.page.html + 193,192 + + 능력치 + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149 + + + src/app/pages/nft/pages/new/single/single.page.html + 301 + + + src/app/pages/nft/pages/nft/nft.page.html + 27 + + NFT 이미지 + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + IPFS 메타데이터 + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + IPFS 이미지 + + + Available once minted... + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 64 + + + src/app/pages/nft/pages/nft/nft.page.ts + 81 + + Available once minted... + + + Set your floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 6,7 + + Set your floor price + + + Available time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 42,43 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 42,43 + + Available time + + + NOW + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 54,55 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 54,55 + + NOW + + + Select Date/Time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Select Date/Time + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 71 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 71 + + + src/app/pages/nft/pages/new/single/single.page.html + 69 + + "사용가능 켜짐" 상태가 요구됩니다. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 80 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 80 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 70 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 81 + + + src/app/pages/nft/pages/new/single/single.page.html + 68 + + + src/app/pages/nft/pages/new/single/single.page.html + 79 + + 사용가능 켜짐 + + + Auction length + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 91,92 + + Auction length + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 98 + + 커뮤니티가 투표를 하면 다음 스프린트에 다양한 경매 기간이 제공됩니다! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 115 + + 경매 기간은 3일입니다. + + + Auction can't be canceled after start date + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 125 + + Auction can't be canceled after start date + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 129 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 145 + + 당신의 리스팅이 완료되면 확인 메시지를 받게 될 것입니다. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 138,139 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 154,155 + + Confirm listing + + + Set your price + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 6,7 + + Set your price + + + Sale type + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Sale type + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 103,104 + + Open Sale + + + Specific member(s) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 113,114 + + Specific member(s) + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2 + + + src/app/pages/token/pages/trade/trade.page.html + 110 + + Trade history + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 8,10 + + 아이템은 오직 당신만의 것입니다. + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 16 + + 이렇게 하면 당신의 아이템을 판매할 수 없게 됩니다. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 17 + + 판매 중지! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 15 + + 판매 품목 목록 + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 80 + + 비매품 + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 88 + + + src/app/pages/token/services/new.service.ts + 29 + + 정가 + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 96 + + 경매 + + + Stake NFT + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 221 + + Stake NFT + + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 46,48 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 147,149 + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + + For how long you want to stake? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 56,57 + + + src/app/components/token/components/token-stake/token-stake.component.html + 174,175 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 57,58 + + For how long you want to stake? + + + Stake type? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 77,78 + + Stake type? + + + Confirm & Start Stake + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 118,119 + + Confirm & Start Stake + + + NFT has been staked. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 207 + + NFT has been staked. + + + See Collection + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 218,219 + + See Collection + + + Dynamic + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 76 + + Dynamic + + + Static + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 80 + + Static + + + More + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 97,98 + + More + + + Pending + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 6,7 + + + src/app/pages/token/pages/token/token.page.html + 36 + + + src/app/pages/token/pages/trade/trade.page.html + 524 + + Pending + + + Rejected + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 12,13 + + + src/app/pages/token/pages/token/token.page.html + 42 + + Rejected + + + Commencing + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 18,19 + + Commencing + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 24,25 + + 진행중 + + + Completed + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 31,32 + + Completed + + + Share + + src/app/components/share/share.component.html + 16 + + + src/app/components/share/share.component.html + 39 + + + src/app/pages/token/pages/trade/trade.page.html + 64 + + + src/app/pages/token/pages/trade/trade.page.html + 635,634 + + 공유하기 + + + Copy to clipboard + + src/app/components/share/share.component.html + 28 + + 클립보드로 복사 + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 4 + + + src/app/pages/award/pages/new/new.page.html + 121 + + + src/app/pages/proposal/pages/new/new.page.html + 211 + + 스페이스가 필요합니다. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 13 + + 스페이스 선택하기 + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 83 + + + src/app/pages/award/pages/new/new.page.html + 152 + + + src/app/pages/proposal/pages/new/new.page.html + 242 + + 스페이스 선택하기 + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 20 + + 모든 스페이스 + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 19,20 + + Joined + + + members + + src/app/components/space/components/space-card/space-card.component.html + 44 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 23 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + 회원들 + + + Space Claim + + src/app/components/space/components/space-claim/space-claim.component.html + 3 + + Space Claim + + + Confirm and generate address + + src/app/components/space/components/space-claim/space-claim.component.html + 54,55 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 52,53 + + + src/app/components/token/components/token-claim/token-claim.component.html + 138,139 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 96,97 + + + src/app/components/token/components/token-stake/token-stake.component.html + 251,252 + + Confirm and generate address + + + Claim complete. Congratulations. + + src/app/components/space/components/space-claim/space-claim.component.html + 160 + + + src/app/components/token/components/token-claim/token-claim.component.html + 281 + + Claim complete. Congratulations. + + + Close + + src/app/components/space/components/space-claim/space-claim.component.html + 172,173 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 181,182 + + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 29,30 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 79,80 + + + src/app/components/token/components/token-claim/token-claim.component.html + 293,294 + + + src/app/components/token/components/token-stake/token-stake.component.html + 378,379 + + 닫기 + + + Invalid amount or invalid senders address. Refunding transaction... + + src/app/components/space/components/space-claim/space-claim.component.ts + 183 + + Invalid amount or invalid senders address. Refunding transaction... + + + Funds refunded. + + src/app/components/space/components/space-claim/space-claim.component.ts + 222 + + Funds refunded. + + + Space claim submitted. + + src/app/components/space/components/space-claim/space-claim.component.ts + 306 + + Space claim submitted. + + + Token Reward Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 16 + + Token Reward Schedule + + + Existing Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 29 + + Existing Schedule + + + Upload New + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 37 + + Upload New + + + Vault address: + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 55,64 + + Vault address: + + + Schedule a new Reward + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 82,83 + + Schedule a new Reward + + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 93,95 + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + + Start Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 148 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 24 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 24 + + 시작일 + + + End Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 149 + + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 19 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 25 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 25 + + 종료 날짜 + + + Vesting Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 150 + + Vesting Date + + + Tokens to Distribute + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 151 + + Tokens to Distribute + + + Status + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 152 + + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 110,109 + + + src/app/pages/token/pages/trade/trade.page.html + 376 + + 상태 + + + Proposal created to remove the reward. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 154 + + Proposal created to remove the reward. + + + By checking this box, you agree with + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 12 + + 이 체크박스를 클릭함으로써 당신은 아래의 내용에 동의하는 것입니다. + + + Terms and Conditions + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 13 + + 이용 약관 + + + Timeline + + src/app/components/timeline/timeline.component.html + 2 + + + src/app/components/timeline/timeline.component.html + 8 + + 타임라인 + + + Earned Badge + + src/app/components/timeline/timeline.component.html + 66 + + 뱃지를 얻음 + + + with + + src/app/components/timeline/timeline.component.html + 66 + + 와 함께 + + + Listed by + + src/app/components/timeline/timeline.component.html + 109 + + ~에 의해 목록에 올라감. + + + Made available for auction by + + src/app/components/timeline/timeline.component.html + 112 + + 에 의해 경매에 부쳐짐. + + + Purchased by + + src/app/components/timeline/timeline.component.html + 170 + + 구매자 + + + See + + src/app/components/timeline/timeline.component.html + 181 + + See + + + Hide + + src/app/components/timeline/timeline.component.html + 182 + + Hide + + + Listed by space + + src/app/components/timeline/timeline.component.html + 287 + + 스페이스가 목록에 올림 + + + Refund blocked funds + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 3 + + Refund blocked funds + + + Total available tokens to refund + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 29 + + Total available tokens to refund + + + Refund complete. Congratulations. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 169 + + Refund complete. Congratulations. + + + Credit refund submitted. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 309 + + Credit refund submitted. + + + Airdrop tokens on the network + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 3 + + Airdrop tokens on the network + + + Tokens to airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 56,57 + + Tokens to airdrop + + + Confirm & Start Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 86,87 + + Confirm & Start Airdrop + + + Tokens to Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 120,121 + + Tokens to Airdrop + + + Finish Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 239,240 + + Finish Airdrop + + + Detail + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 60,61 + + Detail + + + Trade + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 70,71 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 201,202 + + Trade + + + Price (USD) + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 101 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 145 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 86 + + Price (USD) + + + 24h Change + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 126,127 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 115,116 + + 24h Change + + + 24h Volume + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 154 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 146 + + 24h Volume + + + M. Cap + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 172 + + M. Cap + + + Open buy order + + src/app/components/token/components/token-bid/token-bid.component.html + 3 + + Open buy order + + + Summary + + src/app/components/token/components/token-bid/token-bid.component.html + 29,30 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 39,40 + + + src/app/components/token/components/token-offer/token-offer.component.html + 46,47 + + Summary + + + Token amount to buy + + src/app/components/token/components/token-bid/token-bid.component.html + 34,35 + + Token amount to buy + + + Offered price per token + + src/app/components/token/components/token-bid/token-bid.component.html + 44,45 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 44,45 + + + src/app/components/token/components/token-offer/token-offer.component.html + 51,52 + + Offered price per token + + + Token amount to send + + src/app/components/token/components/token-bid/token-bid.component.html + 73,74 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 117,118 + + Token amount to send + + + ~ + + src/app/components/token/components/token-bid/token-bid.component.html + 89,98 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 60,69 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 90,99 + + + src/app/pages/token/pages/trade/trade.page.html + 553,556 + + ~ + + + I agree with + + src/app/components/token/components/token-bid/token-bid.component.html + 129 + + + src/app/components/token/components/token-claim/token-claim.component.html + 115 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 153 + + + src/app/components/token/components/token-offer/token-offer.component.html + 133 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 78 + + + src/app/components/token/components/token-refund/token-refund.component.html + 65 + + I agree with + + + Token terms and Conditions + + src/app/components/token/components/token-bid/token-bid.component.html + 131 + + + src/app/components/token/components/token-claim/token-claim.component.html + 117 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 155 + + + src/app/components/token/components/token-offer/token-offer.component.html + 135 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 80 + + + src/app/components/token/components/token-refund/token-refund.component.html + 67 + + Token terms and Conditions + + + and generate address + + src/app/components/token/components/token-bid/token-bid.component.html + 147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 171 + + + src/app/components/token/components/token-vote/token-vote.component.html + 182 + + and generate address + + + Once you agree with the terms, the generated address will remain active during the whole sale. + + src/app/components/token/components/token-bid/token-bid.component.html + 154,155 + + + src/app/components/token/components/token-claim/token-claim.component.html + 146,147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 178,179 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 103,104 + + Once you agree with the terms, the generated address will remain active during the whole sale. + + + Buy complete. Congratulations. + + src/app/components/token/components/token-bid/token-bid.component.html + 259 + + Buy complete. Congratulations. + + + Bid created. + + src/app/components/token/components/token-bid/token-bid.component.ts + 344 + + Bid created. + + + Are you sure you want to cancel the sale? + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 17 + + Are you sure you want to cancel the sale? + + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 23,25 + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + + Cancel sale + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 32,33 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 74,75 + + Cancel sale + + + Canceled public sale. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts + 56 + + Canceled public sale. + + + Total () + + src/app/components/token/components/token-cancel/token-cancel.component.html + 51,52 + + Total () + + + Are you sure you want to cancel your buy order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 66 + + Are you sure you want to cancel your buy order? + + + Are you sure you want to cancel your sell order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 69 + + Are you sure you want to cancel your sell order? + + + Confirm + + src/app/components/token/components/token-cancel/token-cancel.component.html + 76,77 + + Confirm + + + Cancelled. + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 48 + + + src/app/pages/token/pages/trade/trade.page.ts + 589 + + Cancelled. + + + Cancel your buy + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 80 + + Cancel your buy + + + Cancel your sell + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 81 + + Cancel your sell + + + Ongoing sale + + src/app/components/token/components/token-card/token-card.component.html + 22 + + Ongoing sale + + + Sale ends soon + + src/app/components/token/components/token-card/token-card.component.html + 23 + + Sale ends soon + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 24 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 21 + + Cooldown ends + + + Sale starts + + src/app/components/token/components/token-card/token-card.component.html + 55,57 + + Sale starts + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 115,117 + + + src/app/components/token/components/token-card/token-card.component.html + 175,177 + + Sale ends + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 130 + + + src/app/components/token/components/token-card/token-card.component.html + 190 + + + src/app/components/token/components/token-card/token-card.component.html + 250 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 176 + + + src/app/components/token/components/token-row/token-row.component.html + 79 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 20 + + Sale ends + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 235,237 + + Cooldown ends + + + Token Claim + + src/app/components/token/components/token-claim/token-claim.component.html + 3 + + Token Claim + + + Total available tokens to claim as of today + + src/app/components/token/components/token-claim/token-claim.component.html + 42 + + + src/app/components/token/components/token-claim/token-claim.component.html + 56 + + Total available tokens to claim as of today + + + Tokens available from + + src/app/components/token/components/token-claim/token-claim.component.html + 76 + + Tokens available from + + + Total tokens to claim + + src/app/components/token/components/token-claim/token-claim.component.html + 84 + + Total tokens to claim + + + Token claim submitted. + + src/app/components/token/components/token-claim/token-claim.component.ts + 320 + + Token claim submitted. + + + Guardian's of the space will be able to decide where this token will be minted. + + src/app/components/token/components/token-info/token-info-description.component.html + 41 + + Guardian's of the space will be able to decide where this token will be minted. + + + Icon + + src/app/components/token/components/token-info/token-info-description.component.ts + 25 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 24 + + Icon + + + Name + + src/app/components/token/components/token-info/token-info-description.component.ts + 26 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 25 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 31,30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 74 + + + src/app/pages/nft/pages/new/single/single.page.html + 21 + + + src/app/pages/nft/pages/new/single/single.page.html + 27,26 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 15 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 21,20 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 25 + + 이름 + + + Symbol + + src/app/components/token/components/token-info/token-info-description.component.ts + 27 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 30 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 39,38 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 26 + + Symbol + + + Launchpad Price + + src/app/components/token/components/token-info/token-info-description.component.ts + 28 + + Launchpad Price + + + Network + + src/app/components/token/components/token-info/token-info-description.component.ts + 29 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 20 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 5,4 + + + src/app/pages/nft/pages/nft/nft.page.html + 542 + + + src/app/pages/nft/pages/nft/nft.page.html + 564 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 119 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 160 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 28 + + Network + + + Total supply + + src/app/components/token/components/token-info/token-info-description.component.ts + 30 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 29 + + Total supply + + + Current distribution + + src/app/components/token/components/token-info/token-info-description.component.ts + 31 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 30 + + Current distribution + + + Type + + src/app/components/token/components/token-info/token-info-description.component.ts + 32 + + + src/app/pages/member/pages/tokens/tokens.page.html + 58 + + + src/app/pages/member/pages/tokens/tokens.page.html + 325 + + + src/app/pages/member/pages/transactions/transactions.page.html + 24 + + + src/app/pages/nft/pages/nft/nft.page.html + 384 + + + src/app/pages/nft/pages/nft/nft.page.html + 434 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 31 + + + src/app/pages/token/pages/trade/trade.page.html + 361 + + 형식 + + + Coming soon + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 91,92 + + Coming soon + + + In Cooldown + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 98,99 + + + src/app/components/token/components/token-row/token-row.component.html + 245,246 + + In Cooldown + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 108,109 + + + src/app/components/token/components/token-row/token-row.component.html + 256,257 + + + src/app/pages/token/pages/trade/trade.page.html + 456 + + + src/app/pages/token/pages/trade/trade.page.html + 467 + + + src/app/pages/token/pages/trade/trade.page.html + 909,910 + + Buy + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 116 + + + src/app/pages/token/pages/trade/trade.page.html + 387 + + + src/app/pages/token/pages/trade/trade.page.html + 1210 + + Buy + + + Sale starts + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 167 + + + src/app/components/token/components/token-row/token-row.component.html + 70 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 19 + + Sale starts + + + Cooldown period ends + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 187,188 + + + src/app/components/token/components/token-row/token-row.component.html + 90,91 + + Cooldown period ends + + + Mint token on network + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 3 + + Mint token on network + + + Public sale will no longer be available after bringing token to a network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 45,46 + + Public sale will no longer be available after bringing token to a network. + + + Once minted all owners will have the option to migrate their tokens to the selected network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 56,58 + + Once minted all owners will have the option to migrate their tokens to the selected network. + + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 68,70 + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + + Tokens to migrate + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 92,93 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 173,174 + + Tokens to migrate + + + Locked public tokens + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 107,108 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 189,190 + + Locked public tokens + + + Open sale order + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 3 + + Open sale order + + + Token ID + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 30,31 + + + src/app/components/token/components/token-offer/token-offer.component.html + 27,28 + + Token ID + + + You will receive + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 74,75 + + + src/app/components/token/components/token-offer/token-offer.component.html + 73,74 + + + src/app/pages/token/pages/trade/trade.page.html + 1132,1133 + + You will receive + + + Fee + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 103 + + + src/app/components/token/components/token-offer/token-offer.component.html + 101 + + + src/app/pages/token/pages/trade/trade.page.html + 1172 + + Fee + + + No FEES! + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 110,111 + + + src/app/components/token/components/token-offer/token-offer.component.html + 108,109 + + + src/app/pages/token/pages/trade/trade.page.html + 1188,1189 + + No FEES! + + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 232,234 + + + src/app/components/token/components/token-vote/token-vote.component.html + 249,251 + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + + Sell complete. Congratulations. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 301 + + + src/app/components/token/components/token-vote/token-vote.component.html + 318 + + Sell complete. Congratulations. + + + Offer order created. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 346 + + Offer order created. + + + Open Token Sell + + src/app/components/token/components/token-offer/token-offer.component.html + 3 + + Open Token Sell + + + Your Balance + + src/app/components/token/components/token-offer/token-offer.component.html + 35,36 + + Your Balance + + + Offered amount of tokens + + src/app/components/token/components/token-offer/token-offer.component.html + 64,65 + + Offered amount of tokens + + + Create a Sell Order + + src/app/components/token/components/token-offer/token-offer.component.html + 151,152 + + Create a Sell Order + + + Offer created. + + src/app/components/token/components/token-offer/token-offer.component.ts + 102 + + Offer created. + + + Public sale info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 4 + + Public sale info + + + Start date is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 7 + + Start date is required. + + + Start date for the token offering + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 16 + + Start date for the token offering + + + Offering length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 23 + + Offering length is required. + + + Select token offering length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 48 + + Select token offering length (Default 2 days) + + + Token allocation info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 63 + + Token allocation info + + + Sale Setup + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 81 + + Sale Setup + + + Enable Cooldown period + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 87,88 + + Enable Cooldown period + + + Enable Cooldown with refund option. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 98,99 + + Enable Cooldown with refund option. + + + Cooldown period length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 103 + + Cooldown period length is required. + + + Select token cooldown length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 129 + + Select token cooldown length (Default 2 days) + + + No Cooldown. Participants can’t refund. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 149,150 + + No Cooldown. Participants can’t refund. + + + Enable Oversale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 160,161 + + Enable Oversale + + + No Oversale. Sale ends with 100% reached. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 171,172 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 54,55 + + No Oversale. Sale ends with 100% reached. + + + Sale continues after 100% reached + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 179,180 + + Sale continues after 100% reached + + + Confirm and schedule sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 195,196 + + Confirm and schedule sale + + + Price per token + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 106 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 34 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 42 + + Price per token + + + Public sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 135 + + + src/app/pages/token/pages/new/summary/summary.component.html + 214 + + Public sale + + + Purchase token + + src/app/components/token/components/token-purchase/token-purchase.component.html + 3 + + Purchase token + + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 113 + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + + Enter how much you want to spend. Amount of tokens will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 116 + + Enter how much you want to spend. Amount of tokens will be calculated. + + + Purchased tokens + + src/app/components/token/components/token-purchase/token-purchase.component.html + 243,244 + + Purchased tokens + + + Price + + src/app/components/token/components/token-purchase/token-purchase.component.html + 260,261 + + Price + + + Cooldown period ends + + src/app/components/token/components/token-refund/token-refund.component.html + 23 + + Cooldown period ends + + + Confirm and refund + + src/app/components/token/components/token-refund/token-refund.component.html + 82,83 + + Confirm and refund + + + Refund token + + src/app/components/token/components/token-refund/token-refund.component.ts + 61 + + Refund token + + + Initial Price + + src/app/components/token/components/token-row/token-row.component.html + 39 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 27 + + Initial Price + + + Avg. Price + + src/app/components/token/components/token-row/token-row.component.html + 47 + + Avg. Price + + + Change (24h) + + src/app/components/token/components/token-row/token-row.component.html + 107,108 + + Change (24h) + + + Volume 24h + + src/app/components/token/components/token-row/token-row.component.html + 150 + + Volume 24h + + + Market Cap + + src/app/components/token/components/token-row/token-row.component.html + 166 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 169 + + + src/app/pages/token/pages/trade/trade.page.html + 582 + + Market Cap + + + Claim + + src/app/components/token/components/token-row/token-row.component.html + 210,211 + + Claim + + + Refund + + src/app/components/token/components/token-row/token-row.component.html + 222,223 + + Refund + + + Launching soon + + src/app/components/token/components/token-row/token-row.component.html + 238,239 + + Launching soon + + + Buy / Sell + + src/app/components/token/components/token-row/token-row.component.html + 259,260 + + Buy / Sell + + + Stake your token + + src/app/components/token/components/token-stake/token-stake.component.html + 3 + + Stake your token + + + Select or define the amount you want to stake and the period for how long you want to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 13,15 + + Select or define the amount you want to stake and the period for how long you want to lock it. + + + Since you are a guardian you can also + + src/app/components/token/components/token-stake/token-stake.component.html + 17 + + Since you are a guardian you can also + + + - Choose an amount and for how long you’d like to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 50 + + - Choose an amount and for how long you’d like to lock it. + + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + src/app/components/token/components/token-stake/token-stake.component.html + 52,54 + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + + - You will get staked points based on your input. + + src/app/components/token/components/token-stake/token-stake.component.html + 56,57 + + - You will get staked points based on your input. + + + See Staking reward page for more info + + src/app/components/token/components/token-stake/token-stake.component.html + 62 + + See Staking reward page for more info + + + here. + + src/app/components/token/components/token-stake/token-stake.component.html + 63 + + here. + + + How it works + + src/app/components/token/components/token-stake/token-stake.component.html + 71 + + How it works + + + How much you want to stake? + + src/app/components/token/components/token-stake/token-stake.component.html + 87,88 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 21,22 + + How much you want to stake? + + + Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 192 + + Rewards Multiplier + + + Staking Value + + src/app/components/token/components/token-stake/token-stake.component.html + 210,219 + + Staking Value + + + Staked amount * Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 216 + + + src/app/pages/member/pages/activity/activity.page.html + 36 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 107 + + Staked amount * Rewards Multiplier + + + You will earn + + src/app/components/token/components/token-stake/token-stake.component.html + 230 + + You will earn + + + Stake complete. Congratulations. + + src/app/components/token/components/token-stake/token-stake.component.html + 366 + + Stake complete. Congratulations. + + + Token stake submitted. + + src/app/components/token/components/token-stake/token-stake.component.ts + 410 + + Token stake submitted. + + + Trade details + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 3 + + Trade details + + + Traded amount + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 29,30 + + Traded amount + + + Price per token + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 48,49 + + + src/app/pages/token/pages/new/summary/summary.component.html + 69,70 + + Price per token + + + Date and Time + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 79,80 + + Date and Time + + + Fullfilled + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 94,95 + + Fullfilled + + + Date + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 109 + + + src/app/pages/member/pages/transactions/transactions.page.html + 22 + + + src/app/pages/nft/pages/nft/nft.page.html + 383 + + + src/app/pages/nft/pages/nft/nft.page.html + 433 + + + src/app/pages/proposal/pages/votes/votes.page.html + 15 + + + src/app/pages/token/pages/trade/trade.page.html + 198 + + + src/app/pages/token/pages/trade/trade.page.html + 272 + + + src/app/pages/token/pages/trade/trade.page.html + 360 + + 날짜 + + + State + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 111 + + State + + + Storage deposit fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 144 + + Storage deposit fee + + + Fullfilment + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 171 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 252 + + Fullfilment + + + Seller + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 176 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 247 + + Seller + + + Transaction + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 204 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 280 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 314 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 358 + + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 41 + + + src/app/pages/member/pages/transactions/transactions.page.html + 74 + + Transaction + + + Non Transferable + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 153 + + + src/app/pages/member/pages/transactions/transactions.page.html + 77 + + Non Transferable + + + Processing... + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 155 + + + src/app/pages/member/pages/transactions/transactions.page.html + 87 + + Processing... + + + Soonaverse Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 170 + + Soonaverse Fee + + + Exchange Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 172 + + Exchange Fee + + + 24h change/Price + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 46 + + 24h change/Price + + + Markets + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 6 + + + src/app/pages/token/pages/trade/trade.page.html + 1242 + + Markets + + + No Tokens + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 38,39 + + + src/app/pages/tokens/pages/favourites/favourites.page.html + 25,26 + + No Tokens + + + Cast Vote + + src/app/components/token/components/token-vote/token-vote.component.html + 3 + + Cast Vote + + + Question + + src/app/components/token/components/token-vote/token-vote.component.html + 16,17 + + Question + + + Selected option + + src/app/components/token/components/token-vote/token-vote.component.html + 23,24 + + Selected option + + + How do you set your votes? + + src/app/components/token/components/token-vote/token-vote.component.html + 33,34 + + How do you set your votes? + + + Total native tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 88,89 + + Total native tokens + + + Total staked tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 105,106 + + Total staked tokens + + + Voting is active on + + src/app/components/token/components/token-vote/token-vote.component.html + 119,120 + + Voting is active on + + + Your total voting weight + + src/app/components/token/components/token-vote/token-vote.component.html + 131,132 + + Your total voting weight + + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + src/app/components/token/components/token-vote/token-vote.component.html + 151,153 + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + + Cast Votes + + src/app/components/token/components/token-vote/token-vote.component.html + 193 + + Cast Votes + + + Send Native Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 124 + + Send Native Tokens + + + Use Staked Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 128 + + Use Staked Tokens + + + Vote received. + + src/app/components/token/components/token-vote/token-vote.component.ts + 191 + + Vote received. + + + Transaction confirmed and funds refunded. + + src/app/components/token/components/token-vote/token-vote.component.ts + 217 + + Transaction confirmed and funds refunded. + + + Token vote executed. + + src/app/components/token/components/token-vote/token-vote.component.ts + 375 + + Token vote executed. + + + Token vote order created. + + src/app/components/token/components/token-vote/token-vote.component.ts + 392 + + Token vote order created. + + + Type + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 13,14 + + Type + + + Date + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 22,23 + + Date + + + Manage addresses + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 3 + + Manage addresses + + + Not yet verified + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 59 + + Not yet verified + + + Change + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 66 + + Change + + + Verify + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 67 + + Verify + + + You will be asked to send funds to the new + + src/app/components/wallet-address/verify-address/verify-address.component.html + 33 + + You will be asked to send funds to the new + + + address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/verify-address/verify-address.component.html + 36,37 + + address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/verify-address/verify-address.component.html + 41 + + 스페이스 + + + profile + + src/app/components/wallet-address/verify-address/verify-address.component.html + 43 + + 프로필 + + + for future transactions. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 44 + + 향후의 거래를 위해. + + + Generate new address + + src/app/components/wallet-address/verify-address/verify-address.component.html + 55,56 + + 새로운 주소 생성하기 + + + Send a small + + src/app/components/wallet-address/verify-address/verify-address.component.html + 66 + + 작은... 보내기 + + + amount to validate your address. This expires in + + src/app/components/wallet-address/verify-address/verify-address.component.html + 67 + + 유효한 주소인지 확인하는 금액입니다. 이것은 이때 만료됩니다. + + + Expired. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 70 + + 만료됨. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/verify-address/verify-address.component.html + 106,107 + + 트랜잭션이 검증되기를 기다립니다. 트랜잭션이 완료되면 다시 보내드리겠습니다. + + + Validating address... + + src/app/components/wallet-address/verify-address/verify-address.component.html + 136 + + Validating address... + + + Now you can deal with NFTs and participate in token trading. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 174 + + Now you can deal with NFTs and participate in token trading. + + + Your new address has been verified! + + src/app/components/wallet-address/verify-address/verify-address.component.html + 176 + + Your new address has been verified! + + + Finish Verification + + src/app/components/wallet-address/verify-address/verify-address.component.html + 181,182 + + 검증 종료 + + + Generate address + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 76 + + 주소 생성 + + + Refunding your payment... + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 192 + + Refunding your payment... + + + Address is not verified + + src/app/components/wallet-address/wallet-address.component.html + 4 + + Address is not verified + + + wallet + + src/app/components/wallet-address/wallet-address.component.html + 25 + + wallet + + + Copy address + + src/app/components/wallet-address/wallet-address.component.html + 30 + + Copy address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + 당신의... 를 검증하기 + + + address + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + 주소 + + + This network is currently not enabled. + + src/app/components/wallet-address/wallet-address.component.ts + 82 + + This network is currently not enabled. + + + Award Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Award Info + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 20 + + 소유자 + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 18 + + 뱃지들 사용된/ 사용가능한 + + + Badge lock period + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 20 + + Badge lock period + + + Award info + + src/app/pages/award/pages/award/award.page.html + 3 + + + src/app/pages/award/pages/new/new.page.html + 17 + + 어워드 정보 + + + Minted on: + + src/app/pages/award/pages/award/award.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 47 + + Minted on: + + + Fund Award + + src/app/pages/award/pages/award/award.page.html + 121,122 + + Fund Award + + + Minting in Progress + + src/app/pages/award/pages/award/award.page.html + 129,130 + + Minting in Progress + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 136 + + + src/app/pages/award/pages/award/award.page.html + 210 + + 어워드 체크 아웃 + + + Reject Award + + src/app/pages/award/pages/award/award.page.html + 157 + + Reject Award + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 166 + + 당신의 참여를 확정하기 + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 174,176 + + 이제 모든 커뮤니케이션이 플랫폼 외부에서 처리되므로 어워드 생성자에게 당신의 연락처를 알려주십시오. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 180 + + 당신의 작업에 대한 설명이나 링크를 제공하세요. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 188 + + Submit + + + Cancel + + src/app/pages/award/pages/award/award.page.html + 189 + + + src/app/pages/token/pages/trade/trade.page.html + 245 + + + src/app/pages/token/pages/trade/trade.page.html + 333 + + Cancel + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 41 + + + src/app/pages/token/pages/new/new.page.ts + 34 + + + src/app/pages/token/pages/token/token.page.ts + 36 + + 개요 + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 105 + + 참가자 + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2 + + 새로운 상 + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14 + + + src/app/pages/award/pages/new/new.page.html + 77 + + + src/app/pages/proposal/pages/new/new.page.html + 24 + + 제목이 필요합니다. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19 + + 어워드에는 제목과 설명이 포함됩니다. 종료 날짜는 어워드 기간을 결정합니다. + + + Title + + src/app/pages/award/pages/new/new.page.html + 23 + + + src/app/pages/award/pages/new/new.page.html + 29,28 + + + src/app/pages/award/pages/new/new.page.html + 76 + + + src/app/pages/award/pages/new/new.page.html + 83,82 + + + src/app/pages/proposal/pages/new/new.page.html + 23 + + + src/app/pages/proposal/pages/new/new.page.html + 29,28 + + + src/app/pages/proposal/pages/new/new.page.html + 103 + + + src/app/pages/proposal/pages/new/new.page.html + 109,108 + + + src/app/pages/proposal/pages/new/new.page.html + 156 + + + src/app/pages/proposal/pages/new/new.page.html + 162,161 + + + src/app/pages/space/pages/upsert/upsert.page.html + 24 + + + src/app/pages/space/pages/upsert/upsert.page.html + 30,29 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 106 + + + src/app/pages/token/pages/new/overview/overview.component.html + 22 + + + src/app/pages/token/pages/new/overview/overview.component.html + 29,28 + + + src/app/pages/token/pages/new/overview/overview.component.html + 65 + + + src/app/pages/token/pages/new/overview/overview.component.html + 72,71 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 9 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 16,15 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 55 + + 제목 + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 24 + + 이름을 입력해야 합니다. + + + End + + src/app/pages/award/pages/new/new.page.html + 36 + + + src/app/pages/award/pages/new/new.page.html + 47,46 + + + src/app/pages/proposal/pages/new/new.page.html + 56 + + + src/app/pages/proposal/pages/new/new.page.html + 68,67 + + 종료 + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 37 + + + src/app/pages/proposal/pages/new/new.page.html + 57 + + 종료 날짜가 필요합니다. + + + Description + + src/app/pages/award/pages/new/new.page.html + 52 + + + src/app/pages/award/pages/new/new.page.html + 58 + + + src/app/pages/award/pages/new/new.page.html + 91 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 40 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 45 + + + src/app/pages/nft/pages/new/single/single.page.html + 33 + + + src/app/pages/nft/pages/new/single/single.page.html + 38 + + + src/app/pages/proposal/pages/new/new.page.html + 76 + + + src/app/pages/proposal/pages/new/new.page.html + 82 + + + src/app/pages/proposal/pages/new/new.page.html + 119 + + + src/app/pages/proposal/pages/new/new.page.html + 124 + + + src/app/pages/proposal/pages/new/new.page.html + 171 + + + src/app/pages/proposal/pages/new/new.page.html + 176 + + + src/app/pages/space/pages/upsert/upsert.page.html + 36 + + + src/app/pages/space/pages/upsert/upsert.page.html + 41 + + + src/app/pages/token/pages/new/overview/overview.component.html + 37 + + + src/app/pages/token/pages/new/overview/overview.component.html + 43 + + + src/app/pages/token/pages/new/overview/overview.component.html + 80 + + + src/app/pages/token/pages/new/overview/overview.component.html + 86 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 21 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 67 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 21 + + 설명 + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 69 + + 뱃지 정의 + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 71 + + 제목과 설명이 뱃지에 포함됩니다. + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 97 + + 뱃지 설명 + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 115 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 369 + + + src/app/pages/proposal/pages/new/new.page.html + 205 + + 스페이스 정보 + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 117 + + 여기는 어워드를 나열할 공간입니다. + + + Reward info + + src/app/pages/award/pages/new/new.page.html + 170 + + Reward info + + + You need to fund this award with native token. Select which token will be used as reward. + + src/app/pages/award/pages/new/new.page.html + 172 + + You need to fund this award with native token. Select which token will be used as reward. + + + Token is required. + + src/app/pages/award/pages/new/new.page.html + 176 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 247 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + Token is required. + + + Select a token + + src/app/pages/award/pages/new/new.page.html + 207 + + Select a token + + + Defines the amount of tokens for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 222,223 + + Defines the amount of tokens for each badge and the number of badges available. + + + Invalid token amount per badge + + src/app/pages/award/pages/new/new.page.html + 226 + + Invalid token amount per badge + + + Tokens per badge + + src/app/pages/award/pages/new/new.page.html + 234 + + Tokens per badge + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 251 + + + src/app/pages/award/pages/new/new.page.html + 338 + + 최소 1 그리고 최대 10000. + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 273 + + 이 어워드에 사용할 수 있도록 하려는 뱃지의 양입니다. 이것은 또한 당신이 얼마나 많은 어워드를 주고 싶은지 생각할 수 있습니다. + + + Total to be funded + + src/app/pages/award/pages/new/new.page.html + 284,285 + + Total to be funded + + + Upload image that will be used as a Reward Badge. + + src/app/pages/award/pages/new/new.page.html + 299 + + Upload image that will be used as a Reward Badge. + + + Badge is required. + + src/app/pages/award/pages/new/new.page.html + 328,329 + + Badge is required. + + + Set the duration for which the badge will be locked in the Firefly wallet. + + src/app/pages/award/pages/new/new.page.html + 334,335 + + Set the duration for which the badge will be locked in the Firefly wallet. + + + Create award + + src/app/pages/award/pages/new/new.page.html + 369,370 + + 어워드 만들기 + + + Award - New + + src/app/pages/award/pages/new/new.page.ts + 119 + + + src/app/pages/award/pages/new/new.page.ts + 134 + + Award - New + + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/award/pages/new/new.page.ts + 120 + + + src/app/pages/award/pages/new/new.page.ts + 135 + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + + Member seems to log out during the file upload request. + + src/app/pages/award/pages/new/new.page.ts + 184 + + + src/app/pages/collection/pages/upsert/upsert.page.ts + 403 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 240 + + + src/app/pages/nft/pages/new/single/single.page.ts + 180 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 131 + + + src/app/pages/token/services/new.service.ts + 202 + + 회원이 파일 업로드 요청 중에 로그아웃하였습니다. + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2 + + 어워드 설명 + + + Award - + + src/app/pages/award/pages/overview/overview.page.ts + 17 + + + src/app/pages/award/pages/participants/participants.page.ts + 83 + + Award - + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 49 + + + src/app/pages/award/pages/participants/participants.page.html + 63 + + + src/app/pages/proposal/pages/participants/participants.page.html + 49 + + + src/app/pages/proposal/pages/participants/participants.page.html + 63 + + 참가자 찾기 + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 72 + + + src/app/pages/proposal/pages/participants/participants.page.html + 72 + + + src/app/pages/space/pages/members/members.page.html + 92 + + 상위 기록 몇 개만 표시하는 중... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 90,91 + + + src/app/pages/proposal/pages/participants/participants.page.html + 90,91 + + 참가자 없음 + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 118,119 + + 리워드 + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 138,139 + + 다시 리워드 + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 50 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 158 + + + src/app/pages/space/pages/awards/awards.page.ts + 30 + + + src/app/pages/space/pages/collections/collections.page.ts + 30 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 30 + + 대기중 + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 51 + + 발급됨 + + + See all participants within the award. + + src/app/pages/award/pages/participants/participants.page.ts + 84 + + + src/app/pages/proposal/pages/overview/overview.page.ts + 60 + + See all participants within the award. + + + applied on + + src/app/pages/award/pages/participants/participants.page.ts + 257 + + applied on + + + Make NFT’s from this collection available on decentralised network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 12,13 + + Make NFT’s from this collection available on decentralised network. + + + Minting + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 29 + + Minting + + + NFTs left + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 32 + + NFTs left + + + Collection is not yet migrated to the decentralized network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 47,48 + + Collection is not yet migrated to the decentralized network. + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 611 + + 누가 살 수 있나요? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 63,64 + + 공개 판매 + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 76,77 + + 스페이스 회원 전용 + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89,90 + + 스페이스 가디언 전용 + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 102,103 + + 배지를 단 스페이스 회원 전용 + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 118,119 + + 각각의 컬렉션에서 한 개 이상의 NFT를 보유해야 합니다. + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 126,127 + + (회원 당 1개의 NFT) + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 175 + + 회원 할인 + + + discount for members with rewards from this space in total value of + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 190 + + discount for members with rewards from this space in total value of + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 5 + + 컬렉션 정보 + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 22,23 + + 한정판 + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 81,82 + + + src/app/pages/collection/pages/collection/collection.page.html + 301,302 + + 컬렉션 발행 + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 93,94 + + + src/app/pages/collection/pages/collection/collection.page.html + 313,314 + + 컬력션 편집 + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + 에게 로열티를 지불합니다. + + + Rank + + src/app/pages/collection/pages/collection/collection.page.html + 170,171 + + + src/app/pages/token/pages/token/token.page.html + 73,74 + + Rank + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 189 + + 에 시작합니다 + + + Deposited + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + Deposited + + + Staked + + src/app/pages/collection/pages/collection/collection.page.html + 218 + + Staked + + + Links + + src/app/pages/collection/pages/collection/collection.page.html + 227 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 154,153 + + + src/app/pages/token/pages/new/overview/overview.component.html + 160,159 + + + src/app/pages/token/pages/new/summary/summary.component.html + 307,306 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 79 + + 링크 + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 330 + + + src/app/pages/collection/pages/collection/collection.page.html + 376 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 346 + + + src/app/pages/collection/pages/collection/collection.page.html + 392 + + Cancel Collection + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 413 + + + src/app/pages/nft/pages/new/new.page.html + 2 + + NFT 생성 + + + Rank amount must be between + + src/app/pages/collection/pages/collection/collection.page.ts + 285 + + + src/app/pages/token/pages/token/token.page.ts + 195 + + Rank amount must be between + + + records + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 13 + + + src/app/pages/discover/pages/awards/awards.page.html + 13 + + + src/app/pages/discover/pages/members/members.page.html + 13 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 13 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 13 + + + src/app/pages/market/pages/collections/collections.page.html + 13 + + + src/app/pages/member/pages/nfts/nfts.page.html + 13 + + records + + + Filters&Sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 30 + + + src/app/pages/discover/pages/awards/awards.page.html + 30 + + + src/app/pages/discover/pages/members/members.page.html + 30 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 30 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 30 + + + src/app/pages/market/pages/collections/collections.page.html + 30 + + Filters&Sort + + + Filters&sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 71 + + + src/app/pages/discover/pages/awards/awards.page.html + 78 + + + src/app/pages/discover/pages/members/members.page.html + 78 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 78 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 79 + + + src/app/pages/market/pages/collections/collections.page.html + 79 + + Filters&sort + + + Sort by + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 93,92 + + + src/app/pages/discover/pages/awards/awards.page.html + 94,93 + + + src/app/pages/discover/pages/members/members.page.html + 94,93 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 94,93 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 95,94 + + + src/app/pages/market/pages/collections/collections.page.html + 95,94 + + 정렬 기준 + + + Price range + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 131 + + Price range + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2 + + 새 컬렉션 만들기 + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3 + + 컬렉션 편집 + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18 + + 컬렉션 정보 + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20 + + 이름과 설명이 컬렉션에 포함됩니다. + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 58 + + + src/app/pages/nft/pages/new/single/single.page.html + 51 + + 판매 정보 + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 60 + + 사용자가 위치한 국가의 시간대가 적용됩니다. 생성된 NFT 및 SFT의 가격은 이곳에서 설정되며 NFT에서 변경할 수 없습니다. 클래식 NFT 컬렉션의 가격은 참고용일 뿐이며 NFT에서 변경할 수 있습니다. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 90 + + 로열티 + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 93,95 + + 이 로열티 %는 최초 NFT 발행과 이후 모든 2차 판매에 적용됩니다. 로열티를 받는 아이오타 지갑은 아이오타 프로토콜의 먼지보호 메커니즘으로 인해 최소 1Miota 이상을 보유해야 합니다. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 106 + + 로열티 - 수수료 % + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 116 + + 예시: 10%, 20% 등 + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 124 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 131 + + 로열티가 다른 스페이스로 갑니다. + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 155 + + NFT 세부 정보에 링크가 포함됩니다. 트위터(@usernames) 와 디스코드(name#id) 계정의 사용자명을 사용하십시오. + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 160 + + 잘못된 URL 입니다. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 167,166 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 312,311 + + + src/app/pages/token/pages/new/overview/overview.component.html + 175,174 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 91,90 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 183 + + 당신의 트위터 계정에 연결하기 + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + 잘못된 디스코드 사용자이름. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 200 + + 당신의 디스코드 계정과 연결하기 + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 215 + + 할인 + + + The discount applies only to members who have earned tokens from awards issued by this space. + + src/app/pages/collection/pages/upsert/upsert.page.html + 217 + + The discount applies only to members who have earned tokens from awards issued by this space. + + + Token amount higher than + + src/app/pages/collection/pages/upsert/upsert.page.html + 231 + + Token amount higher than + + + Type awarded token... + + src/app/pages/collection/pages/upsert/upsert.page.html + 257 + + Type awarded token... + + + Discount % + + src/app/pages/collection/pages/upsert/upsert.page.html + 271 + + Discount % + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 299 + + 할인 + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 310 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 330,331 + + 할인 금액 + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 356 + + 할인 수준 추가하기 + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 371 + + 이곳은 NFT 컬렉션을 제작하는 스페이스입니다. 지갑이 등록된 스페이스만 목록에 표시됩니다. 이 스페이스에 등록된 지갑으로 모든 NFT 판매 자금이 들어가므로, 올바른 스페이스를 선택했는지 확인하십시오. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 389 + + 컬렉션 유형 + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 391 + + 각각의 유형은 다른 속성을 가지며, 생성된 이후 바꿀 수 없습니다. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 423,422 + + + src/app/pages/space/pages/upsert/upsert.page.html + 200 + + 배너 + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + 배너가 필요합니다. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 463 + + 빈 칸 + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 493,494 + + 필수항목입니다. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 503 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 516 + + + src/app/pages/market/pages/collections/collections.page.html + 177 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138 + + 카테고리 + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 505 + + 카테코리는 컨텐츠를 필터링할 때 사용됩니다. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 509 + + 카테고리 + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 534 + + 컬렉션 설정 + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 536 + + 컬렉션 접근권한 + + + Open Sale + + src/app/pages/collection/pages/upsert/upsert.page.html + 545 + + 공개 판매 + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 551 + + 누구나 컬렉션에 접근가능 + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 563 + + 스페이스 가디언들만 접근할 수 있습니다. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 576 + + 스페이스 멤버들만 접근할 수 있습니다. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 589 + + 뱃지를 단 스페이스 멤버들만 접근할 수 있습니다. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 607 + + 컬렉션 옵션 + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 625 + + One NFT per Member Only + + + Select collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 650 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 147 + + + src/app/pages/nft/pages/new/single/single.page.html + 361 + + 컬렉션 선택하기 + + + Select award + + src/app/pages/collection/pages/upsert/upsert.page.html + 669 + + Select award + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 691,692 + + 컬렉션 생성 + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 704,705 + + 컬렉션 저장 + + + Check out collection + + src/app/pages/collection/services/helper.service.ts + 68 + + 컬렉션 확인 + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 5 + + 멤버십 요청 보류중 + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 16 + + 가입한 스페이스 + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 32,33 + + 가입한 스페이스 없음 + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 41,42 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 56 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 68 + + Active proposals + + + Spaces + + src/app/pages/discover/pages/awards/awards.page.html + 115,114 + + + src/app/pages/discover/pages/discover/discover.page.ts + 9 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 115,114 + + + src/app/pages/market/pages/collections/collections.page.html + 146,145 + + + src/app/pages/member/pages/member/member.page.ts + 65 + + 스페이스 + + + Discover - Awards + + src/app/pages/discover/pages/awards/awards.page.ts + 58 + + Discover - Awards + + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/discover/pages/awards/awards.page.ts + 59 + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + + Awards + + src/app/pages/discover/pages/discover/discover.page.ts + 10 + + + src/app/pages/member/pages/member/member.page.ts + 64 + + + src/app/pages/space/pages/space/space.page.ts + 47 + + 보상 + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 11 + + + src/app/pages/space/pages/space/space.page.ts + 46 + + 제안 + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 12 + + + src/app/pages/space/pages/space/space.page.ts + 48 + + 멤버들 + + + Discover - Members + + src/app/pages/discover/pages/members/members.page.ts + 51 + + Discover - Members + + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + src/app/pages/discover/pages/members/members.page.ts + 52 + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + + Discover - Proposals + + src/app/pages/discover/pages/proposals/proposals.page.ts + 57 + + Discover - Proposals + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + src/app/pages/discover/pages/proposals/proposals.page.ts + 58 + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + + Discover - Spaces + + src/app/pages/discover/pages/spaces/spaces.page.ts + 54 + + Discover - Spaces + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/discover/pages/spaces/spaces.page.ts + 55 + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + + Sale type + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Sale type + + + Collections - NFT + + src/app/pages/market/pages/collections/collections.page.ts + 68 + + Collections - NFT + + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + src/app/pages/market/pages/collections/collections.page.ts + 69 + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + + NFT Collections + + src/app/pages/market/pages/market/market.page.html + 2 + + NFT Collections + + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/market/pages/market/market.page.html + 11,13 + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + + I understand + + src/app/pages/market/pages/market/market.page.html + 22,23 + + + src/app/pages/member/pages/tokens/tokens.page.html + 43,44 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 22,23 + + I understand + + + Collections + + src/app/pages/market/pages/market/market.page.ts + 12 + + + src/app/pages/market/pages/market/market.page.ts + 33 + + + src/app/pages/space/pages/space/space.page.ts + 45 + + 컬렉션 + + + Total staked + + src/app/pages/member/pages/activity/activity.page.html + 17,18 + + Total staked + + + Staking Value: + + src/app/pages/member/pages/activity/activity.page.html + 29,39 + + Staking Value: + + + Claimable Reward + + src/app/pages/member/pages/activity/activity.page.html + 47,48 + + Claimable Reward + + + Stake more + + src/app/pages/member/pages/activity/activity.page.html + 104,105 + + Stake more + + + Stake + + src/app/pages/member/pages/activity/activity.page.html + 107,108 + + Stake + + + My Staking + + src/app/pages/member/pages/activity/activity.page.html + 133 + + My Staking + + + until + + src/app/pages/member/pages/activity/activity.page.html + 138 + + until + + + My Favourites + + src/app/pages/member/pages/activity/activity.page.html + 152 + + My Favourites + + + View All + + src/app/pages/member/pages/activity/activity.page.html + 155 + + View All + + + Profile Options + + src/app/pages/member/pages/activity/activity.page.html + 172 + + Profile Options + + + Edit Profile + + src/app/pages/member/pages/activity/activity.page.html + 185 + + Edit Profile + + + Manage Addresses + + src/app/pages/member/pages/activity/activity.page.html + 191 + + + src/app/pages/space/pages/manage/manage.page.html + 27 + + Manage Addresses + + + Export All Transactions + + src/app/pages/member/pages/activity/activity.page.html + 202 + + Export All Transactions + + + Request Verification + + src/app/pages/member/pages/activity/activity.page.html + 227 + + + src/app/pages/space/pages/manage/manage.page.html + 85 + + Request Verification + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + 보류중 + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 18,19 + + 발행됨 + + + No Awards + + src/app/pages/member/pages/awards/awards.page.html + 34,35 + + + src/app/pages/space/pages/awards/awards.page.html + 63,64 + + 보상 없음 + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 44,45 + + Discover Awards + + + Reputation + + src/app/pages/member/pages/badges/badges.page.html + 2 + + + src/app/pages/member/pages/member/member.page.ts + 63 + + 명성 + + + Spaces + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Spaces + + + Awards + + src/app/pages/member/pages/badges/badges.page.html + 27,28 + + Awards + + + Total Rewards + + src/app/pages/member/pages/badges/badges.page.html + 33,34 + + Total Rewards + + + My profile + + src/app/pages/member/pages/member/member.page.html + 13 + + 내 프로필 + + + Profile + + src/app/pages/member/pages/member/member.page.html + 15 + + 프로필 + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 27,28 + + Profile info + + + Joined + + src/app/pages/member/pages/member/member.page.html + 49 + + 가입함 + + + Member - + + src/app/pages/member/pages/member/member.page.ts + 83 + + Member - + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 145 + + 활동 + + + Transactions + + src/app/pages/member/pages/member/member.page.ts + 147 + + + src/app/pages/member/pages/transactions/transactions.page.html + 18 + + Transactions + + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + src/app/pages/member/pages/nfts/nfts.page.html + 25,26 + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + + Deposit NFT + + src/app/pages/member/pages/nfts/nfts.page.html + 29,30 + + Deposit NFT + + + No NFTs + + src/app/pages/member/pages/nfts/nfts.page.html + 59,60 + + + src/app/pages/nft/pages/nft/nft.page.html + 744,745 + + NFT 없음 + + + Tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 11,12 + + Tokens + + + Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 20,21 + + Staking + + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + src/app/pages/member/pages/tokens/tokens.page.html + 32,34 + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + + Item + + src/app/pages/member/pages/tokens/tokens.page.html + 57 + + + src/app/pages/member/pages/tokens/tokens.page.html + 324 + + + src/app/pages/member/pages/transactions/transactions.page.html + 23 + + Item + + + Total + + src/app/pages/member/pages/tokens/tokens.page.html + 59 + + + src/app/pages/token/pages/trade/trade.page.html + 204 + + + src/app/pages/token/pages/trade/trade.page.html + 278 + + + src/app/pages/token/pages/trade/trade.page.html + 367 + + + src/app/pages/token/pages/trade/trade.page.html + 668 + + Total + + + Owned + + src/app/pages/member/pages/tokens/tokens.page.html + 87 + + + src/app/pages/member/pages/tokens/tokens.page.html + 170 + + + src/app/pages/nft/pages/nft/nft.page.html + 17 + + 소유자 + + + Airdropped + + src/app/pages/member/pages/tokens/tokens.page.html + 118 + + + src/app/pages/member/pages/tokens/tokens.page.html + 172 + + Airdropped + + + from + + src/app/pages/member/pages/tokens/tokens.page.html + 120 + + from + + + Deposit for purchase + + src/app/pages/member/pages/tokens/tokens.page.html + 215 + + Deposit for purchase + + + No tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 258,259 + + No tokens + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 297 + + Active Staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 300 + + Expired Staking + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 307,308 + + Active Staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 310,311 + + Expired Staking + + + Staked From + + src/app/pages/member/pages/tokens/tokens.page.html + 326 + + Staked From + + + Staked Until + + src/app/pages/member/pages/tokens/tokens.page.html + 327 + + Staked Until + + + Multiplier + + src/app/pages/member/pages/tokens/tokens.page.html + 329 + + Multiplier + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 330 + + Staked Value + + + Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 380 + + Stakes + + + No Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 403,404 + + No Stakes + + + Staked from - to + + src/app/pages/member/pages/tokens/tokens.page.html + 432,433 + + Staked from - to + + + Amount (Multiplier) + + src/app/pages/member/pages/tokens/tokens.page.html + 445,446 + + Amount (Multiplier) + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 457,458 + + Staked Value + + + Claim + + src/app/pages/member/pages/tokens/tokens.page.ts + 57 + + Claim + + + Refund + + src/app/pages/member/pages/tokens/tokens.page.ts + 58 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 19 + + Refund + + + Export CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 9 + + Export CSV + + + Exporting CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 13 + + Exporting CSV + + + No transactions + + src/app/pages/member/pages/transactions/transactions.page.html + 120,121 + + No transactions + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 40 + + 몇몇 파일이 업로드되지 않았습니다. + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 51,52 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + 업로드된 CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 67 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 73 + + 파일명 + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 101 + + 오류 + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 160 + + 기존 CSV 업로드 + + + Upload back once you generate below + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 162 + + Upload back once you generate below + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 193,194 + + 이미지를 먼저 업로드해야 합니다. + + + Generate CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 211 + + Generate CSV + + + Publish NFTs + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 212 + + Publish NFTs + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 224,225 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + 하나 + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + 다수 + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14 + + NFT 정보 + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16 + + 이름과 설명이 NFT에 포함됩니다. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 22 + + 이름이 필요합니다. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 34 + + + src/app/pages/proposal/pages/new/new.page.html + 77 + + 설명이 필요합니다. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 53 + + 모든 시간은 사용자가 속한 국가의 시간으로 반영됩니다. 생성된 NFT 및 SFT의 가격은 컬렉션별로 설정되며 이곳에서 변경할 수 없습니다. + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 92 + + 속성은 아이템 아래에 표시됩니다. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 102 + + 속성 이름(예시: 성격) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 103 + + 가격(예시: 수나넛) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 115 + + + src/app/pages/nft/pages/new/single/single.page.html + 151 + + + src/app/pages/nft/pages/new/single/single.page.html + 158 + + 속성 이름 + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 126,125 + + + src/app/pages/nft/pages/new/single/single.page.html + 163 + + + src/app/pages/nft/pages/new/single/single.page.html + 171,170 + + + src/app/pages/nft/pages/new/single/single.page.html + 228,227 + + + src/app/pages/nft/pages/new/single/single.page.html + 266 + + + src/app/pages/nft/pages/new/single/single.page.html + 272,271 + + 가격 + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 142 + + 속성 + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 185 + + 속성 추가 + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 194 + + 능력치는 아이템 아래에 표시됩니다. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + 능력치 이름(예시: 스태미너) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 205 + + 가격(예시: 10, 1/10 등) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 217 + + + src/app/pages/nft/pages/new/single/single.page.html + 254 + + + src/app/pages/nft/pages/new/single/single.page.html + 261 + + 능력치 이름 + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 245 + + 능력치 + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287 + + 능력치 추가 + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 303 + + 당신의 NFT 이미지를 업로드하세요. 지원되는 파일형식: PNG, JPEG, WEBP, MP4. 최대 용량: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 333 + + 음원이 필요합니다. + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 348 + + NFT를 전시하기 위해 당신의 컬렉션 중 하나를 선택하세요. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 383,384 + + NFT 생성하기 + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 393,394 + + NFT 미리보기 + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 168 + + 파일명 은 유효하지 않습니다. + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 7 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 48 + + + src/app/pages/nft/pages/nft/nft.page.html + 516 + + Nft 확인하기 + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 109 + + 현재 최고 입찰가 + + + remaining + + src/app/pages/nft/pages/nft/nft.page.html + 155 + + 남은 것 + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 165 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 173 + + Sale hasn't started yet + + + NFT is pending other member's transaction + + src/app/pages/nft/pages/nft/nft.page.html + 181 + + NFT is pending other member's transaction + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 190 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 198 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 213 + + NFT 판매 + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 218 + + 고정 가격 변경하기 + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 223 + + 경매 변경하기 + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 240,241 + + 입찰하기 + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 263,264 + + 지금 구매하기 + + + Bidding + + src/app/pages/nft/pages/nft/nft.page.html + 281 + + Bidding + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 290 + + 현재 입찰가 + + + Past bids + + src/app/pages/nft/pages/nft/nft.page.html + 298 + + Past bids + + + My biddings + + src/app/pages/nft/pages/nft/nft.page.html + 307 + + My biddings + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 321 + + 멤버 + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 322 + + 입찰 + + + There are no current bids + + src/app/pages/nft/pages/nft/nft.page.html + 369,370 + + There are no current bids + + + There are no past bids + + src/app/pages/nft/pages/nft/nft.page.html + 419,420 + + There are no past bids + + + There are no records. + + src/app/pages/nft/pages/nft/nft.page.html + 469,470 + + There are no records. + + + Withdraw NFT + + src/app/pages/nft/pages/nft/nft.page.html + 509,510 + + Withdraw NFT + + + History + + src/app/pages/nft/pages/nft/nft.page.html + 522 + + History + + + Minting in Progress + + src/app/pages/nft/pages/nft/nft.page.html + 556 + + Minting in Progress + + + Available for specific Member Only + + src/app/pages/nft/pages/nft/nft.page.html + 619 + + Available for specific Member Only + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 647 + + 탱글에서 이 NFT의 세부 거래내역 보기 + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 685 + + 컬렉션 정보 + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 694 + + 보여주기 + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 695 + + 컬렉션 + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 707,706 + + by + + + Are you sure you want to withdraw NFT from Soonaverse? + + src/app/pages/nft/pages/nft/nft.page.html + 800 + + Are you sure you want to withdraw NFT from Soonaverse? + + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + src/app/pages/nft/pages/nft/nft.page.html + 802 + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + + Confirm with Metamask + + src/app/pages/nft/pages/nft/nft.page.html + 804 + + Confirm with Metamask + + + View + + src/app/pages/nft/pages/nft/nft.page.ts + 82 + + 보기 + + + NFT Withdrawn. + + src/app/pages/nft/pages/nft/nft.page.ts + 688 + + NFT Withdrawn. + + + Oops, it's in another universe + + src/app/pages/nft/pages/not-found/not-found.page.html + 8 + + Oops, it's in another universe + + + NFT you are looking for no longer exists on Soonaverse. + + src/app/pages/nft/pages/not-found/not-found.page.html + 12,14 + + NFT you are looking for no longer exists on Soonaverse. + + + Back to Marketplace + + src/app/pages/nft/pages/not-found/not-found.page.html + 22,24 + + Back to Marketplace + + + Auction Starts + + src/app/pages/nft/services/helper.service.ts + 145 + + 경매 시작 + + + Auction Ends + + src/app/pages/nft/services/helper.service.ts + 148 + + 경매 종료 + + + Pool by + + src/app/pages/pool/pages/market/pool.page.html + 3,12 + + Pool by + + + What is Pool? + + src/app/pages/pool/pages/market/pool.page.html + 20,21 + + What is Pool? + + + Anyone can become a liquidity provider (LP) by depositing an equivalent value of each underlying token in return for pool tokens. These tokens track pro-rata LP shares of the total reserves, and can be redeemed for the underlying assets at any time. + + src/app/pages/pool/pages/market/pool.page.html + 23,26 + + Anyone can become a liquidity provider (LP) by depositing an equivalent value of each underlying token in return for pool tokens. These tokens track pro-rata LP shares of the total reserves, and can be redeemed for the underlying assets at any time. + + + Coming SOON + + src/app/pages/pool/pages/market/pool.page.html + 35 + + + src/app/pages/swap/pages/market/swap.page.html + 35 + + Coming SOON + + + See Pool on iotabee + + src/app/pages/pool/pages/market/pool.page.html + 37,39 + + See Pool on iotabee + + + What is iotabee? + + src/app/pages/pool/pages/market/pool.page.html + 49 + + + src/app/pages/swap/pages/market/swap.page.html + 49 + + What is iotabee? + + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + src/app/pages/pool/pages/market/pool.page.html + 51,54 + + + src/app/pages/swap/pages/market/swap.page.html + 51,54 + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + + iotabee.com + + src/app/pages/pool/pages/market/pool.page.html + 61,62 + + + src/app/pages/swap/pages/market/swap.page.html + 61,62 + + iotabee.com + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2 + + 새로운 제안 + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 3 + + 제안 정보 + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19 + + 제안에 제목과 설명이 포합됩니다. 시작일과 종료일로 제안기간을 결정합니다. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 39 + + + src/app/pages/proposal/pages/new/new.page.html + 50,49 + + 시작 + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 40 + + 시작일이 필요합니다. + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 93 + + 질문 정보 + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 95 + + 제목과 설명은 이 질문에 대해서만 표시됩니다. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 104 + + 질문 제목이 필요합니다. + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 143 + + 개별 답변에 대한 제목과 설명. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 157 + + 답변 제목이 필요합니다. + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 192 + + 선택 추가 + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 207 + + 이곳은 제안을 나열하는 곳입니다. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 259 + + 제안 설정 + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 261 + + 제안에 대한 접근 권한과 투표 방식을 정합니다. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 269 + + 타겟 참여자 + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 276 + + 모든 가디언 + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 283 + + 이 제안은 가디언만 투표할 수 있습니다. + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 289 + + 모든 멤버 + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 296 + + 모든 멤버가 이 제안에 투표할 수 있습니다. + + + Space's Native Token + + src/app/pages/proposal/pages/new/new.page.html + 302 + + + src/app/pages/proposal/services/helper.service.ts + 23 + + Space's Native Token + + + You must have minted token linked to your space first! + + src/app/pages/proposal/pages/new/new.page.html + 313 + + You must have minted token linked to your space first! + + + All token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 321 + + All token holders can vote. + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 343,344 + + 제안하기 + + + Proposal - New + + src/app/pages/proposal/pages/new/new.page.ts + 136 + + + src/app/pages/proposal/pages/new/new.page.ts + 151 + + Proposal - New + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + src/app/pages/proposal/pages/new/new.page.ts + 137 + + + src/app/pages/proposal/pages/new/new.page.ts + 152 + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 321 + + 선택 + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 328 + + 뱃지 + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 332 + + 아이디 + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 5 + + 최종 결과 + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 74 + + 제안 설명 + + + Proposal - + + src/app/pages/proposal/pages/overview/overview.page.ts + 59 + + Proposal - + + + Change Vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 23,24 + + Change Vote + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 26,27 + + Vote Now + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 38 + + 투표 시작 + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 51 + + 투표대상자가 아닙니다. + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 55 + + 제안이 생성되기 이전에 스페이스에 가입해야만 투표할 수 있습니다. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 64 + + 투표하기 위해 로그인하기 + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 68 + + 투표하기 위해서는 로그인이 필요합니다. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 79 + + 가디언 승인 대기중 + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 83 + + 이 제안은 아직 가디언의 승인을 받지 않았습니다. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 102 + + 가중치 + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 48 + + 보류중인 투표 + + + Voted + + src/app/pages/proposal/pages/participants/participants.page.ts + 49 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 156 + + 투표완료 + + + Proposal - Participants + + src/app/pages/proposal/pages/participants/participants.page.ts + 83 + + Proposal - Participants + + + See all participants within the proposal + + src/app/pages/proposal/pages/participants/participants.page.ts + 84 + + See all participants within the proposal + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 151 + + 의 수나버스에 가입하셨습니다. + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 12,13 + + 승인하기 + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 23,24 + + 거절하기 + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 67 + + 이 제안의 투표 형식 + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 75 + + 이 제안에서 모든 참가자에 대한 총 가중치 + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 22 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 22 + + 현재 이정표 + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 23 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 23 + + 시작일 + + + Voting Type + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 26 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 26 + + 투표 형식 + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 27 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 27 + + 총 가중치 + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 79 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 152 + + 제안서 확인하기 + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 87 + + 현재 결과 + + + (weight: ) + + src/app/pages/proposal/pages/proposal/proposal.page.html + 101,102 + + (weight: ) + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 124 + + 선택된 뱃지 + + + Votes + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 42 + + Votes + + + Voter + + src/app/pages/proposal/pages/votes/votes.page.html + 14 + + 투표자 + + + Option (Weight) + + src/app/pages/proposal/pages/votes/votes.page.html + 16 + + Option (Weight) + + + Expired On + + src/app/pages/proposal/pages/votes/votes.page.html + 18 + + Expired On + + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + src/app/pages/proposal/pages/votes/votes.page.html + 24 + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + + One Member One Vote + + src/app/pages/proposal/services/helper.service.ts + 25 + + One Member One Vote + + + XP Reputation - Space + + src/app/pages/proposal/services/helper.service.ts + 27 + + XP 명성 - 스페이스 + + + XP Reputation - Selected Badges + + src/app/pages/proposal/services/helper.service.ts + 29 + + XP 명성 - 선택된 뱃지 + + + Staking + + src/app/pages/soon-staking/pages/staking/staking.page.html + 3,4 + + Staking + + + How much I earn? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 13 + + How much I earn? + + + How it works? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 135 + + How it works? + + + Stake your tokens to earn rewards and unlock new features. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 137,139 + + Stake your tokens to earn rewards and unlock new features. + + + Unique Perks for stakers + + src/app/pages/soon-staking/pages/staking/staking.page.html + 160 + + Unique Perks for stakers + + + Rewards + + src/app/pages/soon-staking/pages/staking/staking.page.html + 167,168 + + Rewards + + + Trading Bonuses + + src/app/pages/soon-staking/pages/staking/staking.page.html + 180 + + Trading Bonuses + + + Unique Features + + src/app/pages/soon-staking/pages/staking/staking.page.html + 193 + + Unique Features + + + Earn more er than you think + + src/app/pages/soon-staking/pages/staking/staking.page.html + 209 + + Earn more er than you think + + + The more you hold, the more rewards you get. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 214,215 + + The more you hold, the more rewards you get. + + + New + + src/app/pages/space/pages/awards/awards.page.html + 43 + + + src/app/pages/space/pages/collections/collections.page.html + 48 + + + src/app/pages/space/pages/proposals/proposals.page.html + 42 + + 새로 만들기 + + + award + + src/app/pages/space/pages/awards/awards.page.html + 44 + + 어워드 + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 31 + + + src/app/pages/space/pages/members/members.page.html + 45 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 31 + + 진행중 + + + Space - Awards + + src/app/pages/space/pages/awards/awards.page.ts + 54 + + Space - Awards + + + Space's awards + + src/app/pages/space/pages/awards/awards.page.ts + 55 + + Space's awards + + + No Collections + + src/app/pages/space/pages/collections/collections.page.html + 69,70 + + 컬렉션 없음 + + + Space - Collections + + src/app/pages/space/pages/collections/collections.page.ts + 65 + + Space - Collections + + + Space's collections + + src/app/pages/space/pages/collections/collections.page.ts + 66 + + Space's collections + + + Space Options + + src/app/pages/space/pages/manage/manage.page.html + 2 + + Space Options + + + Token Options + + src/app/pages/space/pages/manage/manage.page.html + 6 + + Token Options + + + Edit Space + + src/app/pages/space/pages/manage/manage.page.html + 21 + + Edit Space + + + Manage Guardians + + src/app/pages/space/pages/manage/manage.page.html + 38 + + Manage Guardians + + + Export Current Members + + src/app/pages/space/pages/manage/manage.page.html + 44 + + Export Current Members + + + Create New Award + + src/app/pages/space/pages/manage/manage.page.html + 57 + + Create New Award + + + Create New Proposal + + src/app/pages/space/pages/manage/manage.page.html + 68 + + Create New Proposal + + + Create New Collection + + src/app/pages/space/pages/manage/manage.page.html + 79 + + Create New Collection + + + Edit Token + + src/app/pages/space/pages/manage/manage.page.html + 105 + + Edit Token + + + Create Airdrop + + src/app/pages/space/pages/manage/manage.page.html + 127 + + Create Airdrop + + + Staking Reward Schedule + + src/app/pages/space/pages/manage/manage.page.html + 135 + + Staking Reward Schedule + + + Export Current Stakers + + src/app/pages/space/pages/manage/manage.page.html + 141 + + Export Current Stakers + + + Active + + src/app/pages/space/pages/members/members.page.html + 18,19 + + 진행중 + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 35,36 + + 차단됨 + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 52 + + 차단됨 + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 67 + + + src/app/pages/space/pages/members/members.page.html + 82 + + 멤버 찾기 + + + No Members + + src/app/pages/space/pages/members/members.page.html + 110,111 + + 회원 없음 + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 118 + + 참여한 스페이스 + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 161,162 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 174,175 + + Make Guardian + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 184,185 + + Block Member + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 187,188 + + Accept Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 190,191 + + Unblock Member + + + Space - Members + + src/app/pages/space/pages/members/members.page.ts + 76 + + Space - Members + + + Space's members + + src/app/pages/space/pages/members/members.page.ts + 77 + + Space's members + + + Upcoming Sale + + src/app/pages/space/pages/overview/overview.page.html + 7 + + Upcoming Sale + + + Live Token Sale + + src/app/pages/space/pages/overview/overview.page.html + 9 + + Live Token Sale + + + Space - + + src/app/pages/space/pages/overview/overview.page.ts + 55 + + Space - + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 43 + + 제안 + + + No Proposals + + src/app/pages/space/pages/proposals/proposals.page.html + 62,63 + + 제안 없음 + + + Space - Proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 54 + + Space - Proposals + + + Space's proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 55 + + Space's proposals + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 34 + + 스페이스 확인하기 + + + pending + + src/app/pages/space/pages/space/space-about/space-about.component.html + 153 + + pending + + + Export members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 168 + + Export members + + + Exporting members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 172 + + Exporting members + + + Open to join instantly + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Open to join instantly + + + Requires approval to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 183 + + Requires approval to join + + + Requires + + src/app/pages/space/pages/space/space-about/space-about.component.html + 187 + + Requires + + + staked value to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 193 + + staked value to join + + + Related Links + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 92 + + Related Links + + + Claim ownership + + src/app/pages/space/pages/space/space-about/space-about.component.html + 259,260 + + Claim ownership + + + Space's Wallet Addresses + + src/app/pages/space/pages/space/space-about/space-about.component.html + 290 + + Space's Wallet Addresses + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 321 + + 스페이스 나가기 + + + About space + + src/app/pages/space/pages/space/space.page.html + 3 + + 스페이스 정보 + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 55,56 + + + src/app/pages/space/pages/space/space.page.html + 118,119 + + 스페이스 가입 + + + Pending Request + + src/app/pages/space/pages/space/space.page.html + 68 + + + src/app/pages/space/pages/space/space.page.html + 131 + + Pending Request + + + Ask to join Space + + src/app/pages/space/pages/space/space.page.html + 70 + + + src/app/pages/space/pages/space/space.page.html + 133 + + Ask to join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 82,83 + + + src/app/pages/space/pages/space/space.page.html + 160,161 + + 스페이스 편집 + + + Stake + + src/app/pages/space/pages/space/space.page.html + 144 + + Stake + + + to Join + + src/app/pages/space/pages/space/space.page.html + 147 + + to Join + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2 + + 새로운 스페이스 추가하기 + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3 + + 스페이스 편집 + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17 + + 스페이스 정보 + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19 + + 제목과 설명이 스페이스에 포함됩니다. + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 56 + + Nft 세부 정보에 링크가 포함됩니다. 트위터(@usernames) 와 디스코드(name#id) 계정의 사용자명을 사용하십시오. + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 97 + + 오직 디스코드 초대코드만 지원됩니다.(예시: RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 104 + + 디스코드 초대코드를 입력하세요. + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 125 + + 스페이스 유형 + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 127 + + 각각의 유형은 다른 특성을 갖습니다. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 137,138 + + 누구나 즉시 참여할 수 있도록 공개 + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 142 + + 멤버 승인이 필요합니다. + + + Requires stake value (in space's token) + + src/app/pages/space/pages/upsert/upsert.page.html + 146 + + Requires stake value (in space's token) + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 174 + + 아바타는 필수사항입니다. + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 243,244 + + 스페이스 만들기 + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 256,257 + + 스페이스 저장하기 + + + Space - New + + src/app/pages/space/pages/upsert/upsert.page.ts + 76 + + Space - New + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/space/pages/upsert/upsert.page.ts + 77 + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 210 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 216 + + 새롭게 업로드하기 + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 211 + + 당신의 브랜드가 핵심입니다. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 217 + + 개인용으로 만들기 + + + Swap by + + src/app/pages/swap/pages/market/swap.page.html + 3,12 + + Swap by + + + What is Swap? + + src/app/pages/swap/pages/market/swap.page.html + 20,21 + + What is Swap? + + + See Swap on iotabee + + src/app/pages/swap/pages/market/swap.page.html + 37,39 + + See Swap on iotabee + + + Create airdrop + + src/app/pages/token/pages/airdrops/airdrops.page.html + 8,9 + + Create airdrop + + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/pages/token/pages/airdrops/airdrops.page.html + 17,19 + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + + Some rows have been removed + + src/app/pages/token/pages/airdrops/airdrops.page.html + 92 + + Some rows have been removed + + + Submit airdrop + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 118,119 + + Submit airdrop + + + + row is not valid + + src/app/pages/token/pages/airdrops/airdrops.page.ts + 73 + + row is not valid + + + Breakdown + + src/app/pages/token/pages/metrics/metrics.page.html + 1 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 284 + + Breakdown + + + Token distribution + + src/app/pages/token/pages/metrics/metrics.page.html + 5 + + Token distribution + + + Total token supply + + src/app/pages/token/pages/metrics/metrics.page.ts + 56 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 96 + + Total token supply + + + Launchpad price per token + + src/app/pages/token/pages/metrics/metrics.page.ts + 67 + + Launchpad price per token + + + Initial Cap + + src/app/pages/token/pages/metrics/metrics.page.ts + 74 + + Initial Cap + + + Total melted tokens + + src/app/pages/token/pages/metrics/metrics.page.ts + 82 + + Total melted tokens + + + You can create only ONE token per space and it can never be changed. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 14,15 + + You can create only ONE token per space and it can never be changed. + + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 23,26 + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + + Continue + + src/app/pages/token/pages/new/introduction/introduction.component.html + 38,39 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 191,192 + + + src/app/pages/token/pages/new/overview/overview.component.html + 104,105 + + Continue + + + Token Sale Requirements + + src/app/pages/token/pages/new/introduction/introduction.component.html + 50 + + Token Sale Requirements + + + To create a public sale or use the Token Exchange you must complete our KYC process. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 52 + + To create a public sale or use the Token Exchange you must complete our KYC process. + + + Begin Process + + src/app/pages/token/pages/new/introduction/introduction.component.html + 58 + + Begin Process + + + Continue + + + src/app/pages/token/pages/new/introduction/introduction.component.html + 73,74 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 330,331 + + + src/app/pages/token/pages/new/overview/overview.component.html + 214,215 + + Continue + + + + Token info + + src/app/pages/token/pages/new/metrics/metrics.component.html + 9 + + + src/app/pages/token/pages/new/summary/summary.component.html + 14 + + + src/app/pages/token/pages/token/token.page.html + 3 + + Token info + + + Name is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 16 + + Name is invalid. + + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + src/app/pages/token/pages/new/metrics/metrics.component.html + 33 + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + + Token supply + + src/app/pages/token/pages/new/metrics/metrics.component.html + 47 + + + src/app/pages/token/pages/new/summary/summary.component.html + 53 + + Token supply + + + Price per token (MIOTA) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 53 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 58 + + Price per token (MIOTA) + + + Price is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 54 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 38 + + Price is invalid. + + + Total token supply (up to 6 decimals are supported) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 68 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 74 + + Total token supply (up to 6 decimals are supported) + + + Total supply is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 69 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 107 + + Total supply is invalid. + + + Allocation title + + src/app/pages/token/pages/new/metrics/metrics.component.html + 111 + + Allocation title + + + % of tokens for sale + + src/app/pages/token/pages/new/metrics/metrics.component.html + 121 + + % of tokens for sale + + + Percentage of tokens is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 122 + + Percentage of tokens is invalid. + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 126 + + % of tokens for sale (Default 100%) + + + Only 1 of the allocations can be public + + src/app/pages/token/pages/new/metrics/metrics.component.html + 149 + + Only 1 of the allocations can be public + + + Sum of the percentages must be 100 + + src/app/pages/token/pages/new/metrics/metrics.component.html + 155 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 166 + + Sum of the percentages must be 100 + + + Invalid sum of percentages + + src/app/pages/token/pages/new/metrics/metrics.component.html + 160 + + Invalid sum of percentages + + + Add allocation + + src/app/pages/token/pages/new/metrics/metrics.component.html + 179 + + Add allocation + + + Token icon + + src/app/pages/token/pages/new/metrics/metrics.component.html + 221 + + + src/app/pages/token/pages/new/summary/summary.component.html + 265 + + Token icon + + + (Recomended size: 400 x 400px) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 223 + + (Recomended size: 400 x 400px) + + + Icon is mandatory + + src/app/pages/token/pages/new/metrics/metrics.component.html + 232 + + Icon is mandatory + + + Token price + + src/app/pages/token/pages/new/metrics/metrics.component.html + 264 + + + src/app/pages/token/pages/new/summary/summary.component.html + 283 + + Token price + + + Distribution of the token happens after the token offering end date. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 266 + + + src/app/pages/token/pages/new/summary/summary.component.html + 285 + + Distribution of the token happens after the token offering end date. + + + Configure the token supply first to see breakdown. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 288 + + Configure the token supply first to see breakdown. + + + Token terms and conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 298 + + + src/app/pages/token/pages/new/summary/summary.component.html + 324 + + Token terms and conditions + + + Provide link for Terms and Conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 300 + + Provide link for Terms and Conditions + + + Terms and Conditions link is invalid. (Start with http:// or https://) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 306 + + Terms and Conditions link is invalid. (Start with http:// or https://) + + + Token allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 75 + + + src/app/pages/token/pages/new/summary/summary.component.html + 165 + + Token allocation + + + Allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 76 + + + src/app/pages/token/pages/new/summary/summary.component.ts + 30 + + Allocation + + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 81,82 + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + + Create token + + src/app/pages/token/pages/new/new.page.html + 2 + + Create token + + + Introduction + + src/app/pages/token/pages/new/new.page.ts + 32 + + Introduction + + + Metrics + + src/app/pages/token/pages/new/new.page.ts + 33 + + + src/app/pages/token/pages/token/token.page.ts + 38 + + Metrics + + + Summary + + src/app/pages/token/pages/new/new.page.ts + 35 + + Summary + + + New Token + + src/app/pages/token/pages/new/new.page.ts + 72 + + New Token + + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + src/app/pages/token/pages/new/new.page.ts + 73 + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + + Token description + + src/app/pages/token/pages/new/overview/overview.component.html + 12 + + + src/app/pages/token/pages/new/summary/summary.component.html + 93 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 6 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 27 + + Token description + + + This text will be displayed on the main token page. + + src/app/pages/token/pages/new/overview/overview.component.html + 14 + + This text will be displayed on the main token page. + + + Title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 23 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 10 + + Title is invalid. + + + Description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 38 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 22 + + Description is invalid. + + + Short description + + src/app/pages/token/pages/new/overview/overview.component.html + 55 + + + src/app/pages/token/pages/new/summary/summary.component.html + 129 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 49 + + Short description + + + Short description of the token which will be displayed on the token trading page. + + src/app/pages/token/pages/new/overview/overview.component.html + 57 + + Short description of the token which will be displayed on the token trading page. + + + Short title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 66 + + Short title is invalid. + + + Short description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 81 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 68 + + Short description is invalid. + + + Overview graphics + + src/app/pages/token/pages/new/overview/overview.component.html + 121 + + Overview graphics + + + Token introductory video / image + + src/app/pages/token/pages/new/overview/overview.component.html + 123 + + Token introductory video / image + + + Introductionary media is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 132 + + Introductionary media is invalid. + + + Invalid URL. (Start with http:// or https://) + + src/app/pages/token/pages/new/overview/overview.component.html + 168 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 84 + + Invalid URL. (Start with http:// or https://) + + + Add link + + src/app/pages/token/pages/new/overview/overview.component.html + 191 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 107 + + Add link + + + Edit + + src/app/pages/token/pages/new/summary/summary.component.html + 22,23 + + + src/app/pages/token/pages/new/summary/summary.component.html + 61,62 + + + src/app/pages/token/pages/new/summary/summary.component.html + 101,102 + + + src/app/pages/token/pages/new/summary/summary.component.html + 137,138 + + + src/app/pages/token/pages/new/summary/summary.component.html + 173,174 + + Edit + + + Name + + src/app/pages/token/pages/new/summary/summary.component.html + 30,31 + + Name + + + Symbol + + src/app/pages/token/pages/new/summary/summary.component.html + 41,42 + + Symbol + + + Total token supply + + src/app/pages/token/pages/new/summary/summary.component.html + 80,81 + + Total token supply + + + Description title + + src/app/pages/token/pages/new/summary/summary.component.html + 109,110 + + Description title + + + Description + + src/app/pages/token/pages/new/summary/summary.component.html + 120,121 + + Description + + + Short description title + + src/app/pages/token/pages/new/summary/summary.component.html + 145,146 + + Short description title + + + Short description + + src/app/pages/token/pages/new/summary/summary.component.html + 156,157 + + Short description + + + Allocation title + + src/app/pages/token/pages/new/summary/summary.component.html + 187,188 + + Allocation title + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/summary/summary.component.html + 198,199 + + % of tokens for sale (Default 100%) + + + Submit token + + src/app/pages/token/pages/new/summary/summary.component.html + 227,228 + + Submit token + + + (Recommended size: 400 x 400px) + + src/app/pages/token/pages/new/summary/summary.component.html + 267 + + (Recommended size: 400 x 400px) + + + Some description + + src/app/pages/token/pages/new/summary/summary.component.html + 326 + + Some description + + + Terms&conditions + + src/app/pages/token/pages/new/summary/summary.component.html + 340 + + Terms&conditions + + + Submit token + + + src/app/pages/token/pages/new/summary/summary.component.html + 356,357 + + Submit token + + + + Trade token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 15,16 + + Trade token + + + Buy Tokens + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 28,29 + + Buy Tokens + + + Schedule public sale + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 42,43 + + Schedule public sale + + + Allow Trading + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 57,58 + + Allow Trading + + + Edit token info + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 86 + + Edit token info + + + Check out token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 100 + + Check out token + + + Mint & Approve Token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 132,133 + + Mint & Approve Token + + + Minting in progress + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 144,145 + + Minting in progress + + + Token was not made available on decentralised network yet. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 150 + + Token was not made available on decentralised network yet. + + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 153,154 + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + + Trading enabled. + + src/app/pages/token/pages/token/token-buy/token-buy.component.ts + 86 + + Trading enabled. + + + Short description title is invalid. + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 56 + + Short description title is invalid. + + + Short description title + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 61 + + Short description title + + + Short token description + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 73 + + Short token description + + + Sale Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 4 + + Sale Info + + + Sale schedule + + src/app/pages/token/pages/token/token-info/token-info.component.html + 10 + + Sale schedule + + + During cooldown period you are able to trigger refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 41 + + During cooldown period you are able to trigger refund. + + + No Cooldown. Participants can't refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 75,76 + + No Cooldown. Participants can't refund. + + + Token Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 80 + + + src/app/pages/token/pages/trade/trade.page.html + 57 + + + src/app/pages/token/pages/trade/trade.page.html + 624 + + Token Info + + + My purchased tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 4 + + My purchased tokens + + + + + + + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 78,80 + + + + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 90,92 + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + + Your Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 21 + + Your Deposit + + + Potential Tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 22 + + Potential Tokens + + + Token Owned + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 23 + + Token Owned + + + Total Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 24 + + Total Deposit + + + Total Participants + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 25 + + Total Participants + + + Sale ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 45 + + Sale ends in + + + Cooldown in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 62 + + Cooldown in progress + + + Sale in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 64 + + 판매중 + + + Sale starts in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 69 + + Sale starts in + + + Cooldown ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 73 + + Cooldown ends in + + + + + + + src/app/pages/token/pages/token/token.page.html + 47,48 + + + + + Airdrops + + src/app/pages/token/pages/token/token.page.ts + 41 + + Airdrops + + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + src/app/pages/token/pages/token/token.page.ts + 100 + + + src/app/pages/token/pages/trade/trade.page.ts + 275 + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + + Ongoing Sale + + src/app/pages/token/pages/token/token.page.ts + 248 + + Ongoing Sale + + + Scheduled + + src/app/pages/token/pages/token/token.page.ts + 250 + + Scheduled + + + Cooldown + + src/app/pages/token/pages/token/token.page.ts + 252 + + Cooldown + + + Processing + + src/app/pages/token/pages/token/token.page.ts + 254 + + Processing + + + Order book + + src/app/pages/token/pages/trade/trade.page.html + 94 + + + src/app/pages/token/pages/trade/trade.page.html + 644 + + Order book + + + Token chart + + src/app/pages/token/pages/trade/trade.page.html + 102 + + + src/app/pages/token/pages/trade/trade.page.html + 795 + + Token chart + + + My trading + + src/app/pages/token/pages/trade/trade.page.html + 158 + + My trading + + + Open buy orders + + src/app/pages/token/pages/trade/trade.page.html + 166 + + Open buy orders + + + Open sell orders + + src/app/pages/token/pages/trade/trade.page.html + 174 + + Open sell orders + + + Order history + + src/app/pages/token/pages/trade/trade.page.html + 182 + + Order history + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 213 + + + src/app/pages/token/pages/trade/trade.page.html + 287 + + Fulfilled + + + There are no buys + + src/app/pages/token/pages/trade/trade.page.html + 257,258 + + There are no buys + + + Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 321,322 + + + src/app/pages/token/pages/trade/trade.page.html + 416,417 + + Cancelled + + + Expired + + src/app/pages/token/pages/trade/trade.page.html + 324,325 + + + src/app/pages/token/pages/trade/trade.page.html + 422,423 + + Expired + + + There are no sells + + src/app/pages/token/pages/trade/trade.page.html + 345,346 + + There are no sells + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 388 + + + src/app/pages/token/pages/trade/trade.page.html + 1213 + + Sell + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 404,405 + + Fulfilled + + + Partially Fulfilled / Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 410,411 + + Partially Fulfilled / Cancelled + + + Fulfilled / Cancelled (unfulfillable) + + src/app/pages/token/pages/trade/trade.page.html + 419,420 + + Fulfilled / Cancelled (unfulfillable) + + + There is no order history + + src/app/pages/token/pages/trade/trade.page.html + 434,435 + + There is no order history + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 477,478 + + + src/app/pages/token/pages/trade/trade.page.html + 488,489 + + + src/app/pages/token/pages/trade/trade.page.html + 919,920 + + Sell + + + Available + + src/app/pages/token/pages/trade/trade.page.html + 530,531 + + Available + + + Current Price + + src/app/pages/token/pages/trade/trade.page.html + 542 + + Current Price + + + Change 24h + + src/app/pages/token/pages/trade/trade.page.html + 564,565 + + Change 24h + + + ( ~ ) + + src/app/pages/token/pages/trade/trade.page.html + 729,732 + + ( ~ ) + + + current price + + src/app/pages/token/pages/trade/trade.page.html + 737,738 + + current price + + + There is no activity yet + + src/app/pages/token/pages/trade/trade.page.html + 788,789 + + There is no activity yet + + + Trade history + + src/app/pages/token/pages/trade/trade.page.html + 829,830 + + 트레이드 내역 + + + There is no trade history + + src/app/pages/token/pages/trade/trade.page.html + 894,895 + + There is no trade history + + + You don’t have enough tokens + + src/app/pages/token/pages/trade/trade.page.html + 928 + + You don’t have enough tokens + + + Amount to + + src/app/pages/token/pages/trade/trade.page.html + 935,936 + + Amount to + + + Balance + + src/app/pages/token/pages/trade/trade.page.html + 979 + + Balance + + + Set your price per 1 + + src/app/pages/token/pages/trade/trade.page.html + 998,1000 + + Set your price per 1 + + + LIMIT PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1009,1010 + + LIMIT PRICE + + + MARKET PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1017,1018 + + MARKET PRICE + + + ~ + + src/app/pages/token/pages/trade/trade.page.html + 1038,1041 + + + src/app/pages/token/pages/trade/trade.page.html + 1145,1148 + + ~ + + + Set Current Price + + src/app/pages/token/pages/trade/trade.page.html + 1069 + + Set Current Price + + + Set BID + + src/app/pages/token/pages/trade/trade.page.html + 1093,1104 + + Set BID + + + The bid price is the highest price that a particular buyer is willing to pay. + + src/app/pages/token/pages/trade/trade.page.html + 1100 + + The bid price is the highest price that a particular buyer is willing to pay. + + + Set ASK + + src/app/pages/token/pages/trade/trade.page.html + 1109,1120 + + Set ASK + + + The asking price is the minimum price that an individual would be willing to sell their asset. + + src/app/pages/token/pages/trade/trade.page.html + 1116 + + The asking price is the minimum price that an individual would be willing to sell their asset. + + + You will spend + + src/app/pages/token/pages/trade/trade.page.html + 1129,1130 + + You will spend + + + Minimum total has to be at least + + src/app/pages/token/pages/trade/trade.page.html + 1163 + + Minimum total has to be at least + + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + src/app/pages/token/pages/trade/trade.page.html + 1179 + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + + 1h + + src/app/pages/token/pages/trade/trade.page.ts + 118 + + 1h + + + 4h + + src/app/pages/token/pages/trade/trade.page.ts + 119 + + 4h + + + 1d + + src/app/pages/token/pages/trade/trade.page.ts + 120 + + 1d + + + 1w + + src/app/pages/token/pages/trade/trade.page.ts + 121 + + 1w + + + Bids + + src/app/pages/token/pages/trade/trade.page.ts + 563 + + Bids + + + Asks + + src/app/pages/token/pages/trade/trade.page.ts + 567 + + Asks + + + Cancelled + + src/app/pages/token/services/helper.service.ts + 201 + + Cancelled + + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 42 + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + + Go to trading pairs to add your favourite tokens. + + src/app/pages/tokens/pages/favourites/favourites.page.html + 47,48 + + Go to trading pairs to add your favourite tokens. + + + Add favourites + + src/app/pages/tokens/pages/favourites/favourites.page.html + 56,57 + + Add favourites + + + Tokens - Favourite + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 52 + + Tokens - Favourite + + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 53 + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + + Tokens - Launchpad + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 41 + + Tokens - Launchpad + + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 42 + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/tokens/pages/tokens/tokens.page.html + 11,13 + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + + Highlighted Token + + src/app/pages/tokens/pages/tokens/tokens.page.html + 49 + + Highlighted Token + + + Favorites + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 17 + + Favorites + + + All tokens + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 20 + + All tokens + + + Trading pairs + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 21 + + Trading pairs + + + Launchpad + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 22 + + Launchpad + + + Tokens - Trading Pairs + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 43 + + Tokens - Trading Pairs + + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 44 + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + + AuditOne Validation + + src/app/service-modules/audit-one/components/modal/modal.component.html + 3 + + AuditOne Validation + + + Requested On + + src/app/service-modules/audit-one/components/modal/modal.component.html + 22 + + Requested On + + + Last Update + + src/app/service-modules/audit-one/components/modal/modal.component.html + 23 + + Last Update + + + There are no records. + + src/app/service-modules/audit-one/components/modal/modal.component.html + 52 + + There are no records. + + + AuditOne + + src/app/service-modules/audit-one/components/widget/widget.component.html + 11 + + AuditOne + + + Verified + + src/app/service-modules/audit-one/components/widget/widget.component.html + 47 + + Verified + + + See more + + src/app/service-modules/audit-one/components/widget/widget.component.html + 52 + + See more + + + + diff --git a/src/locale/messages.nl-NL.xlf b/src/locale/messages.nl-NL.xlf new file mode 100644 index 0000000..8105251 --- /dev/null +++ b/src/locale/messages.nl-NL.xlf @@ -0,0 +1,13270 @@ + + + + + + Top Members + + src/app/@core/services/filter-storage/filter-storage.service.ts + 97 + + Topleden + + + Recent + + src/app/@core/services/filter-storage/filter-storage.service.ts + 98 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 116 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 133 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 147 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 165 + + Recent + + + Oldest + + src/app/@core/services/filter-storage/filter-storage.service.ts + 99 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 117 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 134 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 148 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 166 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 188 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 209 + + Oudste + + + Ending Soon + + src/app/@core/services/filter-storage/filter-storage.service.ts + 115 + + Eindigt binnenkort + + + Ending SOON + + src/app/@core/services/filter-storage/filter-storage.service.ts + 164 + + Eindigt binnenkort + + + Available Date + + src/app/@core/services/filter-storage/filter-storage.service.ts + 182 + + Datum beschikbaar + + + Recently Created + + src/app/@core/services/filter-storage/filter-storage.service.ts + 183 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 208 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 57 + + Recent aangemaakt + + + Price: Low to High + + src/app/@core/services/filter-storage/filter-storage.service.ts + 184 + + Prijs: laag naar hoog + + + Price: High to Low + + src/app/@core/services/filter-storage/filter-storage.service.ts + 185 + + Prijs: hoog naar laag + + + Top Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 186 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 206 + + Meest Verhandeld + + + Recently Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 187 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 207 + + Recent Verhandeld + + + Public Vote + + src/app/@core/services/filter-storage/filter-storage.service.ts + 202 + + Openbare Stem + + + Community Rank + + src/app/@core/services/filter-storage/filter-storage.service.ts + 203 + + Community rang + + + SOON on Sale + + src/app/@core/services/filter-storage/filter-storage.service.ts + 204 + + Binnenkort in de uitverkoop + + + Recently Minted + + src/app/@core/services/filter-storage/filter-storage.service.ts + 205 + + Recent gemint + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 74 + + Terug + + + Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products. + + src/app/@core/services/seo/seo.service.ts + 7 + + Soonaverse is een platform voor gemeenschappen om gedecentraliseerde autonome organisaties (DAO's), NFT's, projecten, bedrijven en markten te creëren en te beheren op de feeless infrastructuur van IOTA. Elke organisatie kan liquide assets lanceren en verhandelen via onze Marktplaats, Launchpad, en Token Exchange producten. + + + Bill Payment + + src/app/@core/services/transaction/transaction.service.ts + 18 + + Factuur betaling + + + Bill (royalty) + + src/app/@core/services/transaction/transaction.service.ts + 20 + + Factuur (royalty) + + + Credit + + src/app/@core/services/transaction/transaction.service.ts + 26 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 336 + + Krediet + + + Payment + + src/app/@core/services/transaction/transaction.service.ts + 28 + + Betaling + + + Credit NFT + + src/app/@core/services/transaction/transaction.service.ts + 30 + + Kredieteer NFT + + + Mint Collection + + src/app/@core/services/transaction/transaction.service.ts + 32 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 36 + + Mint Collectie + + + Mint Token + + src/app/@core/services/transaction/transaction.service.ts + 34 + + + src/app/pages/space/pages/manage/manage.page.html + 116 + + Mint Token + + + Withdraw Asset + + src/app/@core/services/transaction/transaction.service.ts + 36 + + Neem asset op + + + Unlock + + src/app/@core/services/transaction/transaction.service.ts + 38 + + Ontgrendel + + + Vote + + src/app/@core/services/transaction/transaction.service.ts + 40 + + Stem + + + Order + + src/app/@core/services/transaction/transaction.service.ts + 42 + + Order + + + (Mint Alias) + + src/app/@core/services/transaction/transaction.service.ts + 49 + + (Mint alias) + + + (Mint NFTs) + + src/app/@core/services/transaction/transaction.service.ts + 51 + + (Mint NFT's) + + + (Mint Foundry) + + src/app/@core/services/transaction/transaction.service.ts + 53 + + (Mint Foundry) + + + (Send Alias to Guardian) + + src/app/@core/services/transaction/transaction.service.ts + 55 + + (Stuur Alias naar de Bewaker) + + + (Lock Collection) + + src/app/@core/services/transaction/transaction.service.ts + 57 + + (Vergrendel Collectie) + + + Discover + + src/app/@shell/ui/header/header.component.html + 76 + + + src/app/components/auth/services/auth.service.ts + 83 + + Ontdekken + + + Create new + + src/app/@shell/ui/header/header.component.html + 91 + + Maak nieuw + + + Space + + src/app/@shell/ui/header/header.component.html + 97 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100 + + + src/app/pages/collection/pages/collection/collection.page.html + 110 + + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 206,205 + + + src/app/pages/token/pages/new/summary/summary.component.html + 242,241 + + Groep + + + Proposal + + src/app/@shell/ui/header/header.component.html + 103 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 29 + + Voorstel + + + Award + + src/app/@shell/ui/header/header.component.html + 106 + + + src/app/pages/award/pages/award/award.page.html + 29 + + + src/app/pages/award/pages/award/award.page.ts + 100 + + Award + + + Collection + + src/app/@shell/ui/header/header.component.html + 110 + + + src/app/@shell/ui/header/header.component.html + 129 + + + src/app/pages/collection/pages/collection/collection.page.html + 37 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136 + + + src/app/pages/nft/pages/new/single/single.page.html + 346 + + + src/app/pages/space/pages/collections/collections.page.html + 49 + + Collectie + + + Token + + src/app/@shell/ui/header/header.component.html + 113 + + + src/app/@shell/ui/header/header.component.html + 132 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 321 + + + src/app/pages/token/pages/token/token.page.html + 29 + + + src/app/pages/token/pages/token/token.page.ts + 99 + + + src/app/pages/token/pages/trade/trade.page.ts + 274 + + Token + + + To unlock more features you have to stake SOON token. + + src/app/@shell/ui/header/header.component.html + 124,126 + + Om meer functies te ontgrendelen moet je een SOON token staken. + + + VIP LEVEL + + src/app/@shell/ui/header/header.component.html + 197,198 + + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 37,38 + + + src/app/pages/member/pages/activity/activity.page.html + 146,147 + + VIP LEVEL + + + None. + + src/app/@shell/ui/header/header.component.html + 232 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 77 + + Geen. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 240 + + + src/app/components/auth/services/auth.service.ts + 551 + + Mijn Profiel + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 265,266 + + Aankoop is niet voltooid + + + You have + + src/app/@shell/ui/header/header.component.html + 270 + + Je hebt + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 272 + + om je transactie te voltooien + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 282,283 + + Open transactieverwerking + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 334 + + Je hebt de NFT gewonnen + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 335 + + Je bent de trotse eigenaar van een nieuwe NFT. Gefeliciteerd! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 342 + + Je hebt je bod verloren! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 343 + + Jouw bod op + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 344 + + was overboden. Probeer het opnieuw! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 351 + + net aangeboden + + + for + + src/app/@shell/ui/header/header.component.ts + 352 + + + src/app/components/timeline/timeline.component.html + 171 + + voor + + + Your + + src/app/@shell/ui/header/header.component.ts + 353 + + Jouw + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 354 + + heeft een nieuw bod ontvangen voor + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 377 + + Niet ondersteund + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 378 + + Deze notificatie wordt nog niet ondersteund in jouw taal + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27,28 + + Groep + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 38,39 + + Voorstel + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 49,50 + + Award + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 60,61 + + Collectie + + + Token + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 70,71 + + Token + + + Stake more SOON to create tokens and collections. + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 81,84 + + Stake meer SOON om tokens en collecties te maken. + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 57,58 + + Maak verbinding met je MetaMask wallet + + + Connect via TanglePay + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 73 + + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 47 + + Verbinden via TanglePay + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 97 + + Uitloggen + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 103 + + Mogelijk gemaakt door + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8 + + The pagina die je zocht kon niet gevonden worden + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 9,11 + + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Ontdek Soonaverse + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 19 + + Netwerkstatus + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 30,31 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 84,85 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 140,141 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 197,198 + + Netwerkstatus + + + Operational + + src/app/@shell/ui/sider/network-status/network-status.component.html + 36 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 90 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 146 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 203 + + Operationeel + + + Degraded Performance + + src/app/@shell/ui/sider/network-status/network-status.component.html + 43 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 97 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 153 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 210 + + Verminderde performantie + + + Down + + src/app/@shell/ui/sider/network-status/network-status.component.html + 50 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 104 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 160 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 217 + + Onbeschikbaar + + + Last milestone + + src/app/@shell/ui/sider/network-status/network-status.component.html + 57,58 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 111,112 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 170,171 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 224,225 + + Laatste mijlpaal + + + Devnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 78,79 + + + src/app/components/network/components/select-network/select-network.component.html + 61,63 + + Devnet + + + Shimmer Mainnet Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 132,133 + + Shimmer Mainnet komt BINNENKORT + + + Testnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 191,192 + + + src/app/components/network/components/select-network/select-network.component.html + 33,35 + + Testnet + + + Assembly + + src/app/@shell/ui/sider/network-status/network-status.component.html + 237 + + Assembly + + + Assembly Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 244,245 + + Assembly komt BINNENKORT + + + Shimmer EVM Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 266,267 + + Shimmer EVM komt BINNENKORT + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 48 + + Bekijk Documentatie + + + Show more + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 47 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 27 + + + src/app/components/timeline/timeline.component.html + 304 + + Toon meer + + + Show less + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 48 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 28 + + + src/app/components/timeline/timeline.component.html + 303 + + Toon minder + + + Search here... + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 50 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 30 + + Zoek hier... + + + Reset + + + src/app/components/algolia/algolia-clear/algolia-clear.component.html + 5,7 + + Reset + + + + Search + + src/app/components/algolia/search/search.component.html + 20,19 + + + src/app/components/collection/components/select-collection/select-collection.component.html + 95,94 + + + src/app/components/space/components/select-space/select-space.component.html + 95,94 + + Zoeken + + + Start typing... + + src/app/components/algolia/search/search.component.html + 36 + + Typ hier... + + + Open + + src/app/components/algolia/services/algolia.service.ts + 32 + + Open + + + Guardians of Space Only + + src/app/components/algolia/services/algolia.service.ts + 34 + + Alleen bewakers van de groep + + + Members of Space Only + + src/app/components/algolia/services/algolia.service.ts + 36 + + Enkel leden van de groep + + + Members With Badge Only + + src/app/components/algolia/services/algolia.service.ts + 38 + + Enkel leden met een badge + + + Members With NFT only + + src/app/components/algolia/services/algolia.service.ts + 40 + + Enkel leden met een NFT + + + Unavailable for sale + + src/app/components/algolia/services/algolia.service.ts + 53 + + Onbeschikbaar voor verkoop + + + On Auction + + src/app/components/algolia/services/algolia.service.ts + 55 + + In Veiling + + + Available + + src/app/components/algolia/services/algolia.service.ts + 57 + + + src/app/components/award/components/award-status/award-status.component.html + 23 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 61 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 162 + + + src/app/pages/space/pages/collections/collections.page.ts + 31 + + + src/app/pages/token/pages/token/token.page.ts + 256 + + Beschikbaar + + + On Sale + + src/app/components/algolia/services/algolia.service.ts + 59 + + In verkoop + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 19 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23 + + Verbind met je Metamask wallet + + + TanglePay + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 43 + + TanglePay + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 67 + + Zorg ervoor dat je de publieke IOTA EVM Chain in MetaMask selecteert. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 69 + + Netwerk naam: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 70 + + RPC URL: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 71 + + Chain ID: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 89,90 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 120,121 + + Annuleren + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 8,10 + + Verbinden + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Verbreken + + + Staking + + src/app/components/auth/services/auth.service.ts + 90 + + Staken + + + Tokens + + src/app/components/auth/services/auth.service.ts + 97 + + + src/app/pages/discover/pages/awards/awards.page.html + 145,144 + + + src/app/pages/member/pages/member/member.page.ts + 66 + + + src/app/pages/member/pages/tokens/tokens.page.html + 49 + + + src/app/pages/member/pages/tokens/tokens.page.html + 235 + + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 41 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 2 + + Tokens + + + Swap + + src/app/components/auth/services/auth.service.ts + 104 + + Wisselen + + + Pool + + src/app/components/auth/services/auth.service.ts + 111 + + Pool + + + Marketplace + + src/app/components/auth/services/auth.service.ts + 118 + + Marktplaats + + + My Overview + + src/app/components/auth/services/auth.service.ts + 125 + + + src/app/pages/dashboard/dashboard.page.html + 2 + + Mijn overzicht + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 232 + + Kan transactie niet ondertekenen. Probeer pagina te herladen. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 278 + + Je moet eerst je MetaMask ontgrendelen! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 290 + + Je moet de toegang open zetten om je account adres te lezen. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 298 + + Selecteer alsjeblieft een adres in MetaMask! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 307 + + + src/app/components/auth/services/auth.service.ts + 378 + + Het is niet mogelijk om nonce te laten authenticeren! + + + Unable to connect your TanglePay wallet. + + src/app/components/auth/services/auth.service.ts + 343 + + + src/app/components/auth/services/auth.service.ts + 482 + + Kan geen verbinding maken met jouw TanglePay wallet. + + + Unable to detect address in TanglePay! + + src/app/components/auth/services/auth.service.ts + 349 + + Kan geen adres vinden in TanglePay! + + + You have to open Soonaverse in wallet app. + + src/app/components/auth/services/auth.service.ts + 443 + + Je moet Soonaverse openen in de wallet app. + + + Failed to initialize wallet, try to reload page. + + src/app/components/auth/services/auth.service.ts + 445 + + Kan wallet niet initialiseren, probeer pagina te herladen. + + + Give badges + + src/app/components/award/components/award-awards/award-awards.component.html + 11 + + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 16 + + Geef badges + + + Once issued, this badge is sent to the rewarded participant's wallet. + + src/app/components/award/components/award-awards/award-awards.component.html + 36 + + Eenmaal uitgegeven, wordt deze badge verzonden naar de wallet van de beloonde deelnemer. + + + Upload CSV + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 31,32 + + CSV uploaden + + + Download CSV template + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 34 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 85 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 10 + + Download CSV-template + + + You can create badge airdrops for any user. You can upload CSV with users addresses and they will be properly reward. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 42,44 + + Je kunt badge airdrops voor eender welke gebruiker maken. Je kunt een CSV uploaden met de adressen van de gebruikers en ze zullen correct worden beloond. + + + If you don’t know how to prepare CSV file, you can download our template made for you. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 50,51 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 101,102 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 25,26 + + Als je niet weet hoe je een CSV-bestand moet voorbereiden, kun je een template downloaden die we al gemaakt hebben. + + + Confirm schedule + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 77 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 128 + + Schema bevestigen + + + Address + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 97 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 21 + + Adres + + + Action + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 98 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 288 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 153 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 22 + + + src/app/pages/token/pages/trade/trade.page.html + 214 + + + src/app/pages/token/pages/trade/trade.page.html + 288 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 24 + + Actie + + + Badge + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 104 + + + src/app/pages/award/pages/new/new.page.html + 298,297 + + Badge + + + Submitted. + + src/app/components/award/components/award-give-badges/award-give-badges.component.ts + 103 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 137 + + Ingediend. + + + Fund Award & Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 3 + + Beloning & Mint + + + Reward Token + + src/app/components/award/components/award-mint/award-mint.component.html + 21 + + Beloningstoken + + + Reward to be funded + + src/app/components/award/components/award-mint/award-mint.component.html + 43 + + Beloning om te financieren + + + Confirm & Start + + src/app/components/award/components/award-mint/award-mint.component.html + 98,99 + + Bevestigen & Start + + + Once you agree with the terms, the generated address will remain active during the whole process. + + src/app/components/award/components/award-mint/award-mint.component.html + 105,107 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 181,183 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 93,95 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 146,148 + + Zodra je akkoord gaat met de voorwaarden, blijft het gegenereerde adres actief tijdens het hele proces. + + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + src/app/components/award/components/award-mint/award-mint.component.html + 120,121 + + Gebruik deep-link om de betaling te doen. Helaas wordt er geen handmatige invoer ondersteund door Firefly. + + + Transaction history + + src/app/components/award/components/award-mint/award-mint.component.html + 159 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 252 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 246 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 134 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 176 + + + src/app/components/space/components/space-claim/space-claim.component.html + 113 + + + src/app/components/space/components/space-claim/space-claim.component.html + 135 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 122 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 144 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 207 + + + src/app/components/token/components/token-bid/token-bid.component.html + 212 + + + src/app/components/token/components/token-bid/token-bid.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 256 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 249 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 254 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 276 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 209 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 269 + + + src/app/components/token/components/token-stake/token-stake.component.html + 319 + + + src/app/components/token/components/token-stake/token-stake.component.html + 341 + + + src/app/components/token/components/token-vote/token-vote.component.html + 271 + + + src/app/components/token/components/token-vote/token-vote.component.html + 293 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 110 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 146 + + Transactie historie + + + Transaction complete. Congratulations. + + src/app/components/award/components/award-mint/award-mint.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 271 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 235 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 277 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 294 + + Transactie voltooid. Gefeliciteerd. + + + Finish Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 191,192 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 289,290 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 281,282 + + Mint voltooien + + + Funding info + + src/app/components/award/components/award-mint/award-mint.component.ts + 83 + + Financiering info + + + Make transaction + + src/app/components/award/components/award-mint/award-mint.component.ts + 84 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 92 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 87 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 101 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 77 + + Voer transactie uit + + + Wait for confirmation + + src/app/components/award/components/award-mint/award-mint.component.ts + 85 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 93 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 87 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 109 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 88 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 102 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 78 + + Wacht op bevestiging + + + Confirmed + + src/app/components/award/components/award-mint/award-mint.component.ts + 86 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 94 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 88 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 110 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 89 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 103 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 79 + + Bevestigd + + + Payment received. + + src/app/components/award/components/award-mint/award-mint.component.ts + 141 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 150 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 196 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 136 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 136 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 145 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 155 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 140 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 159 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 157 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 131 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 224 + + Betaling ontvangen. + + + Confirming transaction. + + src/app/components/award/components/award-mint/award-mint.component.ts + 158 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 167 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 213 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 164 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 189 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 153 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 153 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 162 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 172 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 157 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 176 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 174 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 148 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 241 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 208 + + Transactie bevestigen. + + + Transaction confirmed. + + src/app/components/award/components/award-mint/award-mint.component.ts + 167 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 176 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 222 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 173 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 198 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 162 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 162 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 171 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 181 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 166 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 185 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 183 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 157 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 250 + + Transactie bevestigd. + + + Invalid amount received. Refunding transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 186 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 203 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 258 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 182 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 190 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 210 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 186 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 204 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 212 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 190 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 270 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 247 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 159 + + Incorrect bedrag ontvangen. Transactie wordt terugbetaald... + + + Invalid transaction.You must gift storage deposit. + + src/app/components/award/components/award-mint/award-mint.component.ts + 209 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 218 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 281 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 206 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 205 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 213 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 225 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 209 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 227 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 227 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 206 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 293 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 262 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 175 + + Ongeldige transactie. Je moet opslag storten. + + + Invalid payment refunded. + + src/app/components/award/components/award-mint/award-mint.component.ts + 224 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 233 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 296 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 220 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 228 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 241 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 224 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 242 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 243 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 221 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 308 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 279 + + Incorrecte betaling terugbetaald. + + + Waiting for transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 300 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 321 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 442 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 290 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 317 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 311 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 316 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 306 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 348 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 327 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 319 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 350 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 336 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 415 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 398 + + Wachten op transactie... + + + Pending Funding + + + src/app/components/award/components/award-status/award-status.component.html + 5,6 + + Financiering in behandeling + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 11,12 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 11,12 + + Geweigerd + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 17 + + + src/app/pages/space/pages/awards/awards.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 32 + + Voltooid + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 570 + + Alleen Groepsleden + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 557 + + Alleen Groepsbewakers + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 29 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 583 + + Alleen Groepsleden met Badge + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 39 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 595 + + Ten minste één NFT uit de collecties + + + Specific members only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 53 + + Alleen specifieke leden + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 28 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 95 + + + src/app/components/token/components/token-card/token-card.component.html + 70 + + Begint over + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 30 + + + src/app/components/countdown/countdown.component.html + 56 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 109 + + dagen + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 33 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 122 + + Begint vandaag + + + Collection is not yet migrated to the decentralized network. + + src/app/components/collection/components/collection-card/collection-card.component.html + 59 + + Collectie is nog niet gemigreerd naar het gedecentraliseerde netwerk. + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 76 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 611 + + Beperkte oplage + + + Floor Price + + src/app/components/collection/components/collection-card/collection-card.component.html + 104 + + + src/app/pages/collection/pages/collection/collection.page.html + 207 + + Minimumprijs + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 56 + + In afwachting van goedkeuring + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 66 + + + src/app/pages/space/pages/awards/awards.page.ts + 33 + + + src/app/pages/space/pages/collections/collections.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 33 + + Afgewezen + + + Remaining + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 42 + + Resterend + + + NFTs + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 49 + + + src/app/pages/market/pages/market/market.page.ts + 13 + + + src/app/pages/market/pages/market/market.page.ts + 34 + + + src/app/pages/member/pages/member/member.page.ts + 67 + + NFT's + + + Mint collection on network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 3 + + Mint collectie op netwerk + + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 43,45 + + Zodra alle NFT's van deze collectie gemint zijn zullen ze door hun eigenaren naar het geselecteerde netwerk kunnen migreren. + + + Unsold NFT's + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 60,61 + + Niet-verkochte NFT's + + + Decide what should happen with all NFTs that were not sold yet. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 67 + + Beslis wat er moet gebeuren met alle NFT's die nog niet zijn verkocht. + + + Keep the same price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 76 + + Houd dezelfde prijs + + + Take Ownership + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 86 + + Wordt eigenaar + + + Set new price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 96 + + Stel nieuwe prijs in + + + Burn all unsold + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 103 + + Burn alle onverkochte + + + Note that the collection ownership will be granted only to your profile. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 130,131 + + Houd er rekening mee dat eigenaarschap van de collectie alleen aan jou profiel wordt toegekend. + + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 141,143 + + Na het minten kan een collectie niet meer bewerkt worden en kan er geen nieuw NFT toegevoegd worden aan die collectie + + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 150 + + Door dit vakje aan te vinken, accepteer je dat alle actieve verkopen van deze collectie NFT's zulllen worden geannuleerd. + + + Confirm & Start minting + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 174,175 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 139,140 + + Bevestigen & beginnen met minten + + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 196,198 + + Zodra de transactie is geregistreerd, zullen we alle lopende verkopen van de NFT's van de collectie annuleren en zullen we alle onverkochte NFT's burnen (indien geselecteerd). + + + remaining to make the transfer. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 171 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 90 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 132 + + + src/app/components/space/components/space-claim/space-claim.component.html + 78 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 87 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 140 + + + src/app/components/token/components/token-bid/token-bid.component.html + 170 + + + src/app/components/token/components/token-claim/token-claim.component.html + 199 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 194 + + + src/app/components/token/components/token-stake/token-stake.component.html + 279 + + + src/app/components/token/components/token-vote/token-vote.component.html + 209 + + resterend om de betaling te voldoen. + + + Expired + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 213 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 174 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 93 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 135 + + + src/app/components/space/components/space-claim/space-claim.component.html + 81 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 90 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 143 + + + src/app/components/token/components/token-bid/token-bid.component.html + 173 + + + src/app/components/token/components/token-claim/token-claim.component.html + 202 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 197 + + + src/app/components/token/components/token-stake/token-stake.component.html + 282 + + + src/app/components/token/components/token-vote/token-vote.component.html + 212 + + + src/app/pages/token/services/helper.service.ts + 204 + + Verlopen + + + NFT's from this collection are now being migrated. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 284,285 + + NFT's van deze collectie worden nu gemigreerd. + + + NFT's in collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 308,309 + + NFT's in collectie + + + Total Storage Fee + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 318 + + Totale opslag fee + + + (NFTs Storage Fee + Collection Storage Fee) + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 319 + + (NFTs opslagvergoeding + Collectie opslag fee) + + + Select network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 91 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 86 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 100 + + Selecteer netwerk + + + Pending + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5,6 + + In behandeling + + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 4 + + + src/app/pages/nft/pages/new/single/single.page.html + 352 + + Collectie is vereist. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 13 + + Selecteer Collectie + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 83 + + Selecteer een collectie + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 114 + + + src/app/components/space/components/select-space/select-space.component.html + 114 + + Geen resultaten voor + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 20 + + Alle Collecties + + + + + + + src/app/components/confirm-modal/confirm-modal.component.html + 48,50 + + + src/app/components/confirm-modal/confirm-modal.component.html + 51,53 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 246,251 + + + src/app/components/token/components/token-vote/token-vote.component.html + 46,47 + + + src/app/pages/collection/pages/collection/collection.page.html + 130,131 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 55,56 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 71,72 + + + + + Are you sure? + + src/app/components/confirm-modal/confirm-modal.component.ts + 30 + + Weet je het zeker? + + + Close + + src/app/components/confirm-modal/confirm-modal.component.ts + 33 + + Sluiten + + + Confirm + + src/app/components/confirm-modal/confirm-modal.component.ts + 34 + + + src/app/components/token/components/token-bid/token-bid.component.html + 146 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 170 + + + src/app/components/token/components/token-vote/token-vote.component.html + 181 + + Bevestigen + + + Connect wallet + + src/app/components/connect-wallet/connect-wallet.component.html + 7 + + Verbind Wallet + + + d + + src/app/components/countdown/countdown.component.html + 55 + + d + + + h + + src/app/components/countdown/countdown.component.html + 68 + + u + + + hours + + src/app/components/countdown/countdown.component.html + 69 + + uren + + + m + + src/app/components/countdown/countdown.component.html + 81 + + m + + + min + + src/app/components/countdown/countdown.component.html + 82 + + minuten + + + s + + src/app/components/countdown/countdown.component.html + 94 + + s + + + sec + + src/app/components/countdown/countdown.component.html + 95 + + seconden + + + Ends + + src/app/components/date-tag/date-tag.component.ts + 11 + + Eindigt + + + Price + + src/app/components/iota-input/iota-input.component.html + 3 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 139 + + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 81 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 19 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 124 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 49 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 75 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 37 + + + src/app/pages/token/pages/trade/trade.page.html + 209 + + + src/app/pages/token/pages/trade/trade.page.html + 283 + + + src/app/pages/token/pages/trade/trade.page.html + 372 + + + src/app/pages/token/pages/trade/trade.page.html + 659 + + + src/app/pages/token/pages/trade/trade.page.html + 846 + + Prijs + + + Verified addresses + + src/app/components/member/components/member-about/member-about.component.html + 90 + + Geverifieerde adressen + + + Manage + + src/app/components/member/components/member-about/member-about.component.html + 96 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 297 + + + src/app/pages/space/pages/space/space.page.ts + 53 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 18 + + Beheren + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 119 + + Onlangs toegetreden groepen + + + All + + src/app/components/member/components/member-about/member-about.component.html + 124 + + Alle + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 155 + + Nog geen bijdragen. + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 74 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 22 + + awards + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 14 + + Weergavenaam + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19 + + Stel een weergavenaam in. Je gebruikersnaam wordt niet gewijzigd. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 26 + + Weergavenaam (optioneel) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 36 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 208 + + + src/app/pages/space/pages/space/space.page.ts + 44 + + Info + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 41 + + Een korte beschrijving van jezelf die wordt weergegeven op je profiel. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 48 + + Jouw beschrijving (optioneel) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 57 + + + src/app/pages/space/pages/upsert/upsert.page.html + 166 + + Avatar + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 62 + + Pas je Soonaverse identiteit aan. + + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,78 + + Mint gratis een unieke avatar voor je profielfoto. Nieuwe super zeldzame premium avatar soorten en avatar collectibels/accessoires die allemaal kunnen worden verhandeld komen binnenkort. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 92 + + WOW! Het lijkt erop dat jouw avatar de mooiste is van allemaal. Gefeliciteerd. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 97 + + + src/app/pages/space/pages/upsert/upsert.page.html + 54 + + Netwerken + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 99 + + + src/app/pages/space/pages/upsert/upsert.page.html + 61 + + Ongeldige Github gebruikersnaam. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 105 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67 + + Vul je Github gebruikersnaam in + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 117 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 177 + + + src/app/pages/space/pages/upsert/upsert.page.html + 78 + + Ongeldige Twitter gebruikersnaam. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 123 + + + src/app/pages/space/pages/upsert/upsert.page.html + 84 + + Vul je Twitter gebruikersnaam in + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 135 + + Alleen het "gebruikersnaam#1234" formaat wordt ondersteund. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 141 + + Vul je Discord gebruikersnaam in + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 155 + + Instellingen + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 157,158 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 123,124 + + Wijzigingen opslaan + + + + + + + src/app/components/network/components/select-network/select-network.component.html + 4,6 + + + + + + Shimmer + + src/app/components/network/components/select-network/select-network.component.html + 17 + + + src/app/components/network/components/select-network/select-network.component.html + 28 + + + src/app/components/network/components/selected-network/selected-network.component.html + 11 + + + src/app/pages/award/pages/award/award.page.html + 44 + + + src/app/pages/collection/pages/collection/collection.page.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 575 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 169 + + Shimmer + + + IOTA + + src/app/components/network/components/select-network/select-network.component.html + 45 + + + src/app/components/network/components/select-network/select-network.component.html + 56 + + + src/app/components/network/components/selected-network/selected-network.component.html + 19 + + + src/app/pages/award/pages/award/award.page.html + 52 + + + src/app/pages/collection/pages/collection/collection.page.html + 59 + + + src/app/pages/nft/pages/nft/nft.page.html + 583 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 177 + + IOTA + + + Selected Network + + src/app/components/network/components/selected-network/selected-network.component.html + 4,6 + + Geselecteerd netwerk + + + Shimmer Testnet + + src/app/components/network/components/selected-network/selected-network.component.html + 15 + + + src/app/pages/award/pages/award/award.page.html + 48 + + + src/app/pages/collection/pages/collection/collection.page.html + 55 + + + src/app/pages/nft/pages/nft/nft.page.html + 579 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 173 + + Shimmer Testnet + + + IOTA Devnet + + src/app/components/network/components/selected-network/selected-network.component.html + 23 + + + src/app/pages/award/pages/award/award.page.html + 56 + + + src/app/pages/collection/pages/collection/collection.page.html + 63 + + + src/app/pages/nft/pages/nft/nft.page.html + 587 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 181 + + IOTA Devnet + + + Send + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + Verstuur + + + to following address: + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + naar het volgende adres: + + + Copied + + src/app/components/network/components/send-funds/send-funds.component.html + 25 + + + src/app/components/share/share.component.html + 27 + + + src/app/components/wallet-address/wallet-address.component.html + 29 + + Gekopieerd + + + Copy + + src/app/components/network/components/send-funds/send-funds.component.html + 26 + + Kopieer + + + Do not send funds from an exchange, always use wallets you fully control. + + + src/app/components/network/components/send-funds/send-funds.component.html + 34,36 + + Stuur geen transacties vanaf een exchange, gebruik altijd wallets die je volledig beheert. + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 3 + + Doe een bod + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 15 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 16 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 25 + + NFT afbeelding + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 38 + + Eindigt + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 48 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 36 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46 + + Auteursrechten + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 55 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 43 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 53 + + De royalties worden automatisch in mindering gebracht en betaald aan kunstenaars. + + + Royalties goes to + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 73,74 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 61,62 + + Royalties gaan naar + + + + + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 75,76 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 63,64 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 262,263 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 188,189 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 264,265 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 306,307 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 344,345 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 45 + + + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 109 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Huidig hoogste bod + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 111 + + + src/app/pages/nft/pages/nft/nft.page.html + 111 + + Mininimaal bod + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 127 + + + src/app/pages/nft/pages/nft/nft.page.html + 116 + + Jouw bod is het hoogst + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 172,173 + + Huidige prijs ververst in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 208,209 + + Adres van de gewenste NTF zal voor je vergrendeld worden voor de hele veiling. Na betaling wordt jouw bod vergrendeld, als er een hoger bod is, wordt je automatisch terugbetaald. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 216,218 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,257 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 321,323 + + Als er een hoger bod is, zal je direct worden terugbetaald. Als je een ander bod wilt doen, stuur dan een hoger bedrag direct naar hetzelfde adres. + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 237,238 + + Doe een bod + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 278 + + Jouw transacties + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 286 + + Verzonden datum + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 287 + + + src/app/pages/token/pages/trade/trade.page.html + 854 + + Tijd + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 289 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 33 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 110 + + + src/app/pages/member/pages/tokens/tokens.page.html + 328 + + + src/app/pages/member/pages/transactions/transactions.page.html + 25 + + + src/app/pages/nft/pages/nft/nft.page.html + 323 + + + src/app/pages/nft/pages/nft/nft.page.html + 385 + + + src/app/pages/nft/pages/nft/nft.page.html + 435 + + + src/app/pages/token/pages/trade/trade.page.html + 200 + + + src/app/pages/token/pages/trade/trade.page.html + 274 + + + src/app/pages/token/pages/trade/trade.page.html + 363 + + + src/app/pages/token/pages/trade/trade.page.html + 664 + + + src/app/pages/token/pages/trade/trade.page.html + 851 + + Bedrag + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 55 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 96 + + Detail + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 311,310 + + + src/app/pages/nft/pages/nft/nft.page.html + 324 + + + src/app/pages/nft/pages/nft/nft.page.html + 360,359 + + + src/app/pages/nft/pages/nft/nft.page.html + 386 + + + src/app/pages/nft/pages/nft/nft.page.html + 410,409 + + + src/app/pages/nft/pages/nft/nft.page.html + 436 + + + src/app/pages/nft/pages/nft/nft.page.html + 460,459 + + Link + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 345 + + Gefeliciteerd, je hebt de NFT gewonnen. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 357,358 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 283,284 + + + src/app/components/token/components/token-bid/token-bid.component.html + 271,272 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 313,314 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 306,307 + + + src/app/components/token/components/token-vote/token-vote.component.html + 330,331 + + Sluit transactieverwerking + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 368,369 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 294,295 + + Toon mijn NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 384 + + Bieding is verlopen. Succes de volgende keer :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 272 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 459 + + Gegenereerde NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 274 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 461 + + SFT + + + NFT is not yet migrated to the decentralized network. + + src/app/components/nft/components/nft-card/nft-card.component.html + 65 + + NFT is nog niet gemigreerd naar het gedecentraliseerde netwerk. + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 118 + + dag + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 156 + + Huidig bod + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 191 + + + src/app/pages/nft/pages/nft/nft.page.html + 594 + + Eigendom van + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 229,231 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 167 + + Nieuwe NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 3 + + Afrekenen + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 74,75 + + Totaalprijs + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150,151 + + Bevestigen en vergrendelen + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 156 + + Uw NFT zal worden vergrendeld voor aankoop voor + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + minuten + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 185 + + We hebben een ongeldig bedrag/aantal ontvangen. Probeer het opnieuw. + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 237,238 + + Je transactie valideren... + + + Order created. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 437 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 332 + + Order aangemaakt. + + + Deposit NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 215 + + Stort NFT + + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 46,48 + + Je kunt NFT terug storten naar Soonaverse om handel toe te staan. Eenmaal verwerkt zal je NFT vergrendeld zijn in Soonaverse. Je kunt op elk gewenst moment opnemen. + + + Confirm & Start deposit + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 76,77 + + Bevestig & begin storting + + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 113,115 + + Als NFT niet wordt herkend binnen Soonaverse zullen we een nieuwe collectie en bijbehorende groep maken. Vergeet niet om deze groep op te eisen als je de oorspronkelijke auteur bent. + + + NFT has been deposited. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 165 + + NFT is gestort. + + + See NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 169,170 + + Bekijk NFT + + + Terms & Conditions + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 85 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 107 + + Algemene Voorwaarden & Condities + + + Send NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 86 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 108 + + Stuur NFT + + + NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 147 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 172 + + NFT ontvangen. + + + Invalid NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 191 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 216 + + Ongeldige NFT ontvangen. + + + Invalid NFT refunded. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 205 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 230 + + Ongeldige NFT terugbetaald. + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 19 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 37 + + Voorvertoning + + + Sale Starts + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 57 + + + src/app/pages/nft/services/helper.service.ts + 142 + + Verkoop begint + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 60 + + + src/app/pages/nft/pages/nft/nft.page.html + 70 + + Huidige prijs + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 80 + + Auteur + + + System info + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 119 + + + src/app/pages/nft/pages/nft/nft.page.html + 634 + + Systeem info + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 130 + + + src/app/pages/nft/pages/nft/nft.page.html + 654 + + Het huidige adres is niet verbonden met een live mainnet. Zodra de functionaliteit wordt ondersteund op IOTA/Shimmer, krijg je de mogelijkheid met één klik deze NFT te migreren naar netwerk naar keuze. + + + Properties + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 135 + + + src/app/pages/nft/pages/new/single/single.page.html + 90 + + Eigenschappen + + + Stats + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 139 + + + src/app/pages/nft/pages/new/single/single.page.html + 193,192 + + Statistieken + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149 + + + src/app/pages/nft/pages/new/single/single.page.html + 301 + + + src/app/pages/nft/pages/nft/nft.page.html + 27 + + NFT afbeelding + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + IPFS Metadata + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + IPFS afbeelding + + + Available once minted... + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 64 + + + src/app/pages/nft/pages/nft/nft.page.ts + 81 + + Beschikbaar eenmaal gemint... + + + Set your floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 6,7 + + Stel je vloerprijs in + + + Available time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 42,43 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 42,43 + + Datum beschikbaar + + + NOW + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 54,55 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 54,55 + + NU + + + Select Date/Time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Selecteer datum/tijd + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 71 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 71 + + + src/app/pages/nft/pages/new/single/single.page.html + 69 + + Beschikbaar Vanaf is vereist. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 80 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 80 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 70 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 81 + + + src/app/pages/nft/pages/new/single/single.page.html + 68 + + + src/app/pages/nft/pages/new/single/single.page.html + 79 + + Beschikbaar vanaf + + + Auction length + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 91,92 + + Veiling lengte + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 98 + + Verschillende veilingslengtes komen bij een volgende sprint nadat de community heeft gestemd! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 115 + + Duur van de veiling is 3 dagen + + + Auction can't be canceled after start date + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 125 + + Veiling kan niet worden geannuleerd na begindatum + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 129 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 145 + + Zodra je aanbieding is voltooid, ontvang je een bevestigingsbericht. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 138,139 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 154,155 + + Aanbieding bevestigen + + + Set your price + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 6,7 + + Stel je prijs in + + + Sale type + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Verkooptype + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 103,104 + + Open verkoop + + + Specific member(s) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 113,114 + + Specifieke leden + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2 + + + src/app/pages/token/pages/trade/trade.page.html + 110 + + Handelsgeschiedenis + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 8,10 + + Item is van jou en alleen van jou + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 16 + + Dit maakt je item onbeschikbaar voor verkoop. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 17 + + Stop de verkoop! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 15 + + Item te koop aanbieden + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 80 + + Niet te koop + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 88 + + + src/app/pages/token/services/new.service.ts + 29 + + Vaste prijs + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 96 + + Veiling + + + Stake NFT + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 221 + + Stake NFT + + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 46,48 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 147,149 + + Jouw NFT wordt teruggestuurd naar jouw wallet met timelock. Houd er rekening mee dat je voldoende opslaginkomsten moet verstrekken voor timelock. Stel alleen de tag in op "soonaverse" in jouw wallet. + + + For how long you want to stake? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 56,57 + + + src/app/components/token/components/token-stake/token-stake.component.html + 174,175 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 57,58 + + Voor hoelang wil je staken? + + + Stake type? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 77,78 + + Stake type? + + + Confirm & Start Stake + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 118,119 + + Bevestigen & Start staken + + + NFT has been staked. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 207 + + NFT is gestaked. + + + See Collection + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 218,219 + + Bekijk collectie + + + Dynamic + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 76 + + Dynamisch + + + Static + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 80 + + Statisch + + + More + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 97,98 + + Meer + + + Pending + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 6,7 + + + src/app/pages/token/pages/token/token.page.html + 36 + + + src/app/pages/token/pages/trade/trade.page.html + 524 + + In behandeling + + + Rejected + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 12,13 + + + src/app/pages/token/pages/token/token.page.html + 42 + + Afgewezen + + + Commencing + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 18,19 + + Beginnen + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 24,25 + + In uitvoering + + + Completed + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 31,32 + + Voltooid + + + Share + + src/app/components/share/share.component.html + 16 + + + src/app/components/share/share.component.html + 39 + + + src/app/pages/token/pages/trade/trade.page.html + 64 + + + src/app/pages/token/pages/trade/trade.page.html + 635,634 + + Delen + + + Copy to clipboard + + src/app/components/share/share.component.html + 28 + + Kopieer naar klembord + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 4 + + + src/app/pages/award/pages/new/new.page.html + 121 + + + src/app/pages/proposal/pages/new/new.page.html + 211 + + Groep is vereist. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 13 + + Selecteer groep + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 83 + + + src/app/pages/award/pages/new/new.page.html + 152 + + + src/app/pages/proposal/pages/new/new.page.html + 242 + + Selecteer een groep + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 20 + + Alle groepen + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 19,20 + + Geregistreerd + + + members + + src/app/components/space/components/space-card/space-card.component.html + 44 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 23 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + leden + + + Space Claim + + src/app/components/space/components/space-claim/space-claim.component.html + 3 + + Groep opeisen + + + Confirm and generate address + + src/app/components/space/components/space-claim/space-claim.component.html + 54,55 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 52,53 + + + src/app/components/token/components/token-claim/token-claim.component.html + 138,139 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 96,97 + + + src/app/components/token/components/token-stake/token-stake.component.html + 251,252 + + Bevestig en genereer een adres + + + Claim complete. Congratulations. + + src/app/components/space/components/space-claim/space-claim.component.html + 160 + + + src/app/components/token/components/token-claim/token-claim.component.html + 281 + + Claim voltooid. Gefeliciteerd. + + + Close + + src/app/components/space/components/space-claim/space-claim.component.html + 172,173 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 181,182 + + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 29,30 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 79,80 + + + src/app/components/token/components/token-claim/token-claim.component.html + 293,294 + + + src/app/components/token/components/token-stake/token-stake.component.html + 378,379 + + Sluiten + + + Invalid amount or invalid senders address. Refunding transaction... + + src/app/components/space/components/space-claim/space-claim.component.ts + 183 + + Ongeldig bedrag of ongeldig afzender adres. Transactie wordt terugbetaald... + + + Funds refunded. + + src/app/components/space/components/space-claim/space-claim.component.ts + 222 + + Bedrag terugbetaald. + + + Space claim submitted. + + src/app/components/space/components/space-claim/space-claim.component.ts + 306 + + Groepsopeising ingediend. + + + Token Reward Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 16 + + Token Beloningsplan + + + Existing Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 29 + + Bestaande planning + + + Upload New + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 37 + + Nieuwe upload + + + Vault address: + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 55,64 + + Kluis adres: + + + Schedule a new Reward + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 82,83 + + Plan een nieuwe beloning + + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 93,95 + + Je kunt hier nieuwe staking beloningen inplannen. Upload hiervoor een .csv bestand met gebruikersadressen en toewijzingsgegevens. + + + Start Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 148 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 24 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 24 + + Start datum + + + End Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 149 + + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 19 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 25 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 25 + + Einddatum + + + Vesting Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 150 + + Vesting Datum + + + Tokens to Distribute + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 151 + + Tokens te distribueren + + + Status + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 152 + + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 110,109 + + + src/app/pages/token/pages/trade/trade.page.html + 376 + + Status + + + Proposal created to remove the reward. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 154 + + Voorstel aangemaakt om de beloning te verwijderen. + + + By checking this box, you agree with + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 12 + + Door dit vakje aan te vinken, ga je akkoord met + + + Terms and Conditions + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 13 + + Algemene voorwaarden + + + Timeline + + src/app/components/timeline/timeline.component.html + 2 + + + src/app/components/timeline/timeline.component.html + 8 + + Tijdslijn + + + Earned Badge + + src/app/components/timeline/timeline.component.html + 66 + + Verdiende Badge + + + with + + src/app/components/timeline/timeline.component.html + 66 + + met + + + Listed by + + src/app/components/timeline/timeline.component.html + 109 + + Aangeboden door + + + Made available for auction by + + src/app/components/timeline/timeline.component.html + 112 + + Beschikbaar voor veiling door + + + Purchased by + + src/app/components/timeline/timeline.component.html + 170 + + Gekocht door + + + See + + src/app/components/timeline/timeline.component.html + 181 + + Bekijk + + + Hide + + src/app/components/timeline/timeline.component.html + 182 + + Verbergen + + + Listed by space + + src/app/components/timeline/timeline.component.html + 287 + + Vermeld door groep + + + Refund blocked funds + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 3 + + Geblokkeerde fondsen terugbetalen + + + Total available tokens to refund + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 29 + + Totaal beschikbare tokens om terug te betalen + + + Refund complete. Congratulations. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 169 + + Terugbetaling voltooid. Gefeliciteerd. + + + Credit refund submitted. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 309 + + Creditterugbetaling is ingediend. + + + Airdrop tokens on the network + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 3 + + Airdrop tokens op het netwerk + + + Tokens to airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 56,57 + + Tokens om te airdroppen + + + Confirm & Start Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 86,87 + + Bevestig & Start Airdrop + + + Tokens to Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 120,121 + + Tokens om te airdroppen + + + Finish Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 239,240 + + Airdrop voltooien + + + Detail + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 60,61 + + Detail + + + Trade + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 70,71 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 201,202 + + Handel + + + Price (USD) + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 101 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 145 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 86 + + Prijs (USD) + + + 24h Change + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 126,127 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 115,116 + + 24u wijziging + + + 24h Volume + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 154 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 146 + + 24u volume + + + M. Cap + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 172 + + M. Cap + + + Open buy order + + src/app/components/token/components/token-bid/token-bid.component.html + 3 + + Open kooporder + + + Summary + + src/app/components/token/components/token-bid/token-bid.component.html + 29,30 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 39,40 + + + src/app/components/token/components/token-offer/token-offer.component.html + 46,47 + + Samenvatting + + + Token amount to buy + + src/app/components/token/components/token-bid/token-bid.component.html + 34,35 + + Aantal te kopen Tokens + + + Offered price per token + + src/app/components/token/components/token-bid/token-bid.component.html + 44,45 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 44,45 + + + src/app/components/token/components/token-offer/token-offer.component.html + 51,52 + + Aangeboden prijs per token + + + Token amount to send + + src/app/components/token/components/token-bid/token-bid.component.html + 73,74 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 117,118 + + Aantal te verzenden Tokens + + + ~ + + src/app/components/token/components/token-bid/token-bid.component.html + 89,98 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 60,69 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 90,99 + + + src/app/pages/token/pages/trade/trade.page.html + 553,556 + + ~ + + + I agree with + + src/app/components/token/components/token-bid/token-bid.component.html + 129 + + + src/app/components/token/components/token-claim/token-claim.component.html + 115 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 153 + + + src/app/components/token/components/token-offer/token-offer.component.html + 133 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 78 + + + src/app/components/token/components/token-refund/token-refund.component.html + 65 + + Ik ga akkoord met + + + Token terms and Conditions + + src/app/components/token/components/token-bid/token-bid.component.html + 131 + + + src/app/components/token/components/token-claim/token-claim.component.html + 117 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 155 + + + src/app/components/token/components/token-offer/token-offer.component.html + 135 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 80 + + + src/app/components/token/components/token-refund/token-refund.component.html + 67 + + Token voorwaarden en condities + + + and generate address + + src/app/components/token/components/token-bid/token-bid.component.html + 147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 171 + + + src/app/components/token/components/token-vote/token-vote.component.html + 182 + + en genereer adres + + + Once you agree with the terms, the generated address will remain active during the whole sale. + + src/app/components/token/components/token-bid/token-bid.component.html + 154,155 + + + src/app/components/token/components/token-claim/token-claim.component.html + 146,147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 178,179 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 103,104 + + Zodra je akkoord gaat met de voorwaarden, blijft het gegenereerde adres actief tijdens de hele verkoop. + + + Buy complete. Congratulations. + + src/app/components/token/components/token-bid/token-bid.component.html + 259 + + Aankoop voltooid. Gefeliciteerd. + + + Bid created. + + src/app/components/token/components/token-bid/token-bid.component.ts + 344 + + Bod aangemaakt. + + + Are you sure you want to cancel the sale? + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 17 + + Weet je zeker dat je de verkoop wilt annuleren? + + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 23,25 + + Zodra de verkoop is geannuleerd, worden alle investeerders automatisch en onmiddellijk terugbetaald. + + + Cancel sale + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 32,33 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 74,75 + + Annuleer verkoop + + + Canceled public sale. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts + 56 + + Openbare verkoop geannuleerd. + + + Total () + + src/app/components/token/components/token-cancel/token-cancel.component.html + 51,52 + + Totaal () + + + Are you sure you want to cancel your buy order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 66 + + Weet je zeker dat je jouw koop bod wilt annuleren? + + + Are you sure you want to cancel your sell order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 69 + + Weet je zeker dat je jouw verkoop bod wilt annuleren? + + + Confirm + + src/app/components/token/components/token-cancel/token-cancel.component.html + 76,77 + + Bevestigen + + + Cancelled. + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 48 + + + src/app/pages/token/pages/trade/trade.page.ts + 589 + + Geannuleerd. + + + Cancel your buy + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 80 + + Annuleer je bod + + + Cancel your sell + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 81 + + Annuleer je verkoop + + + Ongoing sale + + src/app/components/token/components/token-card/token-card.component.html + 22 + + Lopende verkoop + + + Sale ends soon + + src/app/components/token/components/token-card/token-card.component.html + 23 + + Verkoop eindigt binnenkort + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 24 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 21 + + Afkoeltijd loopt af + + + Sale starts + + src/app/components/token/components/token-card/token-card.component.html + 55,57 + + Verkoop begint + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 115,117 + + + src/app/components/token/components/token-card/token-card.component.html + 175,177 + + Verkoop eindigt + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 130 + + + src/app/components/token/components/token-card/token-card.component.html + 190 + + + src/app/components/token/components/token-card/token-card.component.html + 250 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 176 + + + src/app/components/token/components/token-row/token-row.component.html + 79 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 20 + + Verkoop eindigt + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 235,237 + + Afkoeltijd loopt af + + + Token Claim + + src/app/components/token/components/token-claim/token-claim.component.html + 3 + + Token Claim + + + Total available tokens to claim as of today + + src/app/components/token/components/token-claim/token-claim.component.html + 42 + + + src/app/components/token/components/token-claim/token-claim.component.html + 56 + + Totaal beschikbare tokens om vanaf vandaag op te eisen + + + Tokens available from + + src/app/components/token/components/token-claim/token-claim.component.html + 76 + + Tokens beschikbaar van + + + Total tokens to claim + + src/app/components/token/components/token-claim/token-claim.component.html + 84 + + Totaal te claimen tokens + + + Token claim submitted. + + src/app/components/token/components/token-claim/token-claim.component.ts + 320 + + Token claim ingediend. + + + Guardian's of the space will be able to decide where this token will be minted. + + src/app/components/token/components/token-info/token-info-description.component.html + 41 + + Bewaker van de groep zal kunnen beslissen waar deze token zal worden gemint. + + + Icon + + src/app/components/token/components/token-info/token-info-description.component.ts + 25 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 24 + + Icoon + + + Name + + src/app/components/token/components/token-info/token-info-description.component.ts + 26 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 25 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 31,30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 74 + + + src/app/pages/nft/pages/new/single/single.page.html + 21 + + + src/app/pages/nft/pages/new/single/single.page.html + 27,26 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 15 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 21,20 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 25 + + Naam + + + Symbol + + src/app/components/token/components/token-info/token-info-description.component.ts + 27 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 30 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 39,38 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 26 + + Symbool + + + Launchpad Price + + src/app/components/token/components/token-info/token-info-description.component.ts + 28 + + Launchpad Prijs + + + Network + + src/app/components/token/components/token-info/token-info-description.component.ts + 29 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 20 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 5,4 + + + src/app/pages/nft/pages/nft/nft.page.html + 542 + + + src/app/pages/nft/pages/nft/nft.page.html + 564 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 119 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 160 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 28 + + Netwerk + + + Total supply + + src/app/components/token/components/token-info/token-info-description.component.ts + 30 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 29 + + Totale voorraad + + + Current distribution + + src/app/components/token/components/token-info/token-info-description.component.ts + 31 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 30 + + Huidige distributie + + + Type + + src/app/components/token/components/token-info/token-info-description.component.ts + 32 + + + src/app/pages/member/pages/tokens/tokens.page.html + 58 + + + src/app/pages/member/pages/tokens/tokens.page.html + 325 + + + src/app/pages/member/pages/transactions/transactions.page.html + 24 + + + src/app/pages/nft/pages/nft/nft.page.html + 384 + + + src/app/pages/nft/pages/nft/nft.page.html + 434 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 31 + + + src/app/pages/token/pages/trade/trade.page.html + 361 + + Type + + + Coming soon + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 91,92 + + Binnenkort beschikbaar + + + In Cooldown + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 98,99 + + + src/app/components/token/components/token-row/token-row.component.html + 245,246 + + In afkoeltijd + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 108,109 + + + src/app/components/token/components/token-row/token-row.component.html + 256,257 + + + src/app/pages/token/pages/trade/trade.page.html + 456 + + + src/app/pages/token/pages/trade/trade.page.html + 467 + + + src/app/pages/token/pages/trade/trade.page.html + 909,910 + + Kopen + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 116 + + + src/app/pages/token/pages/trade/trade.page.html + 387 + + + src/app/pages/token/pages/trade/trade.page.html + 1210 + + Kopen + + + Sale starts + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 167 + + + src/app/components/token/components/token-row/token-row.component.html + 70 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 19 + + Verkoop begint + + + Cooldown period ends + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 187,188 + + + src/app/components/token/components/token-row/token-row.component.html + 90,91 + + Afkoeltijd eindigt + + + Mint token on network + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 3 + + Mint token op netwerk + + + Public sale will no longer be available after bringing token to a network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 45,46 + + Openbare verkoop zal niet langer beschikbaar zijn nadat de token naar een netwerk is gebracht. + + + Once minted all owners will have the option to migrate their tokens to the selected network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 56,58 + + Eenmaal gemint hebben alle eigenaren de optie om hun tokens te migreren naar het geselecteerde netwerk. + + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 68,70 + + Houd er rekening mee dat het eigenaarschap en alle niet-gedistribueerde tokens worden gestort op je eigen profiel. + + + Tokens to migrate + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 92,93 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 173,174 + + Tokens om te migreren + + + Locked public tokens + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 107,108 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 189,190 + + Vergrendelde openbare tokens + + + Open sale order + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 3 + + Open verkoop order + + + Token ID + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 30,31 + + + src/app/components/token/components/token-offer/token-offer.component.html + 27,28 + + Token ID + + + You will receive + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 74,75 + + + src/app/components/token/components/token-offer/token-offer.component.html + 73,74 + + + src/app/pages/token/pages/trade/trade.page.html + 1132,1133 + + Je zult ontvangen + + + Fee + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 103 + + + src/app/components/token/components/token-offer/token-offer.component.html + 101 + + + src/app/pages/token/pages/trade/trade.page.html + 1172 + + Fee + + + No FEES! + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 110,111 + + + src/app/components/token/components/token-offer/token-offer.component.html + 108,109 + + + src/app/pages/token/pages/trade/trade.page.html + 1188,1189 + + Geen FEES! + + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 232,234 + + + src/app/components/token/components/token-vote/token-vote.component.html + 249,251 + + Zorg ervoor dat de gift opslag opties in je Firefly wallet zijn aangevinkt bij het verzenden van tokens. + + + Sell complete. Congratulations. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 301 + + + src/app/components/token/components/token-vote/token-vote.component.html + 318 + + Verkoop voltooid. Gefeliciteerd. + + + Offer order created. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 346 + + Voorstel order gemaakt. + + + Open Token Sell + + src/app/components/token/components/token-offer/token-offer.component.html + 3 + + Open Token Verkoop + + + Your Balance + + src/app/components/token/components/token-offer/token-offer.component.html + 35,36 + + Jouw saldo + + + Offered amount of tokens + + src/app/components/token/components/token-offer/token-offer.component.html + 64,65 + + Aangeboden hoeveelheid tokens + + + Create a Sell Order + + src/app/components/token/components/token-offer/token-offer.component.html + 151,152 + + Maak een verkooporder aan + + + Offer created. + + src/app/components/token/components/token-offer/token-offer.component.ts + 102 + + Voorstel gemaakt. + + + Public sale info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 4 + + Openbare verkoop informatie + + + Start date is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 7 + + Startdatum is vereist. + + + Start date for the token offering + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 16 + + Startdatum voor het token aanbod + + + Offering length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 23 + + Aanbieding duur is vereist. + + + Select token offering length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 48 + + Selecteer duur van token aanbieding (standaard 2 dagen) + + + Token allocation info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 63 + + Token toewijzing info + + + Sale Setup + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 81 + + Verkoop instellingen + + + Enable Cooldown period + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 87,88 + + Afkoeltijd inschakelen + + + Enable Cooldown with refund option. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 98,99 + + Afkoeltijd inschakelen met teruggaveoptie. + + + Cooldown period length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 103 + + Afkoeltijd periode is vereist. + + + Select token cooldown length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 129 + + Selecteer duur van token afkoeltijd (standaard 2 dagen) + + + No Cooldown. Participants can’t refund. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 149,150 + + Geen afkoeltijd. Deelnemers kunnen niet terugbetaald krijgen. + + + Enable Oversale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 160,161 + + Oververkoop inschakelen + + + No Oversale. Sale ends with 100% reached. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 171,172 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 54,55 + + Geen oververkoop. Verkoop eindigt bij bereiken 100%. + + + Sale continues after 100% reached + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 179,180 + + Verkoop gaat door nadat 100% bereikt is + + + Confirm and schedule sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 195,196 + + Bevestig en plan de verkoop + + + Price per token + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 106 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 34 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 42 + + Prijs per token + + + Public sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 135 + + + src/app/pages/token/pages/new/summary/summary.component.html + 214 + + Openbare verkoop + + + Purchase token + + src/app/components/token/components/token-purchase/token-purchase.component.html + 3 + + Token kopen + + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 113 + + Voer het aantal tokens in dat je wilt kopen. Prijs in IOTA wordt berekend. + + + Enter how much you want to spend. Amount of tokens will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 116 + + Voer in hoeveel je wilt uitgeven. Het aantal tokens wordt berekend. + + + Purchased tokens + + src/app/components/token/components/token-purchase/token-purchase.component.html + 243,244 + + Aangeschafte tokens + + + Price + + src/app/components/token/components/token-purchase/token-purchase.component.html + 260,261 + + Prijs + + + Cooldown period ends + + src/app/components/token/components/token-refund/token-refund.component.html + 23 + + Afkoeltijd eindigt + + + Confirm and refund + + src/app/components/token/components/token-refund/token-refund.component.html + 82,83 + + Bevestig en betaal terug + + + Refund token + + src/app/components/token/components/token-refund/token-refund.component.ts + 61 + + Betaal token terug + + + Initial Price + + src/app/components/token/components/token-row/token-row.component.html + 39 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 27 + + Initiële prijs + + + Avg. Price + + src/app/components/token/components/token-row/token-row.component.html + 47 + + Gem. prijs + + + Change (24h) + + src/app/components/token/components/token-row/token-row.component.html + 107,108 + + Verandering (24u) + + + Volume 24h + + src/app/components/token/components/token-row/token-row.component.html + 150 + + Volume 24u + + + Market Cap + + src/app/components/token/components/token-row/token-row.component.html + 166 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 169 + + + src/app/pages/token/pages/trade/trade.page.html + 582 + + Marktkapitalisatie + + + Claim + + src/app/components/token/components/token-row/token-row.component.html + 210,211 + + Claimen + + + Refund + + src/app/components/token/components/token-row/token-row.component.html + 222,223 + + Terugbetaling + + + Launching soon + + src/app/components/token/components/token-row/token-row.component.html + 238,239 + + Komt binnenkort + + + Buy / Sell + + src/app/components/token/components/token-row/token-row.component.html + 259,260 + + Kopen / Verkopen + + + Stake your token + + src/app/components/token/components/token-stake/token-stake.component.html + 3 + + Stake je tokens + + + Select or define the amount you want to stake and the period for how long you want to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 13,15 + + Selecteer of definieer de hoeveelheid die je wilt inzetten en de periode voor hoe lang je het wilt vergrendelen. + + + Since you are a guardian you can also + + src/app/components/token/components/token-stake/token-stake.component.html + 17 + + Aangezien je een beschermer bent, kan je ook + + + - Choose an amount and for how long you’d like to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 50 + + - Kies een aantal en voor hoe lang je het wilt vergrendelen. + + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + src/app/components/token/components/token-stake/token-stake.component.html + 52,54 + + - Jouw funds blijven in je wallet, maar je kunt ze niet gebruiken tijdens de staking periode. + + + - You will get staked points based on your input. + + src/app/components/token/components/token-stake/token-stake.component.html + 56,57 + + - Je krijgt staking punten op basis van je input. + + + See Staking reward page for more info + + src/app/components/token/components/token-stake/token-stake.component.html + 62 + + Bekijk de Staking beloningspagina voor meer info + + + here. + + src/app/components/token/components/token-stake/token-stake.component.html + 63 + + hier. + + + How it works + + src/app/components/token/components/token-stake/token-stake.component.html + 71 + + Hoe het werkt + + + How much you want to stake? + + src/app/components/token/components/token-stake/token-stake.component.html + 87,88 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 21,22 + + Hoeveel wil je staken? + + + Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 192 + + Beloningen Vermenigvuldiger + + + Staking Value + + src/app/components/token/components/token-stake/token-stake.component.html + 210,219 + + Staking Waarde + + + Staked amount * Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 216 + + + src/app/pages/member/pages/activity/activity.page.html + 36 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 107 + + Staked aantal * Beloningen Vermenigvuldiger + + + You will earn + + src/app/components/token/components/token-stake/token-stake.component.html + 230 + + Je zult verdienen + + + Stake complete. Congratulations. + + src/app/components/token/components/token-stake/token-stake.component.html + 366 + + Stake compleet. Gefeliciteerd. + + + Token stake submitted. + + src/app/components/token/components/token-stake/token-stake.component.ts + 410 + + Token stake ingediend. + + + Trade details + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 3 + + Handelsdetails + + + Traded amount + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 29,30 + + Verhandelde hoeveelheid + + + Price per token + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 48,49 + + + src/app/pages/token/pages/new/summary/summary.component.html + 69,70 + + Prijs per token + + + Date and Time + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 79,80 + + Datum en tijd + + + Fullfilled + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 94,95 + + Voldaan + + + Date + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 109 + + + src/app/pages/member/pages/transactions/transactions.page.html + 22 + + + src/app/pages/nft/pages/nft/nft.page.html + 383 + + + src/app/pages/nft/pages/nft/nft.page.html + 433 + + + src/app/pages/proposal/pages/votes/votes.page.html + 15 + + + src/app/pages/token/pages/trade/trade.page.html + 198 + + + src/app/pages/token/pages/trade/trade.page.html + 272 + + + src/app/pages/token/pages/trade/trade.page.html + 360 + + Datum + + + State + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 111 + + Status + + + Storage deposit fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 144 + + Opslag stortingskosten + + + Fullfilment + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 171 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 252 + + Vervulling + + + Seller + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 176 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 247 + + Verkoper + + + Transaction + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 204 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 280 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 314 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 358 + + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 41 + + + src/app/pages/member/pages/transactions/transactions.page.html + 74 + + Transactie + + + Non Transferable + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 153 + + + src/app/pages/member/pages/transactions/transactions.page.html + 77 + + Niet overdraagbaar + + + Processing... + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 155 + + + src/app/pages/member/pages/transactions/transactions.page.html + 87 + + In behandeling... + + + Soonaverse Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 170 + + Soonaverse vergoeding + + + Exchange Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 172 + + Exchange vergoeding + + + 24h change/Price + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 46 + + 24u verandering/Prijs + + + Markets + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 6 + + + src/app/pages/token/pages/trade/trade.page.html + 1242 + + Markten + + + No Tokens + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 38,39 + + + src/app/pages/tokens/pages/favourites/favourites.page.html + 25,26 + + Geen tokens + + + Cast Vote + + src/app/components/token/components/token-vote/token-vote.component.html + 3 + + Breng stem uit + + + Question + + src/app/components/token/components/token-vote/token-vote.component.html + 16,17 + + Vraag + + + Selected option + + src/app/components/token/components/token-vote/token-vote.component.html + 23,24 + + Geselecteerde optie + + + How do you set your votes? + + src/app/components/token/components/token-vote/token-vote.component.html + 33,34 + + Hoe stel je je stemmen in? + + + Total native tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 88,89 + + Totaal native tokens + + + Total staked tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 105,106 + + Totaal gestaakte tokens + + + Voting is active on + + src/app/components/token/components/token-vote/token-vote.component.html + 119,120 + + Stemmen is actief op + + + Your total voting weight + + src/app/components/token/components/token-vote/token-vote.component.html + 131,132 + + Je totale stemgewicht + + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + src/app/components/token/components/token-vote/token-vote.component.html + 151,153 + + Besef dat gestaakte tokens enkel voor stemmen gebruikt kunnen worden. Jouw stemgewicht wordt verdeeld als je gestaakte tokens voor andere voorstellen gebruikt. + + + Cast Votes + + src/app/components/token/components/token-vote/token-vote.component.html + 193 + + Stemmen + + + Send Native Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 124 + + Verstuur native tokens + + + Use Staked Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 128 + + Gebruik gestaakte tokens + + + Vote received. + + src/app/components/token/components/token-vote/token-vote.component.ts + 191 + + Stem ontvangen. + + + Transaction confirmed and funds refunded. + + src/app/components/token/components/token-vote/token-vote.component.ts + 217 + + Transactie bevestigd en saldo terugbetaald. + + + Token vote executed. + + src/app/components/token/components/token-vote/token-vote.component.ts + 375 + + Token stem uitgevoerd. + + + Token vote order created. + + src/app/components/token/components/token-vote/token-vote.component.ts + 392 + + Token stemorder gemaakt. + + + Type + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 13,14 + + Type + + + Date + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 22,23 + + Datum + + + Manage addresses + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 3 + + Beheer adressen + + + Not yet verified + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 59 + + Nog niet geverifieerd + + + Change + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 66 + + Wijzigen + + + Verify + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 67 + + Verifiëren + + + You will be asked to send funds to the new + + src/app/components/wallet-address/verify-address/verify-address.component.html + 33 + + Je wordt gevraagd om tegoeden te sturen naar de nieuwe + + + address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/verify-address/verify-address.component.html + 36,37 + + adres voor het verificatieproces. Het adres waarvandaan je tegoeden verzendt wordt gekoppeld aan jouw + + + space + + src/app/components/wallet-address/verify-address/verify-address.component.html + 41 + + groep + + + profile + + src/app/components/wallet-address/verify-address/verify-address.component.html + 43 + + profiel + + + for future transactions. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 44 + + voor toekomstige transacties. + + + Generate new address + + src/app/components/wallet-address/verify-address/verify-address.component.html + 55,56 + + Genereer nieuw adres + + + Send a small + + src/app/components/wallet-address/verify-address/verify-address.component.html + 66 + + Verstuur een klein + + + amount to validate your address. This expires in + + src/app/components/wallet-address/verify-address/verify-address.component.html + 67 + + aantal om jouw adres te valideren. Dit verloopt in + + + Expired. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 70 + + Verlopen. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/verify-address/verify-address.component.html + 106,107 + + Wacht tot de transactie is gevalideerd. We zullen je transactie terugsturen zodra deze is voltooid + + + Validating address... + + src/app/components/wallet-address/verify-address/verify-address.component.html + 136 + + Adres valideren... + + + Now you can deal with NFTs and participate in token trading. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 174 + + Je kunt nu handelen met NFT's en deelnemen aan token handelen. + + + Your new address has been verified! + + src/app/components/wallet-address/verify-address/verify-address.component.html + 176 + + Je nieuwe adres is geverifieerd! + + + Finish Verification + + src/app/components/wallet-address/verify-address/verify-address.component.html + 181,182 + + Verificatie voltooien + + + Generate address + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 76 + + Genereer adres + + + Refunding your payment... + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 192 + + Je betaling wordt terugbetaald... + + + Address is not verified + + src/app/components/wallet-address/wallet-address.component.html + 4 + + Adres is niet geverifieerd + + + wallet + + src/app/components/wallet-address/wallet-address.component.html + 25 + + wallet + + + Copy address + + src/app/components/wallet-address/wallet-address.component.html + 30 + + Kopiëer adres + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + Verifieer je + + + address + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + adres + + + This network is currently not enabled. + + src/app/components/wallet-address/wallet-address.component.ts + 82 + + Dit netwerk is momenteel niet actief. + + + Award Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Award info + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 20 + + Eigenaar + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 18 + + Badges gebruikt / beschikbaar + + + Badge lock period + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 20 + + Badge vergrendelingsperiode + + + Award info + + src/app/pages/award/pages/award/award.page.html + 3 + + + src/app/pages/award/pages/new/new.page.html + 17 + + Award info + + + Minted on: + + src/app/pages/award/pages/award/award.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 47 + + Gemint op: + + + Fund Award + + src/app/pages/award/pages/award/award.page.html + 121,122 + + Award financieren + + + Minting in Progress + + src/app/pages/award/pages/award/award.page.html + 129,130 + + Minting is bezig + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 136 + + + src/app/pages/award/pages/award/award.page.html + 210 + + Bekijk award + + + Reject Award + + src/app/pages/award/pages/award/award.page.html + 157 + + Weiger Award + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 166 + + Bevestig je deelname + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 174,176 + + De verdere communicatie wordt nu buiten het platform gedaan, laat de award maker weten hoe hij contact met je kan opnemen. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 180 + + Geef een beschrijving of link naar jouw werk. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 188 + + Indienen + + + Cancel + + src/app/pages/award/pages/award/award.page.html + 189 + + + src/app/pages/token/pages/trade/trade.page.html + 245 + + + src/app/pages/token/pages/trade/trade.page.html + 333 + + Annuleren + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 41 + + + src/app/pages/token/pages/new/new.page.ts + 34 + + + src/app/pages/token/pages/token/token.page.ts + 36 + + Overzicht + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 105 + + Deelnemers + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2 + + Nieuwe Award + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14 + + + src/app/pages/award/pages/new/new.page.html + 77 + + + src/app/pages/proposal/pages/new/new.page.html + 24 + + Titel is vereist. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19 + + Titel en beschrijving worden opgenomen in de Award. Einddatum bepaalt de duur van de Award. + + + Title + + src/app/pages/award/pages/new/new.page.html + 23 + + + src/app/pages/award/pages/new/new.page.html + 29,28 + + + src/app/pages/award/pages/new/new.page.html + 76 + + + src/app/pages/award/pages/new/new.page.html + 83,82 + + + src/app/pages/proposal/pages/new/new.page.html + 23 + + + src/app/pages/proposal/pages/new/new.page.html + 29,28 + + + src/app/pages/proposal/pages/new/new.page.html + 103 + + + src/app/pages/proposal/pages/new/new.page.html + 109,108 + + + src/app/pages/proposal/pages/new/new.page.html + 156 + + + src/app/pages/proposal/pages/new/new.page.html + 162,161 + + + src/app/pages/space/pages/upsert/upsert.page.html + 24 + + + src/app/pages/space/pages/upsert/upsert.page.html + 30,29 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 106 + + + src/app/pages/token/pages/new/overview/overview.component.html + 22 + + + src/app/pages/token/pages/new/overview/overview.component.html + 29,28 + + + src/app/pages/token/pages/new/overview/overview.component.html + 65 + + + src/app/pages/token/pages/new/overview/overview.component.html + 72,71 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 9 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 16,15 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 55 + + Titel + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 24 + + Je moet een naam opgeven. + + + End + + src/app/pages/award/pages/new/new.page.html + 36 + + + src/app/pages/award/pages/new/new.page.html + 47,46 + + + src/app/pages/proposal/pages/new/new.page.html + 56 + + + src/app/pages/proposal/pages/new/new.page.html + 68,67 + + Einde + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 37 + + + src/app/pages/proposal/pages/new/new.page.html + 57 + + Einddatum vereist. + + + Description + + src/app/pages/award/pages/new/new.page.html + 52 + + + src/app/pages/award/pages/new/new.page.html + 58 + + + src/app/pages/award/pages/new/new.page.html + 91 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 40 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 45 + + + src/app/pages/nft/pages/new/single/single.page.html + 33 + + + src/app/pages/nft/pages/new/single/single.page.html + 38 + + + src/app/pages/proposal/pages/new/new.page.html + 76 + + + src/app/pages/proposal/pages/new/new.page.html + 82 + + + src/app/pages/proposal/pages/new/new.page.html + 119 + + + src/app/pages/proposal/pages/new/new.page.html + 124 + + + src/app/pages/proposal/pages/new/new.page.html + 171 + + + src/app/pages/proposal/pages/new/new.page.html + 176 + + + src/app/pages/space/pages/upsert/upsert.page.html + 36 + + + src/app/pages/space/pages/upsert/upsert.page.html + 41 + + + src/app/pages/token/pages/new/overview/overview.component.html + 37 + + + src/app/pages/token/pages/new/overview/overview.component.html + 43 + + + src/app/pages/token/pages/new/overview/overview.component.html + 80 + + + src/app/pages/token/pages/new/overview/overview.component.html + 86 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 21 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 67 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 21 + + Beschrijving + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 69 + + Badge definitie + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 71 + + Titel en beschrijving zullen op de badge worden opgenomen. + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 97 + + Badge beschrijving + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 115 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 369 + + + src/app/pages/proposal/pages/new/new.page.html + 205 + + Informatie over Groep + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 117 + + Dit is de Groep die de award zal vermelden. + + + Reward info + + src/app/pages/award/pages/new/new.page.html + 170 + + Belonings informatie + + + You need to fund this award with native token. Select which token will be used as reward. + + src/app/pages/award/pages/new/new.page.html + 172 + + Je moet deze award financieren met native tokens. Selecteer welke token zal worden gebruikt als beloning. + + + Token is required. + + src/app/pages/award/pages/new/new.page.html + 176 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 247 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + Token is vereist. + + + Select a token + + src/app/pages/award/pages/new/new.page.html + 207 + + Selecteer een token + + + Defines the amount of tokens for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 222,223 + + Definieert de hoeveelheid tokens voor elke badge en het aantal beschikbare badges. + + + Invalid token amount per badge + + src/app/pages/award/pages/new/new.page.html + 226 + + Ongeldig tokenaantal per badge + + + Tokens per badge + + src/app/pages/award/pages/new/new.page.html + 234 + + Tokens per badge + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 251 + + + src/app/pages/award/pages/new/new.page.html + 338 + + Minimaal 1 en maximaal 10000. + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 273 + + Het aantal badges dat je beschikbaar wilt maken voor deze award. Dit kan ook worden beschouwd als hoeveel awards je wilt uitgeven. + + + Total to be funded + + src/app/pages/award/pages/new/new.page.html + 284,285 + + Totaal te financieren + + + Upload image that will be used as a Reward Badge. + + src/app/pages/award/pages/new/new.page.html + 299 + + Upload afbeelding die zal worden gebruikt als BeloningsBadge. + + + Badge is required. + + src/app/pages/award/pages/new/new.page.html + 328,329 + + Badge is vereist. + + + Set the duration for which the badge will be locked in the Firefly wallet. + + src/app/pages/award/pages/new/new.page.html + 334,335 + + Stel de duur in waarvoor de badge vergrendeld zal worden in de Firefly wallet. + + + Create award + + src/app/pages/award/pages/new/new.page.html + 369,370 + + Creëer award + + + Award - New + + src/app/pages/award/pages/new/new.page.ts + 119 + + + src/app/pages/award/pages/new/new.page.ts + 134 + + Beloning - Nieuw + + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/award/pages/new/new.page.ts + 120 + + + src/app/pages/award/pages/new/new.page.ts + 135 + + Creëer engagement en groei voor je DAO's en digitale gemeenschappen. Awards, feeless stemmen, 1-klik setup. Word vandaag lid. + + + Member seems to log out during the file upload request. + + src/app/pages/award/pages/new/new.page.ts + 184 + + + src/app/pages/collection/pages/upsert/upsert.page.ts + 403 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 240 + + + src/app/pages/nft/pages/new/single/single.page.ts + 180 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 131 + + + src/app/pages/token/services/new.service.ts + 202 + + Lid lijkt uit te loggen tijdens het uploaden van bestanden. + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2 + + Award beschrijving + + + Award - + + src/app/pages/award/pages/overview/overview.page.ts + 17 + + + src/app/pages/award/pages/participants/participants.page.ts + 83 + + Award - + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 49 + + + src/app/pages/award/pages/participants/participants.page.html + 63 + + + src/app/pages/proposal/pages/participants/participants.page.html + 49 + + + src/app/pages/proposal/pages/participants/participants.page.html + 63 + + Zoek deelnemer + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 72 + + + src/app/pages/proposal/pages/participants/participants.page.html + 72 + + + src/app/pages/space/pages/members/members.page.html + 92 + + Alleen een aantal top records weergegeven... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 90,91 + + + src/app/pages/proposal/pages/participants/participants.page.html + 90,91 + + Geen deelnemers + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 118,119 + + Beloning + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 138,139 + + Opnieuw belonen + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 50 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 158 + + + src/app/pages/space/pages/awards/awards.page.ts + 30 + + + src/app/pages/space/pages/collections/collections.page.ts + 30 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 30 + + In behandeling + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 51 + + Uitgegeven + + + See all participants within the award. + + src/app/pages/award/pages/participants/participants.page.ts + 84 + + + src/app/pages/proposal/pages/overview/overview.page.ts + 60 + + Bekijk alle deelnemers binnen de award. + + + applied on + + src/app/pages/award/pages/participants/participants.page.ts + 257 + + toegepast op + + + Make NFT’s from this collection available on decentralised network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 12,13 + + Maak NFT's van deze collectie beschikbaar op gedecentraliseerd netwerk. + + + Minting + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 29 + + Minting + + + NFTs left + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 32 + + NFT's over + + + Collection is not yet migrated to the decentralized network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 47,48 + + Collectie is nog niet gemigreerd naar het gedecentraliseerde netwerk. + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 611 + + Wie kan kopen? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 63,64 + + Open verkoop + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 76,77 + + Alleen voor Groepsleden + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89,90 + + Alleen Groepsbewakers + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 102,103 + + Alleen voor Groepsleden met Badge + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 118,119 + + Moet ten minste één NFT hebben van elke geselecteerde collectie + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 126,127 + + (Eén NFT per lid) + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 175 + + Ledenkortingen + + + discount for members with rewards from this space in total value of + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 190 + + korting voor leden met beloningen uit deze groep met een totale waarde van + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 5 + + Over deze collectie + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 22,23 + + Beperkte oplage + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 81,82 + + + src/app/pages/collection/pages/collection/collection.page.html + 301,302 + + Collectie publiceren + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 93,94 + + + src/app/pages/collection/pages/collection/collection.page.html + 313,314 + + Collectie bewerken + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Royalties gaan naar + + + Rank + + src/app/pages/collection/pages/collection/collection.page.html + 170,171 + + + src/app/pages/token/pages/token/token.page.html + 73,74 + + Rang + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 189 + + Begint om + + + Deposited + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + Gestort + + + Staked + + src/app/pages/collection/pages/collection/collection.page.html + 218 + + Gestaked + + + Links + + src/app/pages/collection/pages/collection/collection.page.html + 227 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 154,153 + + + src/app/pages/token/pages/new/overview/overview.component.html + 160,159 + + + src/app/pages/token/pages/new/summary/summary.component.html + 307,306 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 79 + + Links + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 330 + + + src/app/pages/collection/pages/collection/collection.page.html + 376 + + Collectie afwijzen + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 346 + + + src/app/pages/collection/pages/collection/collection.page.html + 392 + + Collectie annuleren + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 413 + + + src/app/pages/nft/pages/new/new.page.html + 2 + + Maak NFT + + + Rank amount must be between + + src/app/pages/collection/pages/collection/collection.page.ts + 285 + + + src/app/pages/token/pages/token/token.page.ts + 195 + + Rang bedrag moet liggen tussen + + + records + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 13 + + + src/app/pages/discover/pages/awards/awards.page.html + 13 + + + src/app/pages/discover/pages/members/members.page.html + 13 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 13 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 13 + + + src/app/pages/market/pages/collections/collections.page.html + 13 + + + src/app/pages/member/pages/nfts/nfts.page.html + 13 + + records + + + Filters&Sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 30 + + + src/app/pages/discover/pages/awards/awards.page.html + 30 + + + src/app/pages/discover/pages/members/members.page.html + 30 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 30 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 30 + + + src/app/pages/market/pages/collections/collections.page.html + 30 + + Filters&Sorteren + + + Filters&sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 71 + + + src/app/pages/discover/pages/awards/awards.page.html + 78 + + + src/app/pages/discover/pages/members/members.page.html + 78 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 78 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 79 + + + src/app/pages/market/pages/collections/collections.page.html + 79 + + Filters&sorteren + + + Sort by + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 93,92 + + + src/app/pages/discover/pages/awards/awards.page.html + 94,93 + + + src/app/pages/discover/pages/members/members.page.html + 94,93 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 94,93 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 95,94 + + + src/app/pages/market/pages/collections/collections.page.html + 95,94 + + Sorteren op + + + Price range + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 131 + + Prijs range + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2 + + Maak nieuwe collectie + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3 + + Bewerk collectie + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18 + + Collectie informatie + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20 + + Naam en beschrijving zullen worden opgenomen in de Collectie. + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 58 + + + src/app/pages/nft/pages/new/single/single.page.html + 51 + + Verkoop informatie + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 60 + + Alle tijden worden weergegeven in de tijdzone van de gebruiker. Voor gegenereerde NFT en SFT wordt de prijs hier ingesteld en kan niet worden gewijzigd op de NFT. De prijs voor een klassieke NFT-collectie is enkel indicatief en kan gewijzigd worden op de NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 90 + + Royalties + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 93,95 + + Dit royalties % zal worden toegepast op de eerste mint van de NFT's en alle secundaire verkopen. Het IOTA-adres dat de royalties zal ontvangen, moet altijd een minimumsaldo van 1 Mi hebben, vanwege het mechanisme voor de bescherming van dust van het IOTA-protocol. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 106 + + Royalties - Percentage vergoeding + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 116 + + Voorbeeld: 10 % , 20 % , etc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 124 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 131 + + Royalties gaan naar een andere groep + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 155 + + Links worden opgenomen in het NFT detail. Gebruik gebruikersnamen voor Twitter en Discord (naam#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 160 + + Ongeldige URL. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 167,166 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 312,311 + + + src/app/pages/token/pages/new/overview/overview.component.html + 175,174 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 91,90 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 183 + + Link naar je Twitter-account + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + Ongeldige Discord gebruikersnaam. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 200 + + Link naar je Discord account + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 215 + + Kortingen + + + The discount applies only to members who have earned tokens from awards issued by this space. + + src/app/pages/collection/pages/upsert/upsert.page.html + 217 + + De korting geldt alleen voor leden die tokens hebben verdiend van awards uitgegeven door deze groep. + + + Token amount higher than + + src/app/pages/collection/pages/upsert/upsert.page.html + 231 + + Token aantal hoger dan + + + Type awarded token... + + src/app/pages/collection/pages/upsert/upsert.page.html + 257 + + Type toegekende token... + + + Discount % + + src/app/pages/collection/pages/upsert/upsert.page.html + 271 + + Korting % + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 299 + + Korting + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 310 + + XP korting + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 330,331 + + Hoeveelheid korting + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 356 + + Voeg kortingsniveau toe + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 371 + + Dit is de groep die de NFT-collectie zal minten. Alleen groepen met geverifieerde wallets worden weergegeven in de lijst. Zorg ervoor dat je de juiste groep kiest, omdat alle opbrengsten van de NFT-verkoop naar de geverifieerde wallet van deze ruimte zullen gaan. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 389 + + Collectie type + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 391 + + Elk type heeft verschillende kenmerken. Dit kan niet worden gewijzigd na het aanmaken. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 423,422 + + + src/app/pages/space/pages/upsert/upsert.page.html + 200 + + Banner + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + Banner is vereist. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 463 + + Plaatshouder + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 493,494 + + Plaatshouder is vereist. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 503 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 516 + + + src/app/pages/market/pages/collections/collections.page.html + 177 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138 + + Categorie + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 505 + + Categorie wordt gebruikt bij het filteren van content. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 509 + + Categorie. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 534 + + Collectie opzetten + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 536 + + Wie heeft toegang tot een bepaalde verzameling. + + + Open Sale + + src/app/pages/collection/pages/upsert/upsert.page.html + 545 + + Open verkoop + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 551 + + Iedereen heeft toegang tot deze verzameling. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 563 + + Alleen Groepsbewakers kunnen toegang krijgen. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 576 + + Alleen Groepsleden kunnen toegang krijgen. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 589 + + Alleen Groepsleden met badge kunnen toegang krijgen. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 607 + + Collectie opties + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 625 + + Slechts één NFT per lid + + + Select collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 650 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 147 + + + src/app/pages/nft/pages/new/single/single.page.html + 361 + + Selecteer collectie + + + Select award + + src/app/pages/collection/pages/upsert/upsert.page.html + 669 + + Kies award + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 691,692 + + Collectie aanmaken + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 704,705 + + Collectie opslaan + + + Check out collection + + src/app/pages/collection/services/helper.service.ts + 68 + + Bekijk collectie + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 5 + + Aanvragen voor lidmaatschap in behandeling + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 16 + + Jouw groepen + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 32,33 + + Nog geen groepen + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 41,42 + + Ontdek Groepen + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 56 + + Actieve awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 68 + + Actieve voorstellen + + + Spaces + + src/app/pages/discover/pages/awards/awards.page.html + 115,114 + + + src/app/pages/discover/pages/discover/discover.page.ts + 9 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 115,114 + + + src/app/pages/market/pages/collections/collections.page.html + 146,145 + + + src/app/pages/member/pages/member/member.page.ts + 65 + + Groepen + + + Discover - Awards + + src/app/pages/discover/pages/awards/awards.page.ts + 58 + + Ontdek - Awards + + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/discover/pages/awards/awards.page.ts + 59 + + Ontdek de beste benadering van DAO gemeenschap engagement en groei. Awards, feeless stemmen, 1-klik setup. Word vandaag lid. + + + Awards + + src/app/pages/discover/pages/discover/discover.page.ts + 10 + + + src/app/pages/member/pages/member/member.page.ts + 64 + + + src/app/pages/space/pages/space/space.page.ts + 47 + + Awards + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 11 + + + src/app/pages/space/pages/space/space.page.ts + 46 + + Voorstellen + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 12 + + + src/app/pages/space/pages/space/space.page.ts + 48 + + Leden + + + Discover - Members + + src/app/pages/discover/pages/members/members.page.ts + 51 + + Ontdek - Leden + + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + src/app/pages/discover/pages/members/members.page.ts + 52 + + Wees onderdeel van de levendigste en snelst groeiende gemeenschappen in crypto. Gebruik metamask om binnen enkele seconden mee te doen. + + + Discover - Proposals + + src/app/pages/discover/pages/proposals/proposals.page.ts + 57 + + Ontdek - Voorstellen + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + src/app/pages/discover/pages/proposals/proposals.page.ts + 58 + + Creëer en stem op voorstellen die helpen de toekomst van de DAO's en de metaverse vorm te geven. Slechts 1 klik setup. Word vandaag lid. + + + Discover - Spaces + + src/app/pages/discover/pages/spaces/spaces.page.ts + 54 + + Ontdek - Groepen + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/discover/pages/spaces/spaces.page.ts + 55 + + Meld je in enkele minuten aan met onze 1-klik DAO-on-demand setup. Feeless onchain stemmen. Ontdek alle geweldige DAO's op de Soonaverse. + + + Sale type + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Verkooptype + + + Collections - NFT + + src/app/pages/market/pages/collections/collections.page.ts + 68 + + Collecties - NFT + + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + src/app/pages/market/pages/collections/collections.page.ts + 69 + + Een volledige feeless markt voor Niet-Financierbare Tokens (NFT's), digitale verzamelobjecten, digitale kunst, eigendomsrechten en meer. + + + NFT Collections + + src/app/pages/market/pages/market/market.page.html + 2 + + NFT collecties + + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/market/pages/market/market.page.html + 11,13 + + Sommige tokens worden mogelijk nog niet gemigreerd naar het gedecentraliseerde netwerk. Zorg ervoor dat je weet wat je koopt. + + + I understand + + src/app/pages/market/pages/market/market.page.html + 22,23 + + + src/app/pages/member/pages/tokens/tokens.page.html + 43,44 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 22,23 + + Ik begrijp het + + + Collections + + src/app/pages/market/pages/market/market.page.ts + 12 + + + src/app/pages/market/pages/market/market.page.ts + 33 + + + src/app/pages/space/pages/space/space.page.ts + 45 + + Collecties + + + Total staked + + src/app/pages/member/pages/activity/activity.page.html + 17,18 + + Totaal gestaked + + + Staking Value: + + src/app/pages/member/pages/activity/activity.page.html + 29,39 + + Staking Waarde: + + + Claimable Reward + + src/app/pages/member/pages/activity/activity.page.html + 47,48 + + Claimbare beloning + + + Stake more + + src/app/pages/member/pages/activity/activity.page.html + 104,105 + + Stake meer + + + Stake + + src/app/pages/member/pages/activity/activity.page.html + 107,108 + + Stake + + + My Staking + + src/app/pages/member/pages/activity/activity.page.html + 133 + + Mijn staken + + + until + + src/app/pages/member/pages/activity/activity.page.html + 138 + + tot + + + My Favourites + + src/app/pages/member/pages/activity/activity.page.html + 152 + + Mijn Favorieten + + + View All + + src/app/pages/member/pages/activity/activity.page.html + 155 + + Bekijk alles + + + Profile Options + + src/app/pages/member/pages/activity/activity.page.html + 172 + + Profiel opties + + + Edit Profile + + src/app/pages/member/pages/activity/activity.page.html + 185 + + Profiel bewerken + + + Manage Addresses + + src/app/pages/member/pages/activity/activity.page.html + 191 + + + src/app/pages/space/pages/manage/manage.page.html + 27 + + Beheer adressen + + + Export All Transactions + + src/app/pages/member/pages/activity/activity.page.html + 202 + + Exporteer alle transacties + + + Request Verification + + src/app/pages/member/pages/activity/activity.page.html + 227 + + + src/app/pages/space/pages/manage/manage.page.html + 85 + + Verzoek om verificatie + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + In behandeling + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 18,19 + + Uitgegeven + + + No Awards + + src/app/pages/member/pages/awards/awards.page.html + 34,35 + + + src/app/pages/space/pages/awards/awards.page.html + 63,64 + + Geen awards + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 44,45 + + Ontdek Awards + + + Reputation + + src/app/pages/member/pages/badges/badges.page.html + 2 + + + src/app/pages/member/pages/member/member.page.ts + 63 + + Reputatie + + + Spaces + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Groepen + + + Awards + + src/app/pages/member/pages/badges/badges.page.html + 27,28 + + Awards + + + Total Rewards + + src/app/pages/member/pages/badges/badges.page.html + 33,34 + + Totale beloningen + + + My profile + + src/app/pages/member/pages/member/member.page.html + 13 + + Mijn profiel + + + Profile + + src/app/pages/member/pages/member/member.page.html + 15 + + Profiel + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 27,28 + + Profielinfo + + + Joined + + src/app/pages/member/pages/member/member.page.html + 49 + + Aangesloten + + + Member - + + src/app/pages/member/pages/member/member.page.ts + 83 + + Lid - + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 145 + + Activiteit + + + Transactions + + src/app/pages/member/pages/member/member.page.ts + 147 + + + src/app/pages/member/pages/transactions/transactions.page.html + 18 + + Transacties + + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + src/app/pages/member/pages/nfts/nfts.page.html + 25,26 + + Breng NFT van een ander netwerk naar Soonaverse en ontgrendel de handelsopties. + + + Deposit NFT + + src/app/pages/member/pages/nfts/nfts.page.html + 29,30 + + Stort NFT + + + No NFTs + + src/app/pages/member/pages/nfts/nfts.page.html + 59,60 + + + src/app/pages/nft/pages/nft/nft.page.html + 744,745 + + Geen NFT's + + + Tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 11,12 + + Tokens + + + Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 20,21 + + Staken + + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + src/app/pages/member/pages/tokens/tokens.page.html + 32,34 + + Hier vind je alleen tokens die je kunt claimen of die niet gemined zijn. Minted tokens verschijnen altijd in je geassocieerde Firefly of TanglePay wallet. + + + Item + + src/app/pages/member/pages/tokens/tokens.page.html + 57 + + + src/app/pages/member/pages/tokens/tokens.page.html + 324 + + + src/app/pages/member/pages/transactions/transactions.page.html + 23 + + Item + + + Total + + src/app/pages/member/pages/tokens/tokens.page.html + 59 + + + src/app/pages/token/pages/trade/trade.page.html + 204 + + + src/app/pages/token/pages/trade/trade.page.html + 278 + + + src/app/pages/token/pages/trade/trade.page.html + 367 + + + src/app/pages/token/pages/trade/trade.page.html + 668 + + Totaal + + + Owned + + src/app/pages/member/pages/tokens/tokens.page.html + 87 + + + src/app/pages/member/pages/tokens/tokens.page.html + 170 + + + src/app/pages/nft/pages/nft/nft.page.html + 17 + + In bezit + + + Airdropped + + src/app/pages/member/pages/tokens/tokens.page.html + 118 + + + src/app/pages/member/pages/tokens/tokens.page.html + 172 + + Airdropped + + + from + + src/app/pages/member/pages/tokens/tokens.page.html + 120 + + van + + + Deposit for purchase + + src/app/pages/member/pages/tokens/tokens.page.html + 215 + + Storting voor aankoop + + + No tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 258,259 + + Geen tokens + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 297 + + Actieve staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 300 + + Verlopen staking + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 307,308 + + Actieve staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 310,311 + + Verlopen staking + + + Staked From + + src/app/pages/member/pages/tokens/tokens.page.html + 326 + + Gestaked Vanaf + + + Staked Until + + src/app/pages/member/pages/tokens/tokens.page.html + 327 + + Gestaked tot + + + Multiplier + + src/app/pages/member/pages/tokens/tokens.page.html + 329 + + Vermenigvuldiger + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 330 + + Staking waarde + + + Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 380 + + Staked + + + No Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 403,404 + + Geen stakes + + + Staked from - to + + src/app/pages/member/pages/tokens/tokens.page.html + 432,433 + + Gestaked van - naar + + + Amount (Multiplier) + + src/app/pages/member/pages/tokens/tokens.page.html + 445,446 + + Bedrag (vermenigvuldiger) + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 457,458 + + Staking waarde + + + Claim + + src/app/pages/member/pages/tokens/tokens.page.ts + 57 + + Claimen + + + Refund + + src/app/pages/member/pages/tokens/tokens.page.ts + 58 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 19 + + Terugbetaling + + + Export CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 9 + + Exporteer CSV + + + Exporting CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 13 + + CSV aan het exporteren + + + No transactions + + src/app/pages/member/pages/transactions/transactions.page.html + 120,121 + + Geen transacties + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 40 + + Sommige bestanden zijn niet geüpload + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 51,52 + + Gebruik alleen de a-z, A-Z, _, -, 0-9 tekens. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + CSV geüpload + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 67 + + Sommige van de NFT's zijn incorrect! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 73 + + Bestandsnaam + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 101 + + Fout + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 160 + + Upload bestaande CSV + + + Upload back once you generate below + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 162 + + Upload opnieuw nadat je onderstaande hebt gemaakt + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 193,194 + + Je moet eerst afbeeldingen uploaden. + + + Generate CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 211 + + Genereer CSV + + + Publish NFTs + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 212 + + Publiceer NFT's + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 224,225 + + Om meerdere klassieke NFT's te maken, moet je de webversie van Soonaverse gebruiken. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Enkel + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Meerdere + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14 + + NFT info + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16 + + Naam en beschrijving zullen worden opgenomen bij de NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 22 + + Naam is vereist. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 34 + + + src/app/pages/proposal/pages/new/new.page.html + 77 + + Beschrijving is vereist. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 53 + + Alle tijden worden weergegeven in de tijdzone van de gebruiker. Voor gegenereerde NFT en SFT wordt de prijs per collectie bepaald en kan hier niet worden gewijzigd. + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 92 + + Eigenschappen verschijnen onder jouw item. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 102 + + Naam van eigenschap (bijv. karakters) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 103 + + Waarde (bijv. Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 115 + + + src/app/pages/nft/pages/new/single/single.page.html + 151 + + + src/app/pages/nft/pages/new/single/single.page.html + 158 + + Eigenschapsnaam + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 126,125 + + + src/app/pages/nft/pages/new/single/single.page.html + 163 + + + src/app/pages/nft/pages/new/single/single.page.html + 171,170 + + + src/app/pages/nft/pages/new/single/single.page.html + 228,227 + + + src/app/pages/nft/pages/new/single/single.page.html + 266 + + + src/app/pages/nft/pages/new/single/single.page.html + 272,271 + + Waarde + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 142 + + Eigenschap + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 185 + + Eigenschap toevoegen + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 194 + + Statistieken verschijnen onder je voorwerp. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Statistieken naam (bijv. uithoudingsvermogen) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 205 + + Waarde (bijv. 10, 1/10 , etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 217 + + + src/app/pages/nft/pages/new/single/single.page.html + 254 + + + src/app/pages/nft/pages/new/single/single.page.html + 261 + + Statistiek naam + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 245 + + Statistiek + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287 + + Statistiek toevoegen + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 303 + + Upload afbeelding van jouw NFT. Ondersteund bestandstypen: PNG, JPEG, WEBP, MP4. Max grootte: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 333 + + Media is vereist + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 348 + + Selecteer een van je collecties om deze NFT te tonen. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 383,384 + + Maak NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 393,394 + + Voorbeeldweergave NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 168 + + Bestandsnaam is niet geldig + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 7 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 48 + + + src/app/pages/nft/pages/nft/nft.page.html + 516 + + Bekijk NFT + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 109 + + Huidig hoogste bod + + + remaining + + src/app/pages/nft/pages/nft/nft.page.html + 155 + + resterend + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 165 + + Verkoop afgelopen + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 173 + + Verkoop is nog niet begonnen + + + NFT is pending other member's transaction + + src/app/pages/nft/pages/nft/nft.page.html + 181 + + NFT wacht op de transactie van een ander lid + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 190 + + Collectie in afwachting van goedkeuring + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 198 + + Collectie afgewezen! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 213 + + Verkoop NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 218 + + Wijzig vaste prijs + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 223 + + Veiling wijzigen + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 240,241 + + Plaats bod + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 263,264 + + Koop nu + + + Bidding + + src/app/pages/nft/pages/nft/nft.page.html + 281 + + Bieding + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 290 + + Huidige bied orders + + + Past bids + + src/app/pages/nft/pages/nft/nft.page.html + 298 + + Vorige bied orders + + + My biddings + + src/app/pages/nft/pages/nft/nft.page.html + 307 + + Mijn biedingen + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 321 + + Lid + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 322 + + Geboden op + + + There are no current bids + + src/app/pages/nft/pages/nft/nft.page.html + 369,370 + + Er zijn geen huidige bied orders + + + There are no past bids + + src/app/pages/nft/pages/nft/nft.page.html + 419,420 + + Er zijn geen eerdere bied orders + + + There are no records. + + src/app/pages/nft/pages/nft/nft.page.html + 469,470 + + Er zijn geen records. + + + Withdraw NFT + + src/app/pages/nft/pages/nft/nft.page.html + 509,510 + + NFT opnemen + + + History + + src/app/pages/nft/pages/nft/nft.page.html + 522 + + Geschiedenis + + + Minting in Progress + + src/app/pages/nft/pages/nft/nft.page.html + 556 + + Minting is bezig + + + Available for specific Member Only + + src/app/pages/nft/pages/nft/nft.page.html + 619 + + Alleen beschikbaar voor specifiek lid + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 647 + + Bekijk alle transactiedetails van deze NFT op de Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 685 + + Over deze collectie + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 694 + + Weergeven + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 695 + + collectie + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 707,706 + + van + + + Are you sure you want to withdraw NFT from Soonaverse? + + src/app/pages/nft/pages/nft/nft.page.html + 800 + + Weet je zeker dat je de NFT van Soonaverse wilt afhalen? + + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + src/app/pages/nft/pages/nft/nft.page.html + 802 + + Zodra de NFT is opgenomen, is deze niet meer beschikbaar binnen Soonaverse en verschijnt deze alleen in je wallet. Je kunt de NFT altijd weer terug brengen naar Soonaverse. + + + Confirm with Metamask + + src/app/pages/nft/pages/nft/nft.page.html + 804 + + Bevestig met Metamask + + + View + + src/app/pages/nft/pages/nft/nft.page.ts + 82 + + Bekijk + + + NFT Withdrawn. + + src/app/pages/nft/pages/nft/nft.page.ts + 688 + + NFT opgenomen. + + + Oops, it's in another universe + + src/app/pages/nft/pages/not-found/not-found.page.html + 8 + + Oeps, het is in een ander universum + + + NFT you are looking for no longer exists on Soonaverse. + + src/app/pages/nft/pages/not-found/not-found.page.html + 12,14 + + NFT die je zoekt bestaat niet meer op Soonaverse. + + + Back to Marketplace + + src/app/pages/nft/pages/not-found/not-found.page.html + 22,24 + + Terug naar Marktplaats + + + Auction Starts + + src/app/pages/nft/services/helper.service.ts + 145 + + Veiling begint + + + Auction Ends + + src/app/pages/nft/services/helper.service.ts + 148 + + Veiling eindigt + + + Pool by + + src/app/pages/pool/pages/market/pool.page.html + 3,12 + + Pool by + + + What is Pool? + + src/app/pages/pool/pages/market/pool.page.html + 20,21 + + Wat is Pool? + + + Anyone can become a liquidity provider (LP) by depositing an equivalent value of each underlying token in return for pool tokens. These tokens track pro-rata LP shares of the total reserves, and can be redeemed for the underlying assets at any time. + + src/app/pages/pool/pages/market/pool.page.html + 23,26 + + Iedereen kan liquiditeitsprovider (LP) worden door een gelijkwaardige waarde van elke onderliggende token te deponeren in ruil voor pool tokens. Deze tokens volgen pro-rata LP aandelen van de totale reserves, en kunnen op elk moment worden ingewisseld voor de onderliggende assets. + + + Coming SOON + + src/app/pages/pool/pages/market/pool.page.html + 35 + + + src/app/pages/swap/pages/market/swap.page.html + 35 + + Binnenkort beschikbaar + + + See Pool on iotabee + + src/app/pages/pool/pages/market/pool.page.html + 37,39 + + Bekijk Pool op iotabee + + + What is iotabee? + + src/app/pages/pool/pages/market/pool.page.html + 49 + + + src/app/pages/swap/pages/market/swap.page.html + 49 + + Wat is iotabee? + + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + src/app/pages/pool/pages/market/pool.page.html + 51,54 + + + src/app/pages/swap/pages/market/swap.page.html + 51,54 + + Iotabee is een combinatie van een gedecentraliseerd peer-to-peer DEX protocol en een semi-gecentraliseerde crosschain SWAP die mensen kunnen gebruiken om liquiditeit te creëren en tokens te verhandelen op IOTA, Shimmer, Shimmer EVM en andere EVM chains zoals BSC. + + + iotabee.com + + src/app/pages/pool/pages/market/pool.page.html + 61,62 + + + src/app/pages/swap/pages/market/swap.page.html + 61,62 + + iotabee.com + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2 + + Nieuw voorstel + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 3 + + Voorstel informatie + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19 + + Titel en beschrijving worden opgenomen in het voorstel. Start en einddatums bepalen de duur van het voorstel. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 39 + + + src/app/pages/proposal/pages/new/new.page.html + 50,49 + + Start + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 40 + + Startdatum is vereist. + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 93 + + Informatie over vraag + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 95 + + Titel en beschrijving worden alleen getoond voor deze vraag. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 104 + + Titel voor vraag is vereist. + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 143 + + Tekst en beschrijving voor elk individueel antwoord. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 157 + + Tekst voor antwoord is vereist. + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 192 + + Optie toevoegen + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 207 + + Dit is de Groep die het voorstel zal vermelden. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 259 + + Voorstel setup + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 261 + + Definieert wie er toegang heeft tot het voorstel en wat de stemmethode is. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 269 + + Target deelnemers + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 276 + + Alle bewakers + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 283 + + Alleen bewakers kunnen over dit voorstel stemmen + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 289 + + Alle leden + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 296 + + Alle leden kunnen over dit voorstel stemmen + + + Space's Native Token + + src/app/pages/proposal/pages/new/new.page.html + 302 + + + src/app/pages/proposal/services/helper.service.ts + 23 + + Native Token van Groep + + + You must have minted token linked to your space first! + + src/app/pages/proposal/pages/new/new.page.html + 313 + + Je moet eerst minted tokens gelinkt hebben aan jouw groep! + + + All token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 321 + + Alle token houders kunnen stemmen. + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 343,344 + + Voorstel maken + + + Proposal - New + + src/app/pages/proposal/pages/new/new.page.ts + 136 + + + src/app/pages/proposal/pages/new/new.page.ts + 151 + + Voorstel - Nieuw + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + src/app/pages/proposal/pages/new/new.page.ts + 137 + + + src/app/pages/proposal/pages/new/new.page.ts + 152 + + Creëer en stem op voorstellen die helpen de toekomst van de DAO's en de metaverse vorm te geven. Slechts 1 klik setup. Word vandaag lid. + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 321 + + Keuze + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 328 + + badge + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 332 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 5 + + Eindresultaten + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 74 + + Voorstel Beschrijving + + + Proposal - + + src/app/pages/proposal/pages/overview/overview.page.ts + 59 + + Voorstel - + + + Change Vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 23,24 + + Wijzig stem + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 26,27 + + Stem nu + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 38 + + Stemmen begint + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 51 + + Je maakt geen deel uit van de stemming + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 55 + + Om te kunnen stemmen, moet je deel uitmaken van de groep voordat het voorstel werd gemaakt. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 64 + + Log in om te stemmen + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 68 + + Om te kunnen stemmen moet je eerst inloggen. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 79 + + Wachtend op goedkeuring van bewaker + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 83 + + Dit voorstel is nog niet door een bewaker goedgekeurd. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 102 + + Gewicht + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 48 + + Stem in behandeling + + + Voted + + src/app/pages/proposal/pages/participants/participants.page.ts + 49 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 156 + + Gestemd + + + Proposal - Participants + + src/app/pages/proposal/pages/participants/participants.page.ts + 83 + + Voorstel - Deelnemers + + + See all participants within the proposal + + src/app/pages/proposal/pages/participants/participants.page.ts + 84 + + Bekijk alle deelnemers binnen het voorstel + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 151 + + werd lid van Soonaverse op + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 12,13 + + Goedkeuren + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 23,24 + + Afwijzen + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 67 + + Stemmingssoort van dit voorstel. + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 75 + + Totaal gewicht binnen dit voorstel voor alle deelnemers. + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 22 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 22 + + Huidige mijlpaal + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 23 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 23 + + Begindatum + + + Voting Type + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 26 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 26 + + Soort stemming + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 27 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 27 + + Totaalgewicht + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 79 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 152 + + Bekijk voorstel + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 87 + + Huidige resultaten + + + (weight: ) + + src/app/pages/proposal/pages/proposal/proposal.page.html + 101,102 + + (weight: ) + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 124 + + Geselecteerde Badges + + + Votes + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 42 + + Stemmen + + + Voter + + src/app/pages/proposal/pages/votes/votes.page.html + 14 + + Stemmer + + + Option (Weight) + + src/app/pages/proposal/pages/votes/votes.page.html + 16 + + Optie (gewicht) + + + Expired On + + src/app/pages/proposal/pages/votes/votes.page.html + 18 + + Verloopt op + + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + src/app/pages/proposal/pages/votes/votes.page.html + 24 + + Zodra de terugbetaalde token output wordt verbruikt zal jouw stem verlopen en het evenredige gewicht wordt toegepast. Je zult opnieuw moeten stemmen om jouw stem uit te brengen. + + + One Member One Vote + + src/app/pages/proposal/services/helper.service.ts + 25 + + Één lid één stem + + + XP Reputation - Space + + src/app/pages/proposal/services/helper.service.ts + 27 + + XP Reputatie - Groep + + + XP Reputation - Selected Badges + + src/app/pages/proposal/services/helper.service.ts + 29 + + XP Reputatie - Geselecteerde badges + + + Staking + + src/app/pages/soon-staking/pages/staking/staking.page.html + 3,4 + + Staken + + + How much I earn? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 13 + + Hoeveel kan ik verdienen? + + + How it works? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 135 + + Hoe het werkt? + + + Stake your tokens to earn rewards and unlock new features. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 137,139 + + Stake je tokens om beloningen te verdienen en ontgrendel nieuwe functies. + + + Unique Perks for stakers + + src/app/pages/soon-staking/pages/staking/staking.page.html + 160 + + Unieke voordelen voor stakers + + + Rewards + + src/app/pages/soon-staking/pages/staking/staking.page.html + 167,168 + + Beloningen + + + Trading Bonuses + + src/app/pages/soon-staking/pages/staking/staking.page.html + 180 + + Handelsbonussen + + + Unique Features + + src/app/pages/soon-staking/pages/staking/staking.page.html + 193 + + Unieke functies + + + Earn more er than you think + + src/app/pages/soon-staking/pages/staking/staking.page.html + 209 + + Verdien meer dan je denkt + + + The more you hold, the more rewards you get. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 214,215 + + Hoe meer je vasthoudt, hoe meer beloningen je krijgt. + + + New + + src/app/pages/space/pages/awards/awards.page.html + 43 + + + src/app/pages/space/pages/collections/collections.page.html + 48 + + + src/app/pages/space/pages/proposals/proposals.page.html + 42 + + Nieuw + + + award + + src/app/pages/space/pages/awards/awards.page.html + 44 + + award + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 31 + + + src/app/pages/space/pages/members/members.page.html + 45 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 31 + + Actief + + + Space - Awards + + src/app/pages/space/pages/awards/awards.page.ts + 54 + + Groep - Awards + + + Space's awards + + src/app/pages/space/pages/awards/awards.page.ts + 55 + + Groeps awards + + + No Collections + + src/app/pages/space/pages/collections/collections.page.html + 69,70 + + Geen collecties + + + Space - Collections + + src/app/pages/space/pages/collections/collections.page.ts + 65 + + Groep - Collecties + + + Space's collections + + src/app/pages/space/pages/collections/collections.page.ts + 66 + + Groeps - Collecties + + + Space Options + + src/app/pages/space/pages/manage/manage.page.html + 2 + + Groep opties + + + Token Options + + src/app/pages/space/pages/manage/manage.page.html + 6 + + Token opties + + + Edit Space + + src/app/pages/space/pages/manage/manage.page.html + 21 + + Groep bewerken + + + Manage Guardians + + src/app/pages/space/pages/manage/manage.page.html + 38 + + Bewakers beheren + + + Export Current Members + + src/app/pages/space/pages/manage/manage.page.html + 44 + + Exporteer huidige leden + + + Create New Award + + src/app/pages/space/pages/manage/manage.page.html + 57 + + Maak nieuwe award + + + Create New Proposal + + src/app/pages/space/pages/manage/manage.page.html + 68 + + Nieuw voorstel aanmaken + + + Create New Collection + + src/app/pages/space/pages/manage/manage.page.html + 79 + + Nieuwe collectie aanmaken + + + Edit Token + + src/app/pages/space/pages/manage/manage.page.html + 105 + + Token bewerken + + + Create Airdrop + + src/app/pages/space/pages/manage/manage.page.html + 127 + + Maak airdrop + + + Staking Reward Schedule + + src/app/pages/space/pages/manage/manage.page.html + 135 + + Staking beloningsschema + + + Export Current Stakers + + src/app/pages/space/pages/manage/manage.page.html + 141 + + Exporteer huidige stakers + + + Active + + src/app/pages/space/pages/members/members.page.html + 18,19 + + Actief + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 35,36 + + Geblokkeerd + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 52 + + Geblokkeerd + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 67 + + + src/app/pages/space/pages/members/members.page.html + 82 + + Zoek lid + + + No Members + + src/app/pages/space/pages/members/members.page.html + 110,111 + + Geen leden + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 118 + + lid geworden van groep op + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 161,162 + + Verwijder bewaker + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 174,175 + + Creëer bewaker + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 184,185 + + Blokkeer lid + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 187,188 + + Lid toelaten + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 190,191 + + Deblokkeer lid + + + Space - Members + + src/app/pages/space/pages/members/members.page.ts + 76 + + Groep - Leden + + + Space's members + + src/app/pages/space/pages/members/members.page.ts + 77 + + Groepsleden + + + Upcoming Sale + + src/app/pages/space/pages/overview/overview.page.html + 7 + + Aankomende verkoop + + + Live Token Sale + + src/app/pages/space/pages/overview/overview.page.html + 9 + + Live Token verkoop + + + Space - + + src/app/pages/space/pages/overview/overview.page.ts + 55 + + Groep - + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 43 + + voorstel + + + No Proposals + + src/app/pages/space/pages/proposals/proposals.page.html + 62,63 + + Geen voorstellen + + + Space - Proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 54 + + Groep - Voorstellen + + + Space's proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 55 + + Groepsvoorstellen + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 34 + + Bekijk groep + + + pending + + src/app/pages/space/pages/space/space-about/space-about.component.html + 153 + + in behandeling + + + Export members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 168 + + Exporteer leden + + + Exporting members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 172 + + Exporteren van leden + + + Open to join instantly + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Open om direct toe te treden + + + Requires approval to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 183 + + Vereist goedkeuring om toe te treden + + + Requires + + src/app/pages/space/pages/space/space-about/space-about.component.html + 187 + + Vereist + + + staked value to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 193 + + gestaakte waarde om mee te doen + + + Related Links + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 92 + + Gerelateerde links + + + Claim ownership + + src/app/pages/space/pages/space/space-about/space-about.component.html + 259,260 + + Eigendom claimen + + + Space's Wallet Addresses + + src/app/pages/space/pages/space/space-about/space-about.component.html + 290 + + Wallet adressen van de groep + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 321 + + Groep verlaten + + + About space + + src/app/pages/space/pages/space/space.page.html + 3 + + Over de groep + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 55,56 + + + src/app/pages/space/pages/space/space.page.html + 118,119 + + Lid worden van groep + + + Pending Request + + src/app/pages/space/pages/space/space.page.html + 68 + + + src/app/pages/space/pages/space/space.page.html + 131 + + Lopend verzoek + + + Ask to join Space + + src/app/pages/space/pages/space/space.page.html + 70 + + + src/app/pages/space/pages/space/space.page.html + 133 + + Vraag om toe te treden tot groep + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 82,83 + + + src/app/pages/space/pages/space/space.page.html + 160,161 + + Groep bewerken + + + Stake + + src/app/pages/space/pages/space/space.page.html + 144 + + Staak + + + to Join + + src/app/pages/space/pages/space/space.page.html + 147 + + om mee te doen + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2 + + Nieuwe groep toevoegen + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3 + + Groep bewerken + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17 + + Informatie over groep + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19 + + Titel en beschrijving zullen worden opgenomen in de groep. + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 56 + + Links worden opgenomen in de groeps info. Gebruik gebruikersnamen voor Github, Twitter en Discord (naam#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 97 + + Alleen discord uitnodigingscode mogelijk (bijv. RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 104 + + Voer je Discord-uitnodigingscode in + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 125 + + Soort groep + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 127 + + Elk type heeft verschillende kenmerken. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 137,138 + + Open voor iedereen om direct lid te worden + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 142 + + Vereist goedkeuring van een bewaker + + + Requires stake value (in space's token) + + src/app/pages/space/pages/upsert/upsert.page.html + 146 + + Vereist staak waarde (in groeps' token) + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 174 + + Avatar is verplicht + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 243,244 + + Groep maken + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 256,257 + + Sla groep op + + + Space - New + + src/app/pages/space/pages/upsert/upsert.page.ts + 76 + + Groep - Nieuw + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/space/pages/upsert/upsert.page.ts + 77 + + Meld je in enkele minuten aan met onze 1-klik DAO-on-demand setup. Feeless onchain stemmen. Ontdek alle geweldige DAO's op de Soonaverse. + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 210 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 216 + + Upload nieuw om huidige te vervangen. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 211 + + Jouw merk is essentieel. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 217 + + Maak het persoonlijk. + + + Swap by + + src/app/pages/swap/pages/market/swap.page.html + 3,12 + + Swap by + + + What is Swap? + + src/app/pages/swap/pages/market/swap.page.html + 20,21 + + Wat is Swap? + + + See Swap on iotabee + + src/app/pages/swap/pages/market/swap.page.html + 37,39 + + Zie Swap op iotabee + + + Create airdrop + + src/app/pages/token/pages/airdrops/airdrops.page.html + 8,9 + + Maak airdrop + + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/pages/token/pages/airdrops/airdrops.page.html + 17,19 + + Je kunt een governance token airdrop maken voor je leden. Om dit te doen, upload een .csv bestand met gebruikersadressen en toewijzingsgegevens. + + + Some rows have been removed + + src/app/pages/token/pages/airdrops/airdrops.page.html + 92 + + Sommige rijen zijn verwijderd + + + Submit airdrop + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 118,119 + + Dien airdrop in + + + + row is not valid + + src/app/pages/token/pages/airdrops/airdrops.page.ts + 73 + + rij is ongeldig + + + Breakdown + + src/app/pages/token/pages/metrics/metrics.page.html + 1 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 284 + + Uitsplitsing + + + Token distribution + + src/app/pages/token/pages/metrics/metrics.page.html + 5 + + Token distributie + + + Total token supply + + src/app/pages/token/pages/metrics/metrics.page.ts + 56 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 96 + + Totale token voorraad + + + Launchpad price per token + + src/app/pages/token/pages/metrics/metrics.page.ts + 67 + + Launchpad prijs per token + + + Initial Cap + + src/app/pages/token/pages/metrics/metrics.page.ts + 74 + + Initiele Cap + + + Total melted tokens + + src/app/pages/token/pages/metrics/metrics.page.ts + 82 + + Totaal gesmolten tokens + + + You can create only ONE token per space and it can never be changed. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 14,15 + + Je kunt slechts één token per groep maken en het kan nooit worden gewijzigd. + + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 23,26 + + Belangrijke informatie om een token aan te maken op Soonaverse: lees aub de instructies en vul een formulier, beschikbaar op dit scherm, in als je openbare verkoop wilt doen of als je je tokens beschikbaar wilt maken op Soonaverse exchange. + + + Continue + + src/app/pages/token/pages/new/introduction/introduction.component.html + 38,39 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 191,192 + + + src/app/pages/token/pages/new/overview/overview.component.html + 104,105 + + Doorgaan + + + Token Sale Requirements + + src/app/pages/token/pages/new/introduction/introduction.component.html + 50 + + Token verkoop vereisten + + + To create a public sale or use the Token Exchange you must complete our KYC process. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 52 + + Om een openbare verkoop te maken of de Token Exchange te gebruiken, moet je ons KYC proces voltooien. + + + Begin Process + + src/app/pages/token/pages/new/introduction/introduction.component.html + 58 + + Proces beginnen + + + Continue + + + src/app/pages/token/pages/new/introduction/introduction.component.html + 73,74 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 330,331 + + + src/app/pages/token/pages/new/overview/overview.component.html + 214,215 + + Doorgaan + + + + Token info + + src/app/pages/token/pages/new/metrics/metrics.component.html + 9 + + + src/app/pages/token/pages/new/summary/summary.component.html + 14 + + + src/app/pages/token/pages/token/token.page.html + 3 + + Token info + + + Name is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 16 + + Naam is ongeldig. + + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + src/app/pages/token/pages/new/metrics/metrics.component.html + 33 + + Symbool is ongeldig (lengte moet 3 tot 5 zijn en alleen hoofdletters). + + + Token supply + + src/app/pages/token/pages/new/metrics/metrics.component.html + 47 + + + src/app/pages/token/pages/new/summary/summary.component.html + 53 + + Token voorraad + + + Price per token (MIOTA) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 53 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 58 + + Prijs per token (MIOTA) + + + Price is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 54 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 38 + + Prijs is ongeldig. + + + Total token supply (up to 6 decimals are supported) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 68 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 74 + + Totale tokenvoorraad (tot 6 decimalen worden ondersteund) + + + Total supply is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 69 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 107 + + Totale voorraad is ongeldig. + + + Allocation title + + src/app/pages/token/pages/new/metrics/metrics.component.html + 111 + + Toegewezen titel + + + % of tokens for sale + + src/app/pages/token/pages/new/metrics/metrics.component.html + 121 + + % van de tokens te koop + + + Percentage of tokens is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 122 + + Percentage van tokens is ongeldig. + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 126 + + % van de tokens voor verkoop (Standaard 100%) + + + Only 1 of the allocations can be public + + src/app/pages/token/pages/new/metrics/metrics.component.html + 149 + + Slechts 1 van de toewijzingen kan openbaar zijn + + + Sum of the percentages must be 100 + + src/app/pages/token/pages/new/metrics/metrics.component.html + 155 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 166 + + Som van de percentages moet 100 zijn + + + Invalid sum of percentages + + src/app/pages/token/pages/new/metrics/metrics.component.html + 160 + + Ongeldige som van percentages + + + Add allocation + + src/app/pages/token/pages/new/metrics/metrics.component.html + 179 + + Toewijzing toevoegen + + + Token icon + + src/app/pages/token/pages/new/metrics/metrics.component.html + 221 + + + src/app/pages/token/pages/new/summary/summary.component.html + 265 + + Token icoon + + + (Recomended size: 400 x 400px) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 223 + + (Aanbevolen grootte: 400 x 400px) + + + Icon is mandatory + + src/app/pages/token/pages/new/metrics/metrics.component.html + 232 + + Icoon is verplicht + + + Token price + + src/app/pages/token/pages/new/metrics/metrics.component.html + 264 + + + src/app/pages/token/pages/new/summary/summary.component.html + 283 + + Token prijs + + + Distribution of the token happens after the token offering end date. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 266 + + + src/app/pages/token/pages/new/summary/summary.component.html + 285 + + Distributie van de token gebeurt na de token aanbod einddatum. + + + Configure the token supply first to see breakdown. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 288 + + Configureer eerst de token voorraad om de verdeling te zien. + + + Token terms and conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 298 + + + src/app/pages/token/pages/new/summary/summary.component.html + 324 + + Token voorwaarden en condities + + + Provide link for Terms and Conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 300 + + Geef link voor de voorwaarden en condities + + + Terms and Conditions link is invalid. (Start with http:// or https://) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 306 + + Algemene voorwaarden link is ongeldig. (Start met http:// of https://) + + + Token allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 75 + + + src/app/pages/token/pages/new/summary/summary.component.html + 165 + + Token toewijzing + + + Allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 76 + + + src/app/pages/token/pages/new/summary/summary.component.ts + 30 + + Toewijzing + + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 81,82 + + Zorg ervoor dat er enkel één toewijzing als Openbare Verkoop is aangemerkt omdat dit later verkocht kan worden op Soonaverse. + Je kunt de Openbare Verkoop starten zodra de token is aangemaakt en goedgekeurd. + + + Create token + + src/app/pages/token/pages/new/new.page.html + 2 + + Token aanmaken + + + Introduction + + src/app/pages/token/pages/new/new.page.ts + 32 + + Introductie + + + Metrics + + src/app/pages/token/pages/new/new.page.ts + 33 + + + src/app/pages/token/pages/token/token.page.ts + 38 + + Statistieken + + + Summary + + src/app/pages/token/pages/new/new.page.ts + 35 + + Samenvatting + + + New Token + + src/app/pages/token/pages/new/new.page.ts + 72 + + Nieuwe token + + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + src/app/pages/token/pages/new/new.page.ts + 73 + + Start je eigen crypto-project op het veilige, feeless Shimmer netwerk. Maak vandaag je token aan. + + + Token description + + src/app/pages/token/pages/new/overview/overview.component.html + 12 + + + src/app/pages/token/pages/new/summary/summary.component.html + 93 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 6 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 27 + + Tokenbeschrijving + + + This text will be displayed on the main token page. + + src/app/pages/token/pages/new/overview/overview.component.html + 14 + + Het veld wordt getoond op de hoofdpagina van de token. + + + Title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 23 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 10 + + Titel is ongeldig. + + + Description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 38 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 22 + + Beschrijving is ongeldig. + + + Short description + + src/app/pages/token/pages/new/overview/overview.component.html + 55 + + + src/app/pages/token/pages/new/summary/summary.component.html + 129 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 49 + + Korte beschrijving + + + Short description of the token which will be displayed on the token trading page. + + src/app/pages/token/pages/new/overview/overview.component.html + 57 + + Korte beschrijving van de token die wordt weergegeven op de token handelspagina. + + + Short title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 66 + + Korte titel is ongeldig. + + + Short description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 81 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 68 + + Korte beschrijving is ongeldig. + + + Overview graphics + + src/app/pages/token/pages/new/overview/overview.component.html + 121 + + Overzicht grafieken + + + Token introductory video / image + + src/app/pages/token/pages/new/overview/overview.component.html + 123 + + Token introductie video / afbeelding + + + Introductionary media is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 132 + + Introductie media is ongeldig. + + + Invalid URL. (Start with http:// or https://) + + src/app/pages/token/pages/new/overview/overview.component.html + 168 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 84 + + Ongeldige URL (moet beginnen met 'http://' of 'https://') + + + Add link + + src/app/pages/token/pages/new/overview/overview.component.html + 191 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 107 + + Link toevoegen + + + Edit + + src/app/pages/token/pages/new/summary/summary.component.html + 22,23 + + + src/app/pages/token/pages/new/summary/summary.component.html + 61,62 + + + src/app/pages/token/pages/new/summary/summary.component.html + 101,102 + + + src/app/pages/token/pages/new/summary/summary.component.html + 137,138 + + + src/app/pages/token/pages/new/summary/summary.component.html + 173,174 + + Bewerken + + + Name + + src/app/pages/token/pages/new/summary/summary.component.html + 30,31 + + Naam + + + Symbol + + src/app/pages/token/pages/new/summary/summary.component.html + 41,42 + + Symbool + + + Total token supply + + src/app/pages/token/pages/new/summary/summary.component.html + 80,81 + + Totale token voorraad + + + Description title + + src/app/pages/token/pages/new/summary/summary.component.html + 109,110 + + Beschrijving titel + + + Description + + src/app/pages/token/pages/new/summary/summary.component.html + 120,121 + + Beschrijving + + + Short description title + + src/app/pages/token/pages/new/summary/summary.component.html + 145,146 + + Korte beschrijvende titel + + + Short description + + src/app/pages/token/pages/new/summary/summary.component.html + 156,157 + + Korte beschrijving + + + Allocation title + + src/app/pages/token/pages/new/summary/summary.component.html + 187,188 + + Toewijzing titel + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/summary/summary.component.html + 198,199 + + % van de tokens voor verkoop (Standaard 100%) + + + Submit token + + src/app/pages/token/pages/new/summary/summary.component.html + 227,228 + + Token indienen + + + (Recommended size: 400 x 400px) + + src/app/pages/token/pages/new/summary/summary.component.html + 267 + + (Aanbevolen grootte: 400 x 400px) + + + Some description + + src/app/pages/token/pages/new/summary/summary.component.html + 326 + + Een beschrijving + + + Terms&conditions + + src/app/pages/token/pages/new/summary/summary.component.html + 340 + + Voorwaarden&condities + + + Submit token + + + src/app/pages/token/pages/new/summary/summary.component.html + 356,357 + + Token indienen + + + + Trade token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 15,16 + + Handel in tokens + + + Buy Tokens + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 28,29 + + Koop Tokens + + + Schedule public sale + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 42,43 + + Plan openbare verkoop + + + Allow Trading + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 57,58 + + Handelen toestaan + + + Edit token info + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 86 + + Token info bewerken + + + Check out token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 100 + + Controleer de token + + + Mint & Approve Token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 132,133 + + Mint & Token goedkeuren + + + Minting in progress + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 144,145 + + Minting is bezig + + + Token was not made available on decentralised network yet. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 150 + + Token is nog niet op een gedecentraliseerd netwerk beschikbaar gesteld. + + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 153,154 + + Token is nog niet gemigreerd naar het gedecentraliseerde netwerk. Zorg ervoor dat je weet wat je koopt. + + + Trading enabled. + + src/app/pages/token/pages/token/token-buy/token-buy.component.ts + 86 + + Handelen ingeschakeld. + + + Short description title is invalid. + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 56 + + Korte beschrijvingstitel is ongeldig. + + + Short description title + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 61 + + Korte beschrijvende titel + + + Short token description + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 73 + + Korte token beschrijving + + + Sale Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 4 + + Verkoop informatie + + + Sale schedule + + src/app/pages/token/pages/token/token-info/token-info.component.html + 10 + + Verkoop planning + + + During cooldown period you are able to trigger refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 41 + + Tijdens de afkoelingsperiode kun je nog een terugbetaling vragen. + + + No Cooldown. Participants can't refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 75,76 + + Geen afkoeltijd. Deelnemers kunnen niet terugbetaald krijgen. + + + Token Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 80 + + + src/app/pages/token/pages/trade/trade.page.html + 57 + + + src/app/pages/token/pages/trade/trade.page.html + 624 + + Token info + + + My purchased tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 4 + + Mijn gekochte tokens + + + + + + + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 78,80 + + + + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 90,92 + + Token verkoopdoel bereikt! Token distributie zal eerlijk worden berekend en overschrijdingen worden terugbetaald. + + + Your Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 21 + + Jouw storting + + + Potential Tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 22 + + Potentiële Tokens + + + Token Owned + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 23 + + Token in bezit + + + Total Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 24 + + Totale storting + + + Total Participants + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 25 + + Totaal Aantal Deelnemers + + + Sale ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 45 + + Verkoop eindigt in + + + Cooldown in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 62 + + Afkoeltijd is bezig + + + Sale in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 64 + + Verkoop loopt + + + Sale starts in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 69 + + Verkoop start over + + + Cooldown ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 73 + + Afkoeltijd loopt af in + + + + + + + src/app/pages/token/pages/token/token.page.html + 47,48 + + + + + Airdrops + + src/app/pages/token/pages/token/token.page.ts + 41 + + Airdrops + + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + src/app/pages/token/pages/token/token.page.ts + 100 + + + src/app/pages/token/pages/trade/trade.page.ts + 275 + + Koop, verkoop, en handel in SOON en Shimmer tokens op een niet-custodiale, veilige L1 exchange. Ga binnen enkele minuten aan de slag. Word vandaag lid. + + + Ongoing Sale + + src/app/pages/token/pages/token/token.page.ts + 248 + + Lopende verkoop + + + Scheduled + + src/app/pages/token/pages/token/token.page.ts + 250 + + Gepland + + + Cooldown + + src/app/pages/token/pages/token/token.page.ts + 252 + + Afkoeltijd + + + Processing + + src/app/pages/token/pages/token/token.page.ts + 254 + + In behandeling + + + Order book + + src/app/pages/token/pages/trade/trade.page.html + 94 + + + src/app/pages/token/pages/trade/trade.page.html + 644 + + Orderboek + + + Token chart + + src/app/pages/token/pages/trade/trade.page.html + 102 + + + src/app/pages/token/pages/trade/trade.page.html + 795 + + Token grafiek + + + My trading + + src/app/pages/token/pages/trade/trade.page.html + 158 + + Mijn handelen + + + Open buy orders + + src/app/pages/token/pages/trade/trade.page.html + 166 + + Open kooporders + + + Open sell orders + + src/app/pages/token/pages/trade/trade.page.html + 174 + + Open verkooporders + + + Order history + + src/app/pages/token/pages/trade/trade.page.html + 182 + + Ordergeschiedenis + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 213 + + + src/app/pages/token/pages/trade/trade.page.html + 287 + + Voldaan + + + There are no buys + + src/app/pages/token/pages/trade/trade.page.html + 257,258 + + Er zijn geen bied orders + + + Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 321,322 + + + src/app/pages/token/pages/trade/trade.page.html + 416,417 + + Geannuleerd + + + Expired + + src/app/pages/token/pages/trade/trade.page.html + 324,325 + + + src/app/pages/token/pages/trade/trade.page.html + 422,423 + + Verlopen + + + There are no sells + + src/app/pages/token/pages/trade/trade.page.html + 345,346 + + Er zijn geen laat orders + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 388 + + + src/app/pages/token/pages/trade/trade.page.html + 1213 + + Verkopen + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 404,405 + + Voldaan + + + Partially Fulfilled / Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 410,411 + + Gedeeltelijk Voldaan / Geannuleerd + + + Fulfilled / Cancelled (unfulfillable) + + src/app/pages/token/pages/trade/trade.page.html + 419,420 + + Voltooid / Geannuleerd (onvoldaan) + + + There is no order history + + src/app/pages/token/pages/trade/trade.page.html + 434,435 + + Er is geen handelsgeschiedenis + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 477,478 + + + src/app/pages/token/pages/trade/trade.page.html + 488,489 + + + src/app/pages/token/pages/trade/trade.page.html + 919,920 + + Verkopen + + + Available + + src/app/pages/token/pages/trade/trade.page.html + 530,531 + + Beschikbaar + + + Current Price + + src/app/pages/token/pages/trade/trade.page.html + 542 + + Huidige prijs + + + Change 24h + + src/app/pages/token/pages/trade/trade.page.html + 564,565 + + Verander 24u + + + ( ~ ) + + src/app/pages/token/pages/trade/trade.page.html + 729,732 + + ( ~ ) + + + current price + + src/app/pages/token/pages/trade/trade.page.html + 737,738 + + huidige prijs + + + There is no activity yet + + src/app/pages/token/pages/trade/trade.page.html + 788,789 + + Er is nog geen activiteit + + + Trade history + + src/app/pages/token/pages/trade/trade.page.html + 829,830 + + Handelsgeschiedenis + + + There is no trade history + + src/app/pages/token/pages/trade/trade.page.html + 894,895 + + Er is geen handelsgeschiedenis + + + You don’t have enough tokens + + src/app/pages/token/pages/trade/trade.page.html + 928 + + Je hebt niet genoeg tokens + + + Amount to + + src/app/pages/token/pages/trade/trade.page.html + 935,936 + + Bedrag naar + + + Balance + + src/app/pages/token/pages/trade/trade.page.html + 979 + + Balans + + + Set your price per 1 + + src/app/pages/token/pages/trade/trade.page.html + 998,1000 + + Stel je prijs in per 1 in + + + LIMIT PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1009,1010 + + LIMIT PRIJS + + + MARKET PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1017,1018 + + MARKT PRIJS + + + ~ + + src/app/pages/token/pages/trade/trade.page.html + 1038,1041 + + + src/app/pages/token/pages/trade/trade.page.html + 1145,1148 + + ~ + + + Set Current Price + + src/app/pages/token/pages/trade/trade.page.html + 1069 + + Stel huidige prijs in + + + Set BID + + src/app/pages/token/pages/trade/trade.page.html + 1093,1104 + + Stel BIED in. + + + The bid price is the highest price that a particular buyer is willing to pay. + + src/app/pages/token/pages/trade/trade.page.html + 1100 + + De biedprijs is de hoogste prijs die een bepaalde koper bereid is te betalen. + + + Set ASK + + src/app/pages/token/pages/trade/trade.page.html + 1109,1120 + + Stel LAAT in. + + + The asking price is the minimum price that an individual would be willing to sell their asset. + + src/app/pages/token/pages/trade/trade.page.html + 1116 + + De laatprijs is de minimumprijs die een individu bereid is om zijn asset te verkopen. + + + You will spend + + src/app/pages/token/pages/trade/trade.page.html + 1129,1130 + + Je zult besteden + + + Minimum total has to be at least + + src/app/pages/token/pages/trade/trade.page.html + 1163 + + Minimale totaal moet ten minste + + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + src/app/pages/token/pages/trade/trade.page.html + 1179 + + Soonaverse treasury ontvangt 2,5% van de verkoopprijs. Er zijn geen andere verborgen kosten. Tokens kopen is gratis. + + + 1h + + src/app/pages/token/pages/trade/trade.page.ts + 118 + + 1u + + + 4h + + src/app/pages/token/pages/trade/trade.page.ts + 119 + + 4u + + + 1d + + src/app/pages/token/pages/trade/trade.page.ts + 120 + + 1d + + + 1w + + src/app/pages/token/pages/trade/trade.page.ts + 121 + + 1w + + + Bids + + src/app/pages/token/pages/trade/trade.page.ts + 563 + + Bied orders + + + Asks + + src/app/pages/token/pages/trade/trade.page.ts + 567 + + Laat orders + + + Cancelled + + src/app/pages/token/services/helper.service.ts + 201 + + Geannuleerd + + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 42 + + Verken de top Shimmer, IOTA en SOON cryptovaluta's. Prijsgrafieken, crypto profielen, op een niet-custodiale, veilige L1 exchange! Meld je vandaag aan. + + + Go to trading pairs to add your favourite tokens. + + src/app/pages/tokens/pages/favourites/favourites.page.html + 47,48 + + Ga naar handelsparen om je favoriete tokens toe te voegen. + + + Add favourites + + src/app/pages/tokens/pages/favourites/favourites.page.html + 56,57 + + Favorieten toevoegen + + + Tokens - Favourite + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 52 + + Tokens - Favoriet + + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 53 + + Koop, handel en bewaar je favoriete Shimmer, IOTA en SOON tokens. Onze niet-custodiale L1 exchange is klaar voor jou! Meld je vandaag aan. + + + Tokens - Launchpad + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 41 + + Tokens - Launchpad + + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 42 + + Werf funds, bouw voor je volgers, vergroot je publiek en LANCEER je Shimmer tokens met de Soonaverse Launchpad. Word vandaag lid. + + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/tokens/pages/tokens/tokens.page.html + 11,13 + + Sommige tokens worden mogelijk nog niet gemigreerd naar het gedecentraliseerde netwerk. Zorg ervoor dat je weet wat je koopt. + + + Highlighted Token + + src/app/pages/tokens/pages/tokens/tokens.page.html + 49 + + Uitgelichte Token + + + Favorites + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 17 + + Favorieten + + + All tokens + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 20 + + Alle tokens + + + Trading pairs + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 21 + + Handelsparen + + + Launchpad + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 22 + + Launchpad + + + Tokens - Trading Pairs + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 43 + + Tokens - Handelsparen + + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 44 + + De meest complete lijst van Shimmer projecten, SOON valutaparen en markten, op een niet-custodiale, veilige L1 exchange. Meld je vandaag nog aan! + + + AuditOne Validation + + src/app/service-modules/audit-one/components/modal/modal.component.html + 3 + + AuditOne Validatie + + + Requested On + + src/app/service-modules/audit-one/components/modal/modal.component.html + 22 + + Aangevraagd op + + + Last Update + + src/app/service-modules/audit-one/components/modal/modal.component.html + 23 + + Laatste Update + + + There are no records. + + src/app/service-modules/audit-one/components/modal/modal.component.html + 52 + + Er zijn geen records. + + + AuditOne + + src/app/service-modules/audit-one/components/widget/widget.component.html + 11 + + AuditOne + + + Verified + + src/app/service-modules/audit-one/components/widget/widget.component.html + 47 + + Geverifiëerd + + + See more + + src/app/service-modules/audit-one/components/widget/widget.component.html + 52 + + Bekijk meer + + + + diff --git a/src/locale/messages.pl-PL.xlf b/src/locale/messages.pl-PL.xlf new file mode 100644 index 0000000..1ba687b --- /dev/null +++ b/src/locale/messages.pl-PL.xlf @@ -0,0 +1,6844 @@ + + + + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 69 + + Back + + + Discover + + src/app/@shell/ui/header/header.component.html + 56,57 + + + src/app/pages/home/home.page.html + 18,19 + + Discover + + + Create new + + src/app/@shell/ui/header/header.component.html + 62 + + Create new + + + Space + + src/app/@shell/ui/header/header.component.html + 68,69 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 83,84 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 6,7 + + + src/app/pages/collection/pages/collection/collection.page.html + 54,55 + + + src/app/pages/market/pages/collections/collections.page.html + 122,123 + + + src/app/pages/market/pages/nfts/nfts.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 69,70 + + Space + + + Proposal + + src/app/@shell/ui/header/header.component.html + 71,72 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 23,24 + + Proposal + + + Award + + src/app/@shell/ui/header/header.component.html + 74,75 + + + src/app/pages/award/pages/award/award.page.html + 26,27 + + Award + + + Collection + + src/app/@shell/ui/header/header.component.html + 77,78 + + + src/app/pages/collection/pages/collection/collection.page.html + 19,20 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 114,115 + + + src/app/pages/nft/pages/new/single/single.page.html + 336,337 + + + src/app/pages/space/pages/collections/collections.page.html + 26 + + Collection + + + None. + + src/app/@shell/ui/header/header.component.html + 128,129 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 52 + + None. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 137,138 + + + src/app/components/auth/services/auth.service.ts + 315 + + My Profile + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 152,153 + + Purchase has not been completed + + + You have + + src/app/@shell/ui/header/header.component.html + 154 + + You have + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 154,155 + + to finish your transaction + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 156,157 + + Open Checkout + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 272 + + You won the NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 273 + + You are a proud owner of a new NFT. Congratulations! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 280 + + You lost your bid! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 281 + + Your bid on + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 282 + + was outbid. Try again! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 289 + + just offered + + + for + + src/app/@shell/ui/header/header.component.ts + 290 + + + src/app/components/timeline-nft/timeline-nft.component.html + 60 + + for + + + Your + + src/app/@shell/ui/header/header.component.ts + 291 + + Your + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 292 + + has received a new bid for + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 300,299 + + Unsupported + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 301 + + This notification is not yet supported in your language + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 12 + + Space + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 17 + + Proposal + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 22 + + Award + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27 + + Collection + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 34,35 + + Connect to your MetaMask wallet + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 52,53 + + Log out + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 56,57 + + Powered by + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8,10 + + The page you were looking for was not found + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 11,13 + + Discover Soonaverse + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 28,29 + + See Docs + + + Coming SOON + + src/app/@shell/ui/sider/sider.component.html + 35,36 + + + src/app/pages/award/pages/new/new.page.html + 271,272 + + + src/app/pages/award/pages/new/new.page.html + 281,282 + + + src/app/pages/award/pages/new/new.page.html + 291,292 + + Coming SOON + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 8,9 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 9,10 + + Connect to your Metamask wallet + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 20,21 + + Make sure you select public IOTA EVM Chain in MetaMask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 22,23 + + Network Name: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23,24 + + RPC URL: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 24,25 + + Chain ID: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 31,32 + + + src/app/pages/award/pages/award/award.page.html + 154 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 152 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 184 + + Cancel + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 1,3 + + Connect + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Disconnect + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 111 + + Unable to sign transaction. Please try to reload page. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 156 + + You must unlock your MetaMask first! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 167 + + You must enable access to read your account address. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 189 + + Please make sure you select address in MetaMask! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 196 + + Unable to get nonce to authenticate! + + + You have to open Soonaverse in MetaMask app. + + src/app/components/auth/services/auth.service.ts + 239 + + You have to open Soonaverse in MetaMask app. + + + Failed to initialize MetaMask, try to reload page. + + src/app/components/auth/services/auth.service.ts + 241 + + Failed to initialize MetaMask, try to reload page. + + + Pending + + + src/app/components/award/components/award-status/award-status.component.html + 1,2 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 1,2 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 1,2 + + Pending + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 3,4 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 3,4 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 3,4 + + Rejected + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 5 + + + src/app/pages/space/pages/awards/awards.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 25 + + Completed + + + Available + + src/app/components/award/components/award-status/award-status.component.html + 6 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 62 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 150,149 + + + src/app/pages/collection/pages/collection/collection.page.html + 91,92 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 39,37 + + + src/app/pages/space/pages/collections/collections.page.ts + 24 + + Available + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 4 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 553,554 + + Space Members Only + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 542,543 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 14 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 564,565 + + Space Members with Badge Only + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 574,575 + + At least one NFT from Collections + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 19 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 43,44 + + Starts in + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 21 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 46,47 + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26,27 + + days + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 24 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 50,51 + + Starts today + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 42 + + Limited Edition + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 57 + + Pending approval + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 67 + + + src/app/pages/space/pages/awards/awards.page.ts + 26 + + + src/app/pages/space/pages/collections/collections.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 26 + + Rejected + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 2,3 + + + src/app/pages/nft/pages/new/single/single.page.html + 342,343 + + Collection is required. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 11,12 + + Select Collection + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 65,67 + + Select a Collection + + + Search + + src/app/components/collection/components/select-collection/select-collection.component.html + 74 + + + src/app/components/space/components/select-space/select-space.component.html + 74 + + + src/app/pages/discover/pages/discover/discover.page.html + 22,23 + + + src/app/pages/market/pages/market/market.page.html + 22,23 + + Search + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 84 + + + src/app/components/space/components/select-space/select-space.component.html + 84 + + No results for + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 14,13 + + All Collections + + + Wallet details + + src/app/components/member/components/member-about/member-about.component.html + 42,43 + + Wallet details + + + Member's Wallet Address. + + src/app/components/member/components/member-about/member-about.component.html + 44,45 + + Member's Wallet Address. + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 55,56 + + Recently joined spaces + + + All + + src/app/components/member/components/member-about/member-about.component.html + 58,59 + + + src/app/pages/discover/pages/spaces/spaces.page.ts + 28,27 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 38,37 + + All + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 78,79 + + No Contribution Yet. + + + Latest Badges + + src/app/components/member/components/member-about/member-about.component.html + 84,85 + + Latest Badges + + + No badges + + src/app/components/member/components/member-about/member-about.component.html + 93,94 + + No badges + + + See all + + src/app/components/member/components/member-about/member-about.component.html + 97,98 + + See all + + + Connections + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 5 + + + src/app/pages/member/pages/activity/activity.page.html + 68 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 50,51 + + Connections + + + Awards + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 6 + + + src/app/pages/discover/pages/discover/discover.page.ts + 23 + + + src/app/pages/member/pages/member/member.page.ts + 27 + + + src/app/pages/space/pages/space/space.page.ts + 33 + + Awards + + + XP + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 7 + + + src/app/components/member/components/member-card/member-card.component.html + 31,32 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 16,17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 25,26 + + XP + + + Total reputation + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 29 + + Total reputation + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 38,39 + + awards + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 6,7 + + Display Name + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 7,8 + + Set a display name. This does not change your username. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 11 + + Display name (optional) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 18,19 + + About + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19,20 + + A brief description of yourself shown on your profile. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 22 + + Your description (optional) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 29,30 + + + src/app/pages/space/pages/upsert/upsert.page.html + 154 + + Avatar + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 30,31 + + Customise your Soonaverse identity. + + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 34,37 + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 43,44 + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 49,50 + + + src/app/pages/space/pages/upsert/upsert.page.html + 52,53 + + Networking + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 51,52 + + + src/app/pages/space/pages/upsert/upsert.page.html + 60,61 + + Invalid Github username. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 53,54 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67,68 + + Type your Github account username + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 63,64 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 206,207 + + + src/app/pages/space/pages/upsert/upsert.page.html + 80,81 + + Invalid Twitter username. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 65,66 + + + src/app/pages/space/pages/upsert/upsert.page.html + 87,88 + + Type your Twitter account username + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,76 + + Only username#1234 format supported. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 77,78 + + Type your Discord account username + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 89,90 + + Settings + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 91,92 + + Save changes + + + reputation + + src/app/components/member/components/member-reputation-drawer/member-reputation-drawer.component.html + 15 + + + src/app/components/member/components/member-reputation-modal/member-reputation-modal.component.html + 17 + + reputation + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 15,16 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 29,30 + + Make a bid + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 44,45 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 9,10 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 44,45 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46,47 + + NFT image + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 61 + + Ends + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 66 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 63 + + Royalties + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 72,73 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 116,117 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 66,67 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 69,70 + + Royalties are automatically deducted and paid to artists. + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 91 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 94 + + Current highest bid + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 92 + + + src/app/pages/nft/pages/nft/nft.page.html + 59 + + Min bid + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 95 + + + src/app/pages/nft/pages/nft/nft.page.html + 61 + + Your bid is the highest + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Current price is refreshing in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 152,153 + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 156,157 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 196,197 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 277,278 + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + + By checking this box, you agree with + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 162,163 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 108,109 + + By checking this box, you agree with + + + Terms and Conditions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 165,166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 111,112 + + Terms and Conditions + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 171 + + Make a bid + + + Send IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 180,181 + + Send IOTA to following address (please restake after!): + + + Copied + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 189 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 240 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150 + + + src/app/components/share/share.component.html + 11 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 139 + + + src/app/components/wallet-address/wallet-address.component.html + 24 + + Copied + + + Copy + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 190 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 241 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 151 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 140 + + + src/app/components/wallet-address/wallet-address.component.html + 25 + + Copy + + + Do not send funds from an exchange, always use wallets you fully control. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 201 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + Do not send funds from an exchange, always use wallets you fully control. + + + Firefly + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 210 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 166 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 151 + + Firefly + + + Tanglepay + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 219 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 300 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 175 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 160 + + Tanglepay + + + Send + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130 + + Send + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231,232 + + IOTA to following address (please restake after!): + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 247 + + Your transactions + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 253,254 + + Sent Date + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 254,255 + + Time + + + Action + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,256 + + Action + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 256,257 + + + src/app/pages/nft/pages/nft/nft.page.html + 170,171 + + + src/app/pages/nft/pages/nft/nft.page.html + 204,205 + + Amount + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 258,259 + + Detail + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 270,271 + + + src/app/pages/nft/pages/nft/nft.page.html + 171,172 + + + src/app/pages/nft/pages/nft/nft.page.html + 190,191 + + + src/app/pages/nft/pages/nft/nft.page.html + 205,206 + + + src/app/pages/nft/pages/nft/nft.page.html + 219,220 + + Link + + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 282 + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 314,315 + + Congratulations you won the NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 320 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 238 + + Close checkout + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 325 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 243 + + Show my NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 337,338 + + Bidding is expired. Good luck next time :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 227 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 368 + + Generated NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 229 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 370 + + SFT + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 47,48 + + day + + + Price + + src/app/components/nft/components/nft-card/nft-card.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 12 + + + src/app/pages/collection/pages/collection/collection.page.html + 190 + + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 65 + + + src/app/pages/market/pages/collections/collections.page.html + 162 + + + src/app/pages/market/pages/nfts/nfts.page.html + 50 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 71,72 + + + src/app/pages/nft/pages/new/single/single.page.html + 62 + + Price + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 73 + + Current bid + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 88,89 + + Owned by + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 100,101 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 155,154 + + New NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 15,16 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 29,30 + + Checkout + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 71,72 + + Total price + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 117 + + Confirm and Lock + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121 + + Your NFT will be locked for purchase for + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121,122 + + minutes + + + remaining to make the transfer. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 132,133 + + remaining to make the transfer. + + + Expired + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 133,134 + + Expired + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 137 + + We received invalid amount. Try again. + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141,142 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130,131 + + IOTA to following address (please restake after!): + + + Transaction history + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 214 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 177 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 204 + + Transaction history + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 204 + + Validating your transaction... + + + Transaction complete. Congratulations. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 232,233 + + Transaction complete. Congratulations. + + + + + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 10,11 + + + src/app/pages/collection/pages/collection/collection.page.html + 55,56 + + + src/app/pages/collection/pages/collection/collection.page.html + 70,71 + + + + + d + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26 + + d + + + h + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34 + + h + + + hours + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34,35 + + hours + + + m + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42 + + m + + + min + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42,43 + + min + + + s + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50 + + s + + + sec + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50,51 + + sec + + + Sale Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 34 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 50,51 + + Sale Starts + + + Auction Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 37 + + Auction Starts + + + Auction Ends + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 40 + + Auction Ends + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 16,17 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 31,32 + + Preview + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 59,60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 74,75 + + + src/app/pages/nft/pages/nft/nft.page.html + 43,44 + + Current price + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68,69 + + Author + + + Migrate + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100,101 + + + src/app/pages/nft/pages/nft/nft.page.html + 291,292 + + Migrate + + + Shimmer/Mainnet (Tokenization)...SOON. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 102,104 + + + src/app/pages/nft/pages/nft/nft.page.html + 293,295 + + Shimmer/Mainnet (Tokenization)...SOON. + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 108,109 + + + src/app/pages/nft/pages/nft/nft.page.html + 299,300 + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 114,115 + + + src/app/pages/nft/pages/nft/nft.page.html + 305,306 + + IPFS Metadata + + + Preparing... + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 116 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 122 + + Preparing... + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 120,121 + + + src/app/pages/nft/pages/nft/nft.page.html + 312,313 + + IPFS Image + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149,150 + + + src/app/pages/nft/pages/new/single/single.page.html + 297,298 + + + src/app/pages/nft/pages/nft/nft.page.html + 15 + + NFT Image + + + Trade info + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 3,5 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 3,4 + + Trade info + + + Floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 12 + + Floor price + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 41 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 40,41 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 101,102 + + + src/app/pages/nft/pages/new/single/single.page.html + 90,91 + + Available On is required. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 50 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 49,50 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 112,113 + + + src/app/pages/nft/pages/new/single/single.page.html + 100,101 + + Available on + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 57 + + Various auction length coming next sprint once community have a vote! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + Duration of auction is 3 days + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 158 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 91,92 + + Once your listing is complete, you will get a confirmation message. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 159 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Confirm listing + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 62,63 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 532,533 + + Open Sale + + + Specific member(s) only (Transfer) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Specific member(s) only (Transfer) + + + Reserve for specific buyer + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 82,83 + + Reserve for specific buyer + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2,4 + + Trade history + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 6,8 + + Item is yours and yours only + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 11 + + This will make your item unavailable for sale. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 12 + + Stop sale! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 16,17 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 31,32 + + List Item for sale + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 86,87 + + Not for sale + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 90,91 + + Fixed price + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 94,95 + + Auction + + + Donut graph coming SOON. + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 40,41 + + Donut graph coming SOON. + + + Commencing + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 5,6 + + Commencing + + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 7,8 + + In-Progress + + + Completed + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 9,10 + + Completed + + + + Share + + src/app/components/share/share.component.html + 5,6 + + + src/app/components/share/share.component.html + 18,19 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 14,15 + + Share + + + Copy to clipboard + + src/app/components/share/share.component.html + 12 + + Copy to clipboard + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 2,3 + + + src/app/pages/award/pages/new/new.page.html + 109,110 + + + src/app/pages/proposal/pages/new/new.page.html + 248,249 + + Space is required. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 11,12 + + Select Space + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 65,67 + + + src/app/pages/award/pages/new/new.page.html + 138,139 + + + src/app/pages/proposal/pages/new/new.page.html + 277,278 + + Select a space + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 14,13 + + All Spaces + + + No Connections + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 2,3 + + No Connections + + + Rep. weight + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 7,8 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 68,69 + + Rep. weight + + + Status + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 8,9 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 72,73 + + Status + + + Established + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 33 + + Established + + + Recognised + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 34 + + Recognised + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 11,12 + + + src/app/pages/member/pages/member/member.page.html + 30 + + Joined + + + members + + src/app/components/space/components/space-card/space-card.component.html + 28 + + + src/app/pages/discover/pages/members/members.page.html + 55,56 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 10,11 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 35,36 + + members + + + Value range is 0-1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 8 + + Value range is 0-1000 + + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 30,31 + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + + Equal + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 39 + + Equal + + + Half + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 40 + + Half + + + Double + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 41 + + Double + + + Earned Badge + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + Earned Badge + + + with + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + with + + + Show less + + src/app/components/timeline-badges/timeline-badges.component.html + 38 + + + src/app/components/timeline-nft/timeline-nft.component.html + 114 + + Show less + + + Show more + + src/app/components/timeline-badges/timeline-badges.component.html + 39 + + + src/app/components/timeline-nft/timeline-nft.component.html + 115 + + Show more + + + Timeline + + src/app/components/timeline-nft/timeline-nft.component.html + 1 + + Timeline + + + Listed by + + src/app/components/timeline-nft/timeline-nft.component.html + 20 + + Listed by + + + Made available for auction by + + src/app/components/timeline-nft/timeline-nft.component.html + 23 + + Made available for auction by + + + Purchased by + + src/app/components/timeline-nft/timeline-nft.component.html + 59 + + Purchased by + + + details + + src/app/components/timeline-nft/timeline-nft.component.html + 61 + + details + + + Invalid + + src/app/components/timeline-nft/timeline-nft.component.html + 73,74 + + Invalid + + + Listed by space + + src/app/components/timeline-nft/timeline-nft.component.html + 104 + + Listed by space + + + Bill (owner) + + src/app/components/timeline-nft/timeline-nft.component.ts + 46 + + Bill (owner) + + + Bill (royalty) + + src/app/components/timeline-nft/timeline-nft.component.ts + 48 + + Bill (royalty) + + + Credit + + src/app/components/timeline-nft/timeline-nft.component.ts + 51 + + Credit + + + Payment + + src/app/components/timeline-nft/timeline-nft.component.ts + 53 + + Payment + + + Order + + src/app/components/timeline-nft/timeline-nft.component.ts + 55 + + Order + + + Generate address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 12,13 + + Generate address + + + Make transaction + + src/app/components/wallet-address/iota-address/iota-address.component.html + 33,34 + + Make transaction + + + Wait for confirmation + + src/app/components/wallet-address/iota-address/iota-address.component.html + 55,56 + + Wait for confirmation + + + Confirmed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 78,79 + + Confirmed + + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/iota-address/iota-address.component.html + 104,105 + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/iota-address/iota-address.component.html + 105 + + space + + + profile + + src/app/components/wallet-address/iota-address/iota-address.component.html + 106 + + profile + + + for future transactions. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 107,108 + + for future transactions. + + + Generate new address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 111 + + Generate new address + + + Send a small + + src/app/components/wallet-address/iota-address/iota-address.component.html + 120 + + Send a small + + + amount to validate your address. This expires in + + src/app/components/wallet-address/iota-address/iota-address.component.html + 121 + + amount to validate your address. This expires in + + + Expired. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 123,124 + + Expired. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 172 + + Wait for transaction to be validated. We will send back your transaction once completed + + + Validating address... + + src/app/components/wallet-address/iota-address/iota-address.component.html + 194 + + Validating address... + + + Now you can deal with NFT`s + + src/app/components/wallet-address/iota-address/iota-address.component.html + 221,222 + + Now you can deal with NFT`s + + + Finish Verification + + src/app/components/wallet-address/iota-address/iota-address.component.html + 225 + + Finish Verification + + + Not verified + + src/app/components/wallet-address/wallet-address.component.html + 4,5 + + Not verified + + + Verify wallet + + src/app/components/wallet-address/wallet-address.component.html + 9,10 + + Verify wallet + + + Verified + + src/app/components/wallet-address/wallet-address.component.html + 18,19 + + Verified + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 43 + + Verify your + + + address + + src/app/components/wallet-address/wallet-address.component.html + 43 + + + src/app/components/wallet-address/wallet-address.component.html + 59 + + address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 59 + + Verify your + + + Detailed Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Detailed Info + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.html + 3,4 + + Badges used / available + + + End Date + + src/app/pages/award/pages/award/award-info/award-info.component.html + 9,10 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 50 + + End Date + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 16 + + Owner + + + Award info + + src/app/pages/award/pages/award/award.page.html + 5,6 + + + src/app/pages/award/pages/new/new.page.html + 17,18 + + Award info + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 81,82 + + + src/app/pages/award/pages/award/award.page.html + 176,177 + + Check out award + + + Approve Award + + src/app/pages/award/pages/award/award.page.html + 91,92 + + Approve Award + + + Approve + + src/app/pages/award/pages/award/award.page.html + 103 + + Approve + + + Decline + + src/app/pages/award/pages/award/award.page.html + 114 + + Decline + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 128,129 + + Confirm your participation + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 136,137 + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 142,143 + + Provide description or link to your work. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 151 + + Submit + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 35 + + + src/app/pages/space/pages/space/space.page.ts + 30 + + Overview + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 94 + + Participants + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2,4 + + New Award + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14,15 + + + src/app/pages/proposal/pages/new/new.page.html + 23,24 + + Title is required. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19,20 + + Title and description will be included on the Award. End date determines the duration of the Award. + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 23,24 + + You must enter name. + + + Title + + src/app/pages/award/pages/new/new.page.html + 28 + + + src/app/pages/proposal/pages/new/new.page.html + 28 + + + src/app/pages/space/pages/upsert/upsert.page.html + 29 + + Title + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 35,36 + + + src/app/pages/proposal/pages/new/new.page.html + 51,52 + + End Date is required. + + + End + + src/app/pages/award/pages/new/new.page.html + 45 + + + src/app/pages/proposal/pages/new/new.page.html + 62 + + End + + + Award description + + src/app/pages/award/pages/new/new.page.html + 55,56 + + Award description + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 66,67 + + Badge definition + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 68,69 + + Title and description will be included on the badge. + + + Badge Title is required. + + src/app/pages/award/pages/new/new.page.html + 73,74 + + Badge Title is required. + + + Badge Title + + src/app/pages/award/pages/new/new.page.html + 78,79 + + Badge Title + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 89,90 + + Badge description + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 103,104 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 363,364 + + + src/app/pages/proposal/pages/new/new.page.html + 242,243 + + Space Info + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 105,106 + + This is the space that will list the award. + + + Reward Info + + src/app/pages/award/pages/new/new.page.html + 155,156 + + Reward Info + + + Defines the amount of XP for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 157,158 + + Defines the amount of XP for each badge and the number of badges available. + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 162,163 + + + src/app/pages/award/pages/new/new.page.html + 182,183 + + Minimum 1 and maximum 10000. + + + Total XP (Max 10000) + + src/app/pages/award/pages/new/new.page.html + 167,168 + + Total XP (Max 10000) + + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + src/app/pages/award/pages/new/new.page.html + 177,178 + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + + Number of Badges + + src/app/pages/award/pages/new/new.page.html + 187,188 + + Number of Badges + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 197,198 + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + + Badge + + src/app/pages/award/pages/new/new.page.html + 206 + + Badge + + + What the badge looks like. + + src/app/pages/award/pages/new/new.page.html + 207,208 + + What the badge looks like. + + + Mint an unique NTT badge. + + src/app/pages/award/pages/new/new.page.html + 216,217 + + Mint an unique NTT badge. + + + Mint Avatar + + src/app/pages/award/pages/new/new.page.html + 225 + + Mint Avatar + + + WOW! Now reward your members with it! + + src/app/pages/award/pages/new/new.page.html + 238,239 + + WOW! Now reward your members with it! + + + Award Setup + + src/app/pages/award/pages/new/new.page.html + 245,246 + + Award Setup + + + Defines who and how can get a badge. + + src/app/pages/award/pages/new/new.page.html + 247,248 + + Defines who and how can get a badge. + + + Guardian approval + + src/app/pages/award/pages/new/new.page.html + 254,255 + + Guardian approval + + + The award must be approved by the guardians of the space before it's active or distributed + + src/app/pages/award/pages/new/new.page.html + 260,261 + + The award must be approved by the guardians of the space before it's active or distributed + + + Discord Activity + + src/app/pages/award/pages/new/new.page.html + 265,266 + + Discord Activity + + + Github Activity + + src/app/pages/award/pages/new/new.page.html + 275,276 + + Github Activity + + + Custom and more + + src/app/pages/award/pages/new/new.page.html + 285,286 + + Custom and more + + + Create award + + src/app/pages/award/pages/new/new.page.html + 310,311 + + Create award + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2,3 + + Award Description + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 39 + + + src/app/pages/award/pages/participants/participants.page.html + 46,47 + + + src/app/pages/proposal/pages/participants/participants.page.html + 24 + + + src/app/pages/proposal/pages/participants/participants.page.html + 31,32 + + Find Participant + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 51 + + + src/app/pages/proposal/pages/participants/participants.page.html + 36 + + + src/app/pages/space/pages/members/members.page.html + 49,50 + + Showing only few top records... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 59 + + + src/app/pages/proposal/pages/participants/participants.page.html + 44 + + No Participants + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 71 + + Reward + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 82 + + Reward again + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 39 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 131 + + + src/app/pages/space/pages/awards/awards.page.ts + 23 + + + src/app/pages/space/pages/collections/collections.page.ts + 23 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 23 + + Pending + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 40 + + Issued + + + Visit website + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 7,8 + + Visit website + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 18,19 + + Who can buy? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 22,23 + + Open sale + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 28,29 + + Space Members Only + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 34,35 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 40,41 + + Space Members with Badge Only + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 46,47 + + Must hold at least one NFT from each selected Collections + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51,52 + + (One NFT per member) + + + The badges you need + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 78 + + The badges you need + + + Resources + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89 + + Resources + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 114 + + Member discounts + + + Discount for members with XP + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 119 + + Discount for members with XP + + + Guardians of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 47 + + Guardians of Space Only + + + Members of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 49 + + Members of Space Only + + + Members With Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 51 + + Members With Badge Only + + + Check out collection + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 72 + + Check out collection + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 3 + + About collection + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 11 + + Limited edition + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 26 + + + src/app/pages/collection/pages/collection/collection.page.html + 118 + + Publish Collection + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 30 + + + src/app/pages/collection/pages/collection/collection.page.html + 122 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 36 + + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Cancel Collection + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 132 + + Edit Collection + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 69,70 + + Royalties goes to + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 79,80 + + Starts at + + + Items + + src/app/pages/collection/pages/collection/collection.page.html + 86,87 + + Items + + + Price starts at + + src/app/pages/collection/pages/collection/collection.page.html + 96,97 + + Price starts at + + + Sale in progress + + src/app/pages/collection/pages/collection/collection.page.html + 104,105 + + Sale in progress + + + remaining + + src/app/pages/collection/pages/collection/collection.page.html + 106,107 + + + src/app/pages/nft/pages/nft/nft.page.html + 86,87 + + remaining + + + Find item + + src/app/pages/collection/pages/collection/collection.page.html + 156 + + + src/app/pages/member/pages/nfts/nfts.page.html + 12 + + Find item + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 166,167 + + + src/app/pages/nft/pages/new/new.page.html + 2,3 + + Create NFT + + + Recent + + src/app/pages/collection/pages/collection/collection.page.html + 192 + + + src/app/pages/collection/pages/collection/collection.page.html + 209 + + + src/app/pages/discover/pages/awards/awards.page.html + 20 + + + src/app/pages/discover/pages/awards/awards.page.html + 31 + + + src/app/pages/discover/pages/collections/collections.page.html + 40 + + + src/app/pages/discover/pages/collections/collections.page.html + 51 + + + src/app/pages/discover/pages/members/members.page.html + 31 + + + src/app/pages/discover/pages/members/members.page.html + 42 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 20 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 31 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 20 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 33 + + + src/app/pages/market/pages/collections/collections.page.html + 154 + + + src/app/pages/market/pages/collections/collections.page.html + 171 + + + src/app/pages/market/pages/nfts/nfts.page.html + 42 + + + src/app/pages/market/pages/nfts/nfts.page.html + 59 + + Recent + + + Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 193 + + + src/app/pages/market/pages/collections/collections.page.html + 155 + + + src/app/pages/market/pages/nfts/nfts.page.html + 43 + + + src/app/pages/market/pages/nfts/nfts.page.html + 60 + + Low to High + + + High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 194 + + + src/app/pages/market/pages/collections/collections.page.html + 156 + + + src/app/pages/market/pages/nfts/nfts.page.html + 44 + + + src/app/pages/market/pages/nfts/nfts.page.html + 61 + + High to Low + + + Sort by + + src/app/pages/collection/pages/collection/collection.page.html + 199 + + + src/app/pages/discover/pages/awards/awards.page.html + 18 + + + src/app/pages/discover/pages/awards/awards.page.html + 24,25 + + + src/app/pages/discover/pages/collections/collections.page.html + 37,38 + + + src/app/pages/discover/pages/collections/collections.page.html + 44,45 + + + src/app/pages/discover/pages/members/members.page.html + 29 + + + src/app/pages/discover/pages/members/members.page.html + 35,36 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 18 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 24,25 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 18 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 24,25 + + + src/app/pages/market/pages/collections/collections.page.html + 152 + + + src/app/pages/market/pages/collections/collections.page.html + 161 + + + src/app/pages/market/pages/nfts/nfts.page.html + 40 + + + src/app/pages/market/pages/nfts/nfts.page.html + 49 + + Sort by + + + Price: Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 210 + + + src/app/pages/market/pages/collections/collections.page.html + 172 + + Price: Low to High + + + Price: High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 211 + + + src/app/pages/market/pages/collections/collections.page.html + 173 + + Price: High to Low + + + No NFTs + + src/app/pages/collection/pages/collection/collection.page.html + 233 + + + src/app/pages/market/pages/nfts/nfts.page.html + 84 + + + src/app/pages/member/pages/nfts/nfts.page.html + 32 + + + src/app/pages/nft/pages/nft/nft.page.html + 375 + + No NFTs + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2,3 + + Create new collection + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3,5 + + Edit collection + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18,19 + + Collection info + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20,21 + + Name and description will be included on the Collection. + + + Name + + src/app/pages/collection/pages/upsert/upsert.page.html + 30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 70,71 + + + src/app/pages/nft/pages/new/single/single.page.html + 26 + + Name + + + Description + + src/app/pages/collection/pages/upsert/upsert.page.html + 40,41 + + + src/app/pages/nft/pages/new/single/single.page.html + 36,37 + + Description + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 53,54 + + + src/app/pages/nft/pages/new/single/single.page.html + 49,50 + + Sales info + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 55,56 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 118 + + Royalty + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 120 + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 131,132 + + Royalties - Percentage fee + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 141,142 + + Example: 10 % , 20 % , etc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 150 + + Royalties goes to a different space + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 158,159 + + Royalties goes to a different space + + + Links + + src/app/pages/collection/pages/upsert/upsert.page.html + 181 + + Links + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 182,183 + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 187,188 + + Invalid URL. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 213,214 + + Link to your Twitter account + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 226,227 + + Invalid Discord username. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 233,234 + + Link to your Discord account + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 248,249 + + Discounts + + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + src/app/pages/collection/pages/upsert/upsert.page.html + 250,251 + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 298 + + Discount + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 311 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + Discount Amount + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 350,351 + + Add discount level + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 365,366 + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 383,384 + + Collection Type + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 385,386 + + Each type has different characteristics. This cannot be changed after creation. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 417 + + + src/app/pages/space/pages/upsert/upsert.page.html + 192 + + Banner + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 443 + + Banner is required. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + Placeholder + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 478 + + Placeholder is required. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 488,489 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 501,502 + + + src/app/pages/market/pages/collections/collections.page.html + 132,133 + + + src/app/pages/market/pages/collections/collections.page.html + 137,138 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 116,117 + + Category + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 490,491 + + Category is used when filtering content. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 494,495 + + Category. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 519,520 + + Collection Setup + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 521,522 + + Who has access to a given collection. + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 537,538 + + Everyone has access to this collection. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 547,548 + + Only Space Guardians can access. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 558,559 + + Only Space Members can access. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 569,570 + + Only Space Members with badge can access. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 585,586 + + Collection Options + + + Limited Edition + + src/app/pages/collection/pages/upsert/upsert.page.html + 590 + + Limited Edition + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 606 + + One NFT per Member Only + + + Select Collections + + src/app/pages/collection/pages/upsert/upsert.page.html + 629,630 + + Select Collections + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 677,678 + + Create collection + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 690,691 + + Save collection + + + Member seems to log out during the file upload request. + + src/app/pages/collection/pages/upsert/upsert.page.ts + 317 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 195 + + + src/app/pages/nft/pages/new/single/single.page.ts + 154 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 107 + + Member seems to log out during the file upload request. + + + My Overview + + src/app/pages/dashboard/dashboard.page.html + 2,3 + + My Overview + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 6,7 + + Pending Membership Requests + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 14,15 + + Your spaces + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 23 + + No Spaces yet + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 25,26 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 36,37 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 48,49 + + Active proposals + + + Oldest + + src/app/pages/discover/pages/awards/awards.page.html + 21 + + + src/app/pages/discover/pages/awards/awards.page.html + 32 + + + src/app/pages/discover/pages/collections/collections.page.html + 41 + + + src/app/pages/discover/pages/collections/collections.page.html + 52 + + + src/app/pages/discover/pages/members/members.page.html + 32 + + + src/app/pages/discover/pages/members/members.page.html + 43 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 21 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 32 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 21 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 34 + + Oldest + + + No Awards + + src/app/pages/discover/pages/awards/awards.page.html + 54 + + + src/app/pages/member/pages/awards/awards.page.html + 19 + + + src/app/pages/space/pages/awards/awards.page.html + 35 + + No Awards + + + collections + + src/app/pages/discover/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 185,186 + + collections + + + No Collections + + src/app/pages/discover/pages/collections/collections.page.html + 75 + + + src/app/pages/space/pages/collections/collections.page.html + 38 + + No Collections + + + Discover Soonaverse + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Discover Soonaverse + + + Enter the first few letters to search... + + src/app/pages/discover/pages/discover/discover.page.html + 7 + + Enter the first few letters to search... + + + Spaces + + src/app/pages/discover/pages/discover/discover.page.ts + 21 + + + src/app/pages/member/pages/member/member.page.ts + 29 + + Spaces + + + Collections + + src/app/pages/discover/pages/discover/discover.page.ts + 22 + + + src/app/pages/market/pages/market/market.page.ts + 23 + + + src/app/pages/space/pages/space/space.page.ts + 31 + + Collections + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 24 + + + src/app/pages/space/pages/space/space.page.ts + 32 + + Proposals + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 25 + + + src/app/pages/space/pages/space/space.page.ts + 34 + + Members + + + Include connections + + src/app/pages/discover/pages/members/members.page.html + 23,24 + + + src/app/pages/member/pages/activity/activity.page.html + 28,29 + + + src/app/pages/member/pages/spaces/member-spaces.component.html + 5,6 + + Include connections + + + (Select some space) + + src/app/pages/discover/pages/members/members.page.html + 24 + + + src/app/pages/member/pages/activity/activity.page.html + 29 + + (Select some space) + + + No Members + + src/app/pages/discover/pages/members/members.page.html + 66 + + + src/app/pages/space/pages/members/members.page.html + 58 + + No Members + + + proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 43,44 + + proposals + + + No Proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 55 + + + src/app/pages/space/pages/proposals/proposals.page.html + 35 + + No Proposals + + + No Spaces + + src/app/pages/discover/pages/spaces/spaces.page.html + 56 + + No Spaces + + + Open + + src/app/pages/discover/pages/spaces/spaces.page.ts + 29 + + Open + + + Welcome to The Soonaverse + + src/app/pages/home/home.page.html + 5,6 + + Welcome to The Soonaverse + + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + src/app/pages/home/home.page.html + 8,9 + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + + Join Us + + src/app/pages/home/home.page.html + 19,20 + + Join Us + + + Marketplace + + src/app/pages/home/home.page.html + 31 + + Marketplace + + + See Docs + + src/app/pages/home/home.page.html + 43,44 + + See Docs + + + Get started with the Soonaverse + + src/app/pages/home/home.page.html + 52,53 + + Get started with the Soonaverse + + + Not sure where to start? Find featured spaces and NFT Collections below. + + src/app/pages/home/home.page.html + 54 + + Not sure where to start? Find featured spaces and NFT Collections below. + + + Trending Collections + + src/app/pages/home/home.page.html + 60,61 + + Trending Collections + + + Go to Marketplace + + src/app/pages/home/home.page.html + 70 + + Go to Marketplace + + + Discover more + + src/app/pages/home/home.page.html + 86 + + + src/app/pages/home/home.page.html + 102 + + + src/app/pages/home/home.page.html + 122 + + Discover more + + + Popular spaces + + src/app/pages/home/home.page.html + 92,93 + + Popular spaces + + + Creating your community is easy as 1-2-3 + + src/app/pages/home/home.page.html + 130,131 + + Creating your community is easy as 1-2-3 + + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + src/app/pages/home/home.page.html + 132,133 + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + + StepArticle image + + src/app/pages/home/home.page.html + 143,144 + + StepArticle image + + + Voting is essential and it needs to be on-chain and FREE. + + src/app/pages/home/home.page.html + 162 + + Voting is essential and it needs to be on-chain and FREE. + + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + src/app/pages/home/home.page.html + 165,167 + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + + Go there now + + src/app/pages/home/home.page.html + 177 + + Go there now + + + Want to learn more about SoonLabs? + + src/app/pages/home/home.page.html + 202,203 + + Want to learn more about SoonLabs? + + + Visit YouTube + + src/app/pages/home/home.page.html + 213 + + Visit YouTube + + + Who’s using the Soonaverse? + + src/app/pages/home/home.page.html + 222,224 + + Who’s using the Soonaverse? + + + Investors + + src/app/pages/home/home.page.html + 275,276 + + Investors + + + Privacy + + src/app/pages/home/home.page.html + 285,286 + + Privacy + + + Terms + + src/app/pages/home/home.page.html + 295,296 + + Terms + + + Powered by SoonLabs + + src/app/pages/home/home.page.html + 306,307 + + + src/app/pages/home/home.page.html + 318,319 + + Powered by SoonLabs + + + Create your community + + src/app/pages/home/home.page.ts + 33,31 + + Create your community + + + Feeless, secure, on-chain voting, and “one click” creation tools. + + src/app/pages/home/home.page.ts + 34 + + Feeless, secure, on-chain voting, and “one click” creation tools. + + + Build reputation and rewards + + src/app/pages/home/home.page.ts + 38,36 + + Build reputation and rewards + + + Create incentives and build reputation, trust and community engagement. + + src/app/pages/home/home.page.ts + 39 + + Create incentives and build reputation, trust and community engagement. + + + Manage, Maintain, Grow + + src/app/pages/home/home.page.ts + 43,41 + + Manage, Maintain, Grow + + + Governance, voting, for both public and private communities. + + src/app/pages/home/home.page.ts + 44 + + Governance, voting, for both public and private communities. + + + NFTs + + src/app/pages/market/pages/collections/collections.page.html + 12,13 + + + src/app/pages/market/pages/nfts/nfts.page.html + 13,14 + + + src/app/pages/member/pages/member/member.page.ts + 30 + + NFTs + + + Select Access type + + src/app/pages/market/pages/collections/collections.page.html + 20,21 + + Select Access type + + + All accesses + + src/app/pages/market/pages/collections/collections.page.html + 25,26 + + + src/app/pages/market/pages/collections/collections.page.html + 32,33 + + + src/app/pages/market/pages/collections/collections.page.html + 111 + + All accesses + + + Open sale + + src/app/pages/market/pages/collections/collections.page.html + 38,39 + + + src/app/pages/market/pages/collections/collections.page.html + 45,46 + + + src/app/pages/market/pages/collections/collections.page.html + 112 + + Open sale + + + Space members only + + src/app/pages/market/pages/collections/collections.page.html + 51,52 + + + src/app/pages/market/pages/collections/collections.page.html + 58,59 + + + src/app/pages/market/pages/collections/collections.page.html + 113 + + Space members only + + + Space guardians only + + src/app/pages/market/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 71,72 + + + src/app/pages/market/pages/collections/collections.page.html + 114 + + Space guardians only + + + Space members with badge only + + src/app/pages/market/pages/collections/collections.page.html + 77,78 + + + src/app/pages/market/pages/collections/collections.page.html + 84,85 + + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Space members with badge only + + + At least one NFT from collections + + src/app/pages/market/pages/collections/collections.page.html + 90,91 + + + src/app/pages/market/pages/collections/collections.page.html + 97,98 + + + src/app/pages/market/pages/collections/collections.page.html + 116 + + At least one NFT from collections + + + No collections + + src/app/pages/market/pages/collections/collections.page.html + 196 + + No collections + + + Marketplace + + src/app/pages/market/pages/market/market.page.html + 2,4 + + Marketplace + + + Spaces, awards, proposals or members... + + src/app/pages/market/pages/market/market.page.html + 7 + + Spaces, awards, proposals or members... + + + NFT's + + src/app/pages/market/pages/market/market.page.ts + 24 + + NFT's + + + On Auction + + src/app/pages/market/pages/nfts/nfts.page.ts + 40,37 + + On Auction + + + Owned + + src/app/pages/market/pages/nfts/nfts.page.ts + 41 + + + src/app/pages/nft/pages/nft/nft.page.html + 6,7 + + Owned + + + View space + + src/app/pages/member/pages/activity/activity.page.html + 20,21 + + View space + + + Awards Completed + + src/app/pages/member/pages/activity/activity.page.html + 37 + + Awards Completed + + + Total Reputation + + src/app/pages/member/pages/activity/activity.page.html + 39 + + Total Reputation + + + Earned badges + + src/app/pages/member/pages/activity/activity.page.html + 47 + + Earned badges + + + More + + src/app/pages/member/pages/activity/activity.page.html + 51,52 + + More + + + Reputation + + src/app/pages/member/pages/activity/activity.page.html + 72,73 + + Reputation + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 6,7 + + Pending + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + Issued + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 21,22 + + Discover Awards + + + No Badges yet + + src/app/pages/member/pages/badges/badges.page.html + 19,20 + + No Badges yet + + + Discover Badges + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Discover Badges + + + My profile + + src/app/pages/member/pages/member/member.page.html + 9 + + My profile + + + Profile + + src/app/pages/member/pages/member/member.page.html + 10 + + Profile + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 15,16 + + Profile info + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 26 + + Activity + + + Badges + + src/app/pages/member/pages/member/member.page.ts + 28 + + Badges + + + (Join space with alliance) + + src/app/pages/member/pages/spaces/member-spaces.component.html + 6 + + (Join space with alliance) + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 44,45 + + Some files have not been uploaded + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 48,49 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 57 + + Uploaded CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 69,70 + + Filename + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 92,93 + + Error + + + Select collection + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 123,124 + + + src/app/pages/nft/pages/new/single/single.page.html + 349,350 + + Select collection + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136,137 + + Upload existing CSV + + + Upload back once you generate bellow + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138,139 + + Upload back once you generate bellow + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 166 + + You have to upload images first. + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 191,192 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Single + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Multiple + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14,15 + + NFT info + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16,17 + + Name and description will be included on the NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 21,22 + + Name is required. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 32,33 + + Description is required. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 51,52 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + + Properties + + src/app/pages/nft/pages/new/single/single.page.html + 111,112 + + Properties + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 113,114 + + Properties show up underneath your item. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 120,121 + + Property name (E.g. Character) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 121,122 + + Value (E.g. Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 133,134 + + + src/app/pages/nft/pages/new/single/single.page.html + 166,168 + + + src/app/pages/nft/pages/new/single/single.page.html + 173,174 + + Property name + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 144 + + + src/app/pages/nft/pages/new/single/single.page.html + 178,180 + + + src/app/pages/nft/pages/new/single/single.page.html + 186 + + + src/app/pages/nft/pages/new/single/single.page.html + 236 + + + src/app/pages/nft/pages/new/single/single.page.html + 270,272 + + + src/app/pages/nft/pages/new/single/single.page.html + 276 + + Value + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 159 + + Property + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 196,197 + + Add property + + + Stats + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Stats + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 205,206 + + Stats show up underneath your item. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 212,213 + + Stats name (E.g. Stamina) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 213,214 + + Value (E.g. 10, 1/10 , etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 225,226 + + + src/app/pages/nft/pages/new/single/single.page.html + 258,260 + + + src/app/pages/nft/pages/new/single/single.page.html + 265,266 + + Stat name + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 251 + + Stat + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287,288 + + Add stat + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 299,300 + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 324 + + Media is required + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 338,339 + + Select one of your collections to display this NFT. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 371,372 + + Create NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 381,382 + + Preview NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 142 + + File name is not valid + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 4,5 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 248,249 + + Check out nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 58 + + Current highest bid + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 94 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 102 + + Sale hasn't started yet + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 110 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 118 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 123,124 + + Sell NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 124,125 + + Change Fixed Price + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 125,126 + + Change Auction + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + Place bid + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 138 + + Buy now + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 151,152 + + Current Bids + + + My Bids + + src/app/pages/nft/pages/nft/nft.page.html + 155,156 + + My Bids + + + My Transactions + + src/app/pages/nft/pages/nft/nft.page.html + 159,160 + + My Transactions + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 168,169 + + Member + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 169,170 + + Bidded on + + + Date + + src/app/pages/nft/pages/nft/nft.page.html + 202,203 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 8,9 + + Date + + + Type + + src/app/pages/nft/pages/nft/nft.page.html + 203,204 + + Type + + + On-Chain Record + + src/app/pages/nft/pages/nft/nft.page.html + 276,277 + + On-Chain Record + + + Preparing... + + src/app/pages/nft/pages/nft/nft.page.html + 277,278 + + Preparing... + + + View + + src/app/pages/nft/pages/nft/nft.page.html + 280,281 + + + src/app/pages/nft/pages/nft/nft.page.html + 308,309 + + + src/app/pages/nft/pages/nft/nft.page.html + 315,316 + + View + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 285,286 + + View all of the transaction details of this NFT on the Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 340,341 + + About the collection + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 343,344 + + Show + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 344 + + collection + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 353,355 + + by + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2,4 + + New Proposal + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17,18 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 5,6 + + Proposal info + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19,20 + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 35,36 + + Start Date is required. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 45 + + Start + + + Commencing milestone. + + src/app/pages/proposal/pages/new/new.page.html + 69,70 + + Commencing milestone. + + + Commencing milestone + + src/app/pages/proposal/pages/new/new.page.html + 76,77 + + Commencing milestone + + + Start milestone. + + src/app/pages/proposal/pages/new/new.page.html + 83,84 + + Start milestone. + + + Start milestone + + src/app/pages/proposal/pages/new/new.page.html + 90,91 + + Start milestone + + + End milestone. + + src/app/pages/proposal/pages/new/new.page.html + 97,98 + + End milestone. + + + End milestone + + src/app/pages/proposal/pages/new/new.page.html + 104,105 + + End milestone + + + Proposal description is required. + + src/app/pages/proposal/pages/new/new.page.html + 112,113 + + Proposal description is required. + + + Proposal description + + src/app/pages/proposal/pages/new/new.page.html + 117,118 + + Proposal description + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 127,128 + + Question Info + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 129,130 + + Title and description will only be displayed for this question. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 136,137 + + Question Title is required. + + + Question Title + + src/app/pages/proposal/pages/new/new.page.html + 140,141 + + Question Title + + + Question description + + src/app/pages/proposal/pages/new/new.page.html + 152,153 + + Question description + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 178,179 + + Text and description for each individual answer. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 183,184 + + Answer Text is required. + + + Answer Text + + src/app/pages/proposal/pages/new/new.page.html + 187,188 + + Answer Text + + + Answer description + + src/app/pages/proposal/pages/new/new.page.html + 198,199 + + Answer description + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 233,234 + + Add Choice + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 244,245 + + This is the space that will list the proposal. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 292,293 + + Proposal Setup + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 294,295 + + Defines who has access to the proposal and what is the voting method. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 299 + + Target Participants + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 306,307 + + All Guardians + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 312,313 + + Only guardians can vote on this proposal + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 316,317 + + All Members + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 322,323 + + All members can vote on this proposal + + + IOTA Token Holders + + src/app/pages/proposal/pages/new/new.page.html + 327,328 + + IOTA Token Holders + + + All IOTA token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 333,334 + + All IOTA token holders can vote. + + + Voting Type + + src/app/pages/proposal/pages/new/new.page.html + 341 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 55 + + Voting Type + + + Member - One Vote + + src/app/pages/proposal/pages/new/new.page.html + 348,349 + + Member - One Vote + + + Each member of the space gets one vote + + src/app/pages/proposal/pages/new/new.page.html + 354,355 + + Each member of the space gets one vote + + + XP Reputation - Space + + src/app/pages/proposal/pages/new/new.page.html + 362,363 + + XP Reputation - Space + + + Votes are weighted based on total amount of XP a member has in the space + + src/app/pages/proposal/pages/new/new.page.html + 368,369 + + Votes are weighted based on total amount of XP a member has in the space + + + XP Reputation - Space + Connection + + src/app/pages/proposal/pages/new/new.page.html + 378,379 + + XP Reputation - Space + Connection + + + Votes are weighted based on total amount of XP a member has in the space & connections + + src/app/pages/proposal/pages/new/new.page.html + 384,385 + + Votes are weighted based on total amount of XP a member has in the space & connections + + + XP Reputation - Selected Badges + + src/app/pages/proposal/pages/new/new.page.html + 394,395 + + XP Reputation - Selected Badges + + + Votes are weighted based on total amount of XP a member has for selected badges + + src/app/pages/proposal/pages/new/new.page.html + 400,401 + + Votes are weighted based on total amount of XP a member has for selected badges + + + Reputation Options + + src/app/pages/proposal/pages/new/new.page.html + 412,413 + + Reputation Options + + + Set Minimum Weight + + src/app/pages/proposal/pages/new/new.page.html + 423,424 + + Set Minimum Weight + + + Select Badge + + src/app/pages/proposal/pages/new/new.page.html + 438,439 + + Select Badge + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 465,466 + + Create Proposal + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 322 + + Choice + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + badge + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 2,3 + + Final Results + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 58,59 + + Proposal Description + + + Voted + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 3,4 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 38 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 129 + + Voted + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 4,5 + + Vote Now + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 5 + + Voting starts + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 9 + + You are not part of the vote + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 12 + + In order to vote, you must be part of the space before proposal was created. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 18 + + Log in to vote + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 21 + + In order to vote, you must login first. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 27 + + Pending Guardian Approval + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 30 + + This proposal has not been approved by any Guardian yet. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 52 + + Weight + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 37 + + Pending Vote + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 124 + + joined soonaverse on + + + Voter + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 7,8 + + Voter + + + Option + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 9,10 + + Option + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 26 + + Approve + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 28 + + Decline + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 34,35 + + Current Milestone + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 39 + + Commence Date + + + Start Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 45 + + Start Date + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 56 + + Voting Type of this proposal. + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 60 + + Total Weight + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 61 + + Total weight within this proposal for all participants. + + + Export to JSON + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 65,67 + + Export to JSON + + + Cast your vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 50,51 + + Cast your vote + + + Open Firefly to Vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 53 + + Open Firefly to Vote + + + Voting instructions + + src/app/pages/proposal/pages/proposal/proposal.page.html + 55 + + Voting instructions + + + You will select your options and execute the vote within Firefly. + + src/app/pages/proposal/pages/proposal/proposal.page.html + 57,58 + + You will select your options and execute the vote within Firefly. + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 64,65 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 117,118 + + Check out proposal + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 70,71 + + Current Results + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 91 + + Selected Badges + + + New + + src/app/pages/space/pages/awards/awards.page.html + 23,24 + + + src/app/pages/space/pages/collections/collections.page.html + 25,26 + + + src/app/pages/space/pages/proposals/proposals.page.html + 23,24 + + New + + + award + + src/app/pages/space/pages/awards/awards.page.html + 24 + + award + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 24 + + + src/app/pages/space/pages/members/members.page.html + 24 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 24 + + Active + + + Active + + src/app/pages/space/pages/members/members.page.html + 9 + + Active + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 18 + + Blocked + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 28 + + Blocked + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 35 + + + src/app/pages/space/pages/members/members.page.html + 43,44 + + Find Member + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 63 + + joined space on + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 78,79 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 81,82 + + Make Guardian + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 84,86 + + Accept Member + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 89,91 + + Block Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 91,93 + + Unblock Member + + + Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 3,5 + + Active Proposals + + + No Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 11 + + No Active Proposals + + + Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 24,26 + + Active Awards + + + No Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 32 + + No Active Awards + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 24 + + proposal + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 21,22 + + Check out space + + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 53,54 + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + + Show All + + src/app/pages/space/pages/space/space-about/space-about.component.html + 59,60 + + Show All + + + Connected spaces that you recognize + + src/app/pages/space/pages/space/space-about/space-about.component.html + 65,66 + + Connected spaces that you recognize + + + New connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 76,77 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 88 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 117 + + New connection + + + connections + + src/app/pages/space/pages/space/space-about/space-about.component.html + 104 + + connections + + + Close + + src/app/pages/space/pages/space/space-about/space-about.component.html + 120 + + Close + + + New + + src/app/pages/space/pages/space/space-about/space-about.component.html + 132 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 169 + + New + + + Edit + + src/app/pages/space/pages/space/space-about/space-about.component.html + 133 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 170 + + Edit + + + connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 134,135 + + connection + + + Form a connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 148 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Form a connection + + + Save + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 181 + + Save + + + Terminate alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 159,160 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 190,191 + + Terminate alliance + + + alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 171,172 + + alliance + + + Space's Wallet Address + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201,202 + + Space's Wallet Address + + + Wallet to hold funds for the Space. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 203,204 + + Wallet to hold funds for the Space. + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 252,253 + + Leave Space + + + About space + + src/app/pages/space/pages/space/space.page.html + 5,6 + + About space + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 53 + + + src/app/pages/space/pages/space/space.page.html + 113,114 + + Join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 77 + + + src/app/pages/space/pages/space/space.page.html + 139 + + Edit Space + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2,3 + + Add new space + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3,4 + + Edit space + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17,18 + + Space info + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19,20 + + Title and description will be included on the Space. + + + Space description + + src/app/pages/space/pages/upsert/upsert.page.html + 39,40 + + Space description + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 54,55 + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 100,101 + + Only discord invite code supported (i.e. RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 107,108 + + Type your Discord invite code + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 128,129 + + Space Type + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 130,131 + + Each type has different characteristics. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 139,140 + + Open for anyone to join instantly + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 143,144 + + Requires a member approval + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 163,164 + + Avatar is mandatory + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 236,237 + + Create space + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 249,250 + + Save space + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Upload new to replace existing. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + Your brand is key. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Make it personal. + + + + diff --git a/src/locale/messages.pt-BR.xlf b/src/locale/messages.pt-BR.xlf new file mode 100644 index 0000000..dce29e0 --- /dev/null +++ b/src/locale/messages.pt-BR.xlf @@ -0,0 +1,13270 @@ + + + + + + Top Members + + src/app/@core/services/filter-storage/filter-storage.service.ts + 96 + + Top Members + + + Recent + + src/app/@core/services/filter-storage/filter-storage.service.ts + 97 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 115 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 132 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 146 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 164 + + Recente + + + Oldest + + src/app/@core/services/filter-storage/filter-storage.service.ts + 98 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 116 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 133 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 147 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 165 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 187 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 206 + + Mais antigo + + + Ending Soon + + src/app/@core/services/filter-storage/filter-storage.service.ts + 114 + + Ending Soon + + + Ending SOON + + src/app/@core/services/filter-storage/filter-storage.service.ts + 163 + + Ending SOON + + + Available Date + + src/app/@core/services/filter-storage/filter-storage.service.ts + 181 + + Available Date + + + Recently Created + + src/app/@core/services/filter-storage/filter-storage.service.ts + 182 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 205 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 57 + + Recently Created + + + Price: Low to High + + src/app/@core/services/filter-storage/filter-storage.service.ts + 183 + + Preço: Menor para Maior + + + Price: High to Low + + src/app/@core/services/filter-storage/filter-storage.service.ts + 184 + + Preço: Maior para Menor + + + Top Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 185 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 203 + + Top Traded + + + Recently Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 186 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 204 + + Recently Traded + + + Public Vote + + src/app/@core/services/filter-storage/filter-storage.service.ts + 199 + + Public Vote + + + Community Rank + + src/app/@core/services/filter-storage/filter-storage.service.ts + 200 + + Community Rank + + + SOON on Sale + + src/app/@core/services/filter-storage/filter-storage.service.ts + 201 + + SOON on Sale + + + Recently Minted + + src/app/@core/services/filter-storage/filter-storage.service.ts + 202 + + Recently Minted + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 74 + + Voltar + + + Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products. + + src/app/@core/services/seo/seo.service.ts + 7 + + Soonaverse é uma plataforma para as comunidades criarem e administrarem organizações autônomas descentralizadas (DAOs), NFTs, projetos, empresas e os mercados sobre a infra estrutura gratuita da rede IOTA. Qualquer organização pode lançar e negociar ativos líquidos através de nossos produtos do Marketplace, Launchpad e Token Exchange. + + + Bill Payment + + src/app/@core/services/transaction/transaction.service.ts + 18 + + Bill Payment + + + Bill (royalty) + + src/app/@core/services/transaction/transaction.service.ts + 20 + + Bill (royalty) + + + Credit + + src/app/@core/services/transaction/transaction.service.ts + 26 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 336 + + Crédito + + + Payment + + src/app/@core/services/transaction/transaction.service.ts + 28 + + Pagamento + + + Credit NFT + + src/app/@core/services/transaction/transaction.service.ts + 30 + + Credit NFT + + + Mint Collection + + src/app/@core/services/transaction/transaction.service.ts + 32 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 36 + + Mint Collection + + + Mint Token + + src/app/@core/services/transaction/transaction.service.ts + 34 + + + src/app/pages/space/pages/manage/manage.page.html + 116 + + Mint Token + + + Withdraw Asset + + src/app/@core/services/transaction/transaction.service.ts + 36 + + Sacar Ativo + + + Unlock + + src/app/@core/services/transaction/transaction.service.ts + 38 + + Unlock + + + Vote + + src/app/@core/services/transaction/transaction.service.ts + 40 + + Vote + + + Order + + src/app/@core/services/transaction/transaction.service.ts + 42 + + Order + + + (Mint Alias) + + src/app/@core/services/transaction/transaction.service.ts + 49 + + (Mint Alias) + + + (Mint NFTs) + + src/app/@core/services/transaction/transaction.service.ts + 51 + + (Mint NFTs) + + + (Mint Foundry) + + src/app/@core/services/transaction/transaction.service.ts + 53 + + (Mint Foundry) + + + (Send Alias to Guardian) + + src/app/@core/services/transaction/transaction.service.ts + 55 + + (Send Alias to Guardian) + + + (Lock Collection) + + src/app/@core/services/transaction/transaction.service.ts + 57 + + (Lock Collection) + + + Discover + + src/app/@shell/ui/header/header.component.html + 76 + + + src/app/components/auth/services/auth.service.ts + 83 + + Descubra + + + Create new + + src/app/@shell/ui/header/header.component.html + 91 + + Criar novo + + + Space + + src/app/@shell/ui/header/header.component.html + 97 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100 + + + src/app/pages/collection/pages/collection/collection.page.html + 110 + + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 206,205 + + + src/app/pages/token/pages/new/summary/summary.component.html + 242,241 + + Espaço + + + Proposal + + src/app/@shell/ui/header/header.component.html + 103 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 29 + + Proposta + + + Award + + src/app/@shell/ui/header/header.component.html + 106 + + + src/app/pages/award/pages/award/award.page.html + 29 + + + src/app/pages/award/pages/award/award.page.ts + 98 + + Prêmios + + + Collection + + src/app/@shell/ui/header/header.component.html + 110 + + + src/app/@shell/ui/header/header.component.html + 129 + + + src/app/pages/collection/pages/collection/collection.page.html + 37 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136 + + + src/app/pages/nft/pages/new/single/single.page.html + 346 + + + src/app/pages/space/pages/collections/collections.page.html + 50 + + Coleções + + + Token + + src/app/@shell/ui/header/header.component.html + 113 + + + src/app/@shell/ui/header/header.component.html + 132 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 321 + + + src/app/pages/token/pages/token/token.page.html + 29 + + + src/app/pages/token/pages/token/token.page.ts + 99 + + + src/app/pages/token/pages/trade/trade.page.ts + 274 + + Token + + + To unlock more features you have to stake SOON token. + + src/app/@shell/ui/header/header.component.html + 124,126 + + To unlock more features you have to stake SOON token. + + + VIP LEVEL + + src/app/@shell/ui/header/header.component.html + 197,198 + + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 37,38 + + + src/app/pages/member/pages/activity/activity.page.html + 146,147 + + VIP LEVEL + + + None. + + src/app/@shell/ui/header/header.component.html + 232 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 77 + + None. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 240 + + + src/app/components/auth/services/auth.service.ts + 551 + + Meu Perfil + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 265,266 + + Purchase has not been completed + + + You have + + src/app/@shell/ui/header/header.component.html + 270 + + Você tem + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 272 + + para finalizar sua transação + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 282,283 + + Open Checkout + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 334 + + You won the NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 335 + + Você é o dono de um novo NFT. Parabéns! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 342 + + You lost your bid! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 343 + + Your bid on + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 344 + + was outbid. Try again! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 351 + + just offered + + + for + + src/app/@shell/ui/header/header.component.ts + 352 + + + src/app/components/timeline/timeline.component.html + 171 + + de + + + Your + + src/app/@shell/ui/header/header.component.ts + 353 + + Your + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 354 + + has received a new bid for + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 377 + + Incompatível + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 378 + + This notification is not yet supported in your language + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27,28 + + Espaço + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 38,39 + + Prosposta + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 49,50 + + Prêmios + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 60,61 + + Coleção + + + Token + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 70,71 + + Token + + + Stake more SOON to create tokens and collections. + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 81,84 + + Stake more SOON to create tokens and collections. + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 57,58 + + Connect to your MetaMask wallet + + + Connect via TanglePay + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 73 + + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 47 + + Connect via TanglePay + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 97 + + Sair + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 103 + + Desenvolvido por + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8 + + The page you were looking for was not found + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 9,11 + + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Descubra o Soonaverse + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 19 + + Network status + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 30,31 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 84,85 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 140,141 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 197,198 + + Network status + + + Operational + + src/app/@shell/ui/sider/network-status/network-status.component.html + 36 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 90 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 146 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 203 + + Operational + + + Degraded Performance + + src/app/@shell/ui/sider/network-status/network-status.component.html + 43 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 97 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 153 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 210 + + Degraded Performance + + + Down + + src/app/@shell/ui/sider/network-status/network-status.component.html + 50 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 104 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 160 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 217 + + Down + + + Last milestone + + src/app/@shell/ui/sider/network-status/network-status.component.html + 57,58 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 111,112 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 170,171 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 224,225 + + Last milestone + + + Devnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 78,79 + + + src/app/components/network/components/select-network/select-network.component.html + 61,63 + + Devnet + + + Shimmer Mainnet Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 132,133 + + Shimmer Mainnet Coming SOON + + + Testnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 191,192 + + + src/app/components/network/components/select-network/select-network.component.html + 33,35 + + Testnet + + + Assembly + + src/app/@shell/ui/sider/network-status/network-status.component.html + 237 + + Assembly + + + Assembly Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 244,245 + + Assembly Coming SOON + + + Shimmer EVM Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 266,267 + + Shimmer EVM Coming SOON + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 48 + + Ver Documentação + + + Show more + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 47 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 27 + + + src/app/components/timeline/timeline.component.html + 304 + + Exibir mais + + + Show less + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 48 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 28 + + + src/app/components/timeline/timeline.component.html + 303 + + Exibir menos + + + Search here... + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 50 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 30 + + Search here... + + + Reset + + + src/app/components/algolia/algolia-clear/algolia-clear.component.html + 5,7 + + Reset + + + + Search + + src/app/components/algolia/search/search.component.html + 20,19 + + + src/app/components/collection/components/select-collection/select-collection.component.html + 95,94 + + + src/app/components/space/components/select-space/select-space.component.html + 95,94 + + Pesquisar + + + Start typing... + + src/app/components/algolia/search/search.component.html + 36 + + Start typing... + + + Open + + src/app/components/algolia/services/algolia.service.ts + 28 + + Open + + + Guardians of Space Only + + src/app/components/algolia/services/algolia.service.ts + 30 + + Apenas Guardiões do Espaço + + + Members of Space Only + + src/app/components/algolia/services/algolia.service.ts + 32 + + Apenas para membros do espaço + + + Members With Badge Only + + src/app/components/algolia/services/algolia.service.ts + 34 + + Somente Membros do Espaço com Emblema + + + Members With NFT only + + src/app/components/algolia/services/algolia.service.ts + 36 + + Members With NFT only + + + Unavailable for sale + + src/app/components/algolia/services/algolia.service.ts + 49 + + Unavailable for sale + + + On Auction + + src/app/components/algolia/services/algolia.service.ts + 51 + + On Auction + + + Available + + src/app/components/algolia/services/algolia.service.ts + 53 + + + src/app/components/award/components/award-status/award-status.component.html + 23 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 61 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 162 + + + src/app/pages/space/pages/collections/collections.page.ts + 31 + + + src/app/pages/token/pages/token/token.page.ts + 256 + + Disponível + + + On Sale + + src/app/components/algolia/services/algolia.service.ts + 55 + + On Sale + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 19 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23 + + Conecte a sua carteira do Metamask + + + TanglePay + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 43 + + TanglePay + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 67 + + Certifique-se de selecionar uma Corrente EVM pública do IOTA no MetaMask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 69 + + Nome da rede: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 70 + + URL do RPC: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 71 + + ID da cadeia: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 89,90 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 120,121 + + Cancelar + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 8,10 + + Conectar + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Desconectar + + + Staking + + src/app/components/auth/services/auth.service.ts + 90 + + Staking + + + Tokens + + src/app/components/auth/services/auth.service.ts + 97 + + + src/app/pages/discover/pages/awards/awards.page.html + 145,144 + + + src/app/pages/member/pages/member/member.page.ts + 66 + + + src/app/pages/member/pages/tokens/tokens.page.html + 49 + + + src/app/pages/member/pages/tokens/tokens.page.html + 235 + + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 41 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 2 + + Tokens + + + Swap + + src/app/components/auth/services/auth.service.ts + 104 + + Swap + + + Pool + + src/app/components/auth/services/auth.service.ts + 111 + + Pool + + + Marketplace + + src/app/components/auth/services/auth.service.ts + 118 + + Mercado + + + My Overview + + src/app/components/auth/services/auth.service.ts + 125 + + + src/app/pages/dashboard/dashboard.page.html + 2 + + Visão Geral + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 232 + + Unable to sign transaction. Please try to reload page. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 278 + + Desbloqueie o MetaMask antes de continuar! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 290 + + You must enable access to read your account address. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 298 + + Please make sure you select address in MetaMask! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 307 + + + src/app/components/auth/services/auth.service.ts + 378 + + Unable to get nonce to authenticate! + + + Unable to connect your TanglePay wallet. + + src/app/components/auth/services/auth.service.ts + 343 + + + src/app/components/auth/services/auth.service.ts + 482 + + Unable to connect your TanglePay wallet. + + + Unable to detect address in TanglePay! + + src/app/components/auth/services/auth.service.ts + 349 + + Unable to detect address in TanglePay! + + + You have to open Soonaverse in wallet app. + + src/app/components/auth/services/auth.service.ts + 443 + + You have to open Soonaverse in wallet app. + + + Failed to initialize wallet, try to reload page. + + src/app/components/auth/services/auth.service.ts + 445 + + Failed to initialize wallet, try to reload page. + + + Give badges + + src/app/components/award/components/award-awards/award-awards.component.html + 11 + + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 16 + + Give badges + + + Once issued, this badge is sent to the rewarded participant's wallet. + + src/app/components/award/components/award-awards/award-awards.component.html + 34 + + Once issued, this badge is sent to the rewarded participant's wallet. + + + Upload CSV + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 31,32 + + Upload CSV + + + Download CSV template + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 34 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 85 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 10 + + Download CSV template + + + You can create badge airdrops for any user. You can upload CSV with users ETH addresses and they will be properly reward. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 42,44 + + You can create badge airdrops for any user. You can upload CSV with users ETH addresses and they will be properly reward. + + + If you don’t know how to prepare CSV file, you can download our template made for you. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 50,51 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 101,102 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 25,26 + + If you don’t know how to prepare CSV file, you can download our template made for you. + + + Confirm schedule + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 77 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 128 + + Confirm schedule + + + ETH Address + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 97 + + ETH Address + + + Action + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 98 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 288 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 153 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 22 + + + src/app/pages/token/pages/trade/trade.page.html + 214 + + + src/app/pages/token/pages/trade/trade.page.html + 288 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 24 + + Action + + + Badge + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 104 + + + src/app/pages/award/pages/new/new.page.html + 298,297 + + Emblema + + + Submitted. + + src/app/components/award/components/award-give-badges/award-give-badges.component.ts + 103 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 137 + + Submitted. + + + Fund Award & Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 3 + + Fund Award & Mint + + + Reward Token + + src/app/components/award/components/award-mint/award-mint.component.html + 21 + + Reward Token + + + Reward to be funded + + src/app/components/award/components/award-mint/award-mint.component.html + 43 + + Reward to be funded + + + Confirm & Start + + src/app/components/award/components/award-mint/award-mint.component.html + 98,99 + + Confirm & Start + + + Once you agree with the terms, the generated address will remain active during the whole process. + + src/app/components/award/components/award-mint/award-mint.component.html + 105,107 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 181,183 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 93,95 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 146,148 + + Once you agree with the terms, the generated address will remain active during the whole process. + + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + src/app/components/award/components/award-mint/award-mint.component.html + 120,121 + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + + Transaction history + + src/app/components/award/components/award-mint/award-mint.component.html + 159 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 252 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 246 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 134 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 176 + + + src/app/components/space/components/space-claim/space-claim.component.html + 113 + + + src/app/components/space/components/space-claim/space-claim.component.html + 135 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 122 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 144 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 207 + + + src/app/components/token/components/token-bid/token-bid.component.html + 212 + + + src/app/components/token/components/token-bid/token-bid.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 256 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 249 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 254 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 276 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 209 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 269 + + + src/app/components/token/components/token-stake/token-stake.component.html + 319 + + + src/app/components/token/components/token-stake/token-stake.component.html + 341 + + + src/app/components/token/components/token-vote/token-vote.component.html + 271 + + + src/app/components/token/components/token-vote/token-vote.component.html + 293 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 110 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 146 + + Transaction history + + + Transaction complete. Congratulations. + + src/app/components/award/components/award-mint/award-mint.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 271 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 235 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 277 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 294 + + Transação concluída. Parabéns. + + + Finish Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 191,192 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 289,290 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 281,282 + + Finish Mint + + + Funding info + + src/app/components/award/components/award-mint/award-mint.component.ts + 83 + + Funding info + + + Make transaction + + src/app/components/award/components/award-mint/award-mint.component.ts + 84 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 92 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 87 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 101 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 77 + + Fazer transação + + + Wait for confirmation + + src/app/components/award/components/award-mint/award-mint.component.ts + 85 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 93 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 87 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 108 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 88 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 102 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 78 + + Aguardando confirmação + + + Confirmed + + src/app/components/award/components/award-mint/award-mint.component.ts + 86 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 94 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 88 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 109 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 89 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 103 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 79 + + Confirmado + + + Payment received. + + src/app/components/award/components/award-mint/award-mint.component.ts + 141 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 150 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 196 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 136 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 136 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 145 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 155 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 140 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 159 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 157 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 131 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 224 + + Payment received. + + + Confirming transaction. + + src/app/components/award/components/award-mint/award-mint.component.ts + 158 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 167 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 213 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 164 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 185 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 153 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 153 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 162 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 172 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 157 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 176 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 174 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 148 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 241 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 208 + + Confirming transaction. + + + Transaction confirmed. + + src/app/components/award/components/award-mint/award-mint.component.ts + 167 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 176 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 222 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 173 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 194 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 162 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 162 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 171 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 181 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 166 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 185 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 183 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 157 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 250 + + Transaction confirmed. + + + Invalid amount received. Refunding transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 186 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 203 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 258 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 182 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 190 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 210 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 186 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 204 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 212 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 190 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 270 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 247 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 159 + + Invalid amount received. Refunding transaction... + + + Invalid transaction.You must gift storage deposit. + + src/app/components/award/components/award-mint/award-mint.component.ts + 209 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 218 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 281 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 206 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 205 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 213 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 225 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 209 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 227 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 227 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 206 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 293 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 262 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 175 + + Invalid transaction.You must gift storage deposit. + + + Invalid payment refunded. + + src/app/components/award/components/award-mint/award-mint.component.ts + 224 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 233 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 296 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 220 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 228 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 241 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 224 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 242 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 243 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 221 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 308 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 279 + + Invalid payment refunded. + + + Waiting for transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 300 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 321 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 442 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 290 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 313 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 311 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 316 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 306 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 348 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 327 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 319 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 350 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 336 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 415 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 398 + + Waiting for transaction... + + + Pending Funding + + + src/app/components/award/components/award-status/award-status.component.html + 5,6 + + Pending Funding + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 11,12 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 11,12 + + Rejeitado + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 17 + + + src/app/pages/space/pages/awards/awards.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 32 + + Concluído + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 571 + + Apenas membros do espaço + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 558 + + Somente Guardiões do Espaço + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 29 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 584 + + Somente Membros do Espaço com Emblema + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 39 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 596 + + Pelo menos uma NFT de coleções + + + Specific members only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 53 + + Specific members only + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 28 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 95 + + + src/app/components/token/components/token-card/token-card.component.html + 70 + + Starts in + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 30 + + + src/app/components/countdown/countdown.component.html + 56 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 109 + + days + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 33 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 122 + + Starts today + + + Collection is not yet migrated to the decentralized network. + + src/app/components/collection/components/collection-card/collection-card.component.html + 59 + + Collection is not yet migrated to the decentralized network. + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 76 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 612 + + Edição Limitada + + + Floor Price + + src/app/components/collection/components/collection-card/collection-card.component.html + 104 + + + src/app/pages/collection/pages/collection/collection.page.html + 203 + + Floor Price + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 56 + + Aguardando aprovação + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 66 + + + src/app/pages/space/pages/awards/awards.page.ts + 33 + + + src/app/pages/space/pages/collections/collections.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 33 + + Rejeitado + + + Remaining + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 42 + + Remaining + + + NFTs + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 49 + + + src/app/pages/market/pages/market/market.page.ts + 14 + + + src/app/pages/market/pages/market/market.page.ts + 35 + + + src/app/pages/member/pages/member/member.page.ts + 67 + + NFTs + + + Mint collection on network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 3 + + Mint collection on network + + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 43,45 + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + + Unsold NFT's + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 60,61 + + Unsold NFT's + + + Decide what should happen with all NFTs that were not sold yet. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 67 + + Decide what should happen with all NFTs that were not sold yet. + + + Keep the same price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 76 + + Keep the same price + + + Take Ownership + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 86 + + Take Ownership + + + Set new price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 96 + + Set new price + + + Burn all unsold + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 103 + + Burn all unsold + + + Note that the collection ownership will be granted only to your profile. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 130,131 + + Note that the collection ownership will be granted only to your profile. + + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 141,143 + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 150 + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + + Confirm & Start minting + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 174,175 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 139,140 + + Confirm & Start minting + + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 196,198 + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + + remaining to make the transfer. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 171 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 90 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 132 + + + src/app/components/space/components/space-claim/space-claim.component.html + 78 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 87 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 140 + + + src/app/components/token/components/token-bid/token-bid.component.html + 170 + + + src/app/components/token/components/token-claim/token-claim.component.html + 199 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 194 + + + src/app/components/token/components/token-stake/token-stake.component.html + 279 + + + src/app/components/token/components/token-vote/token-vote.component.html + 209 + + restando para fazer a transferência. + + + Expired + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 213 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 174 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 93 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 135 + + + src/app/components/space/components/space-claim/space-claim.component.html + 81 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 90 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 143 + + + src/app/components/token/components/token-bid/token-bid.component.html + 173 + + + src/app/components/token/components/token-claim/token-claim.component.html + 202 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 197 + + + src/app/components/token/components/token-stake/token-stake.component.html + 282 + + + src/app/components/token/components/token-vote/token-vote.component.html + 212 + + + src/app/pages/token/services/helper.service.ts + 204 + + Expirado + + + NFT's from this collection are now being migrated. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 284,285 + + NFT's from this collection are now being migrated. + + + NFT's in collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 308,309 + + NFT's in collection + + + Total Storage Fee + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 318 + + Total Storage Fee + + + (NFTs Storage Fee + Collection Storage Fee) + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 319 + + (NFTs Storage Fee + Collection Storage Fee) + + + Select network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 91 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 86 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 100 + + Select network + + + Pending + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5,6 + + Pendente + + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 4 + + + src/app/pages/nft/pages/new/single/single.page.html + 352 + + O nome da coleção é obrigatório. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 13 + + Selecione uma Coleção + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 83 + + Selecione uma Coleção + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 114 + + + src/app/components/space/components/select-space/select-space.component.html + 114 + + Não existem resultados para + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 20 + + Todas as coleções + + + + + + + src/app/components/confirm-modal/confirm-modal.component.html + 48,50 + + + src/app/components/confirm-modal/confirm-modal.component.html + 51,53 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 246,251 + + + src/app/components/token/components/token-vote/token-vote.component.html + 46,47 + + + src/app/pages/collection/pages/collection/collection.page.html + 130,131 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 55,56 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 71,72 + + + + + Are you sure? + + src/app/components/confirm-modal/confirm-modal.component.ts + 30 + + Are you sure? + + + Close + + src/app/components/confirm-modal/confirm-modal.component.ts + 33 + + Close + + + Confirm + + src/app/components/confirm-modal/confirm-modal.component.ts + 34 + + + src/app/components/token/components/token-bid/token-bid.component.html + 146 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 170 + + + src/app/components/token/components/token-vote/token-vote.component.html + 181 + + Confirm + + + Connect wallet + + src/app/components/connect-wallet/connect-wallet.component.html + 7 + + Connect wallet + + + d + + src/app/components/countdown/countdown.component.html + 55 + + d + + + h + + src/app/components/countdown/countdown.component.html + 68 + + h + + + hours + + src/app/components/countdown/countdown.component.html + 69 + + hours + + + m + + src/app/components/countdown/countdown.component.html + 81 + + m + + + min + + src/app/components/countdown/countdown.component.html + 82 + + min + + + s + + src/app/components/countdown/countdown.component.html + 94 + + s + + + sec + + src/app/components/countdown/countdown.component.html + 95 + + sec + + + Ends + + src/app/components/date-tag/date-tag.component.ts + 11 + + Ends + + + Price + + src/app/components/iota-input/iota-input.component.html + 3 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 139 + + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 81 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 19 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 124 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 49 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 75 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 37 + + + src/app/pages/token/pages/trade/trade.page.html + 209 + + + src/app/pages/token/pages/trade/trade.page.html + 283 + + + src/app/pages/token/pages/trade/trade.page.html + 372 + + + src/app/pages/token/pages/trade/trade.page.html + 659 + + + src/app/pages/token/pages/trade/trade.page.html + 846 + + Preço + + + Verified addresses + + src/app/components/member/components/member-about/member-about.component.html + 90 + + Verified addresses + + + Manage + + src/app/components/member/components/member-about/member-about.component.html + 96 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 297 + + + src/app/pages/space/pages/space/space.page.ts + 53 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 18 + + Manage + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 119 + + Espaços recentemente ingressados + + + All + + src/app/components/member/components/member-about/member-about.component.html + 124 + + Todos + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 155 + + Nenhuma contribuição. + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 74 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 22 + + prêmios + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 14 + + Exibir Nome + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19 + + Defina um nome de exibição. Isto não muda seu nome de usuário. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 26 + + Nome de exibição (opcional) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 36 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 208 + + + src/app/pages/space/pages/space/space.page.ts + 44 + + Sobre + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 41 + + Uma breve descrição de você mesmo exibida em seu perfil. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 48 + + Sua descrição (opcional) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 57 + + + src/app/pages/space/pages/upsert/upsert.page.html + 166 + + Imagem de perfil + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 62 + + Personalize sua identidade no Soonaverse. + + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,78 + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 92 + + Uau! Parece que o seu é o avatar mais bonito de todos. Parabéns. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 97 + + + src/app/pages/space/pages/upsert/upsert.page.html + 54 + + Redes + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 99 + + + src/app/pages/space/pages/upsert/upsert.page.html + 61 + + Nome de usuário do Github inválido. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 105 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67 + + Digite o nome de usuário da sua conta Github + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 117 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 177 + + + src/app/pages/space/pages/upsert/upsert.page.html + 78 + + Nome de usuário do Twitter inválido. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 123 + + + src/app/pages/space/pages/upsert/upsert.page.html + 84 + + Digite o nome de usuário da sua conta do Twitter + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 135 + + Somente o formato nomeusuario#1234 é suportado. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 141 + + Digite o nome de usuário da sua conta do Discord + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 155 + + Configurações + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 157,158 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 123,124 + + Salvar as alterações + + + + + + + src/app/components/network/components/select-network/select-network.component.html + 4,6 + + + + + + Shimmer + + src/app/components/network/components/select-network/select-network.component.html + 17 + + + src/app/components/network/components/select-network/select-network.component.html + 28 + + + src/app/components/network/components/selected-network/selected-network.component.html + 11 + + + src/app/pages/award/pages/award/award.page.html + 44 + + + src/app/pages/collection/pages/collection/collection.page.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 575 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 169 + + Shimmer + + + IOTA + + src/app/components/network/components/select-network/select-network.component.html + 45 + + + src/app/components/network/components/select-network/select-network.component.html + 56 + + + src/app/components/network/components/selected-network/selected-network.component.html + 19 + + + src/app/pages/award/pages/award/award.page.html + 52 + + + src/app/pages/collection/pages/collection/collection.page.html + 59 + + + src/app/pages/nft/pages/nft/nft.page.html + 583 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 177 + + IOTA + + + Selected Network + + src/app/components/network/components/selected-network/selected-network.component.html + 4,6 + + Selected Network + + + Shimmer Testnet + + src/app/components/network/components/selected-network/selected-network.component.html + 15 + + + src/app/pages/award/pages/award/award.page.html + 48 + + + src/app/pages/collection/pages/collection/collection.page.html + 55 + + + src/app/pages/nft/pages/nft/nft.page.html + 579 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 173 + + Shimmer Testnet + + + IOTA Devnet + + src/app/components/network/components/selected-network/selected-network.component.html + 23 + + + src/app/pages/award/pages/award/award.page.html + 56 + + + src/app/pages/collection/pages/collection/collection.page.html + 63 + + + src/app/pages/nft/pages/nft/nft.page.html + 587 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 181 + + IOTA Devnet + + + Send + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + Enviar + + + to following address: + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + to following address: + + + Copied + + src/app/components/network/components/send-funds/send-funds.component.html + 25 + + + src/app/components/share/share.component.html + 27 + + + src/app/components/wallet-address/wallet-address.component.html + 29 + + Copiado + + + Copy + + src/app/components/network/components/send-funds/send-funds.component.html + 26 + + Copiar + + + Do not send funds from an exchange, always use wallets you fully control. + + + src/app/components/network/components/send-funds/send-funds.component.html + 34,36 + + Do not send funds from an exchange, always use wallets you fully control. + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 3 + + Make a bid + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 15 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 16 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 25 + + Imagem NFT + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 38 + + Ends + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 48 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 36 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46 + + Direitos Autorais + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 55 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 43 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 53 + + Os direitos autorais são automaticamente deduzidos e pagos aos artistas. + + + Royalties goes to + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 73,74 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 61,62 + + Royalties goes to + + + + + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 75,76 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 63,64 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 262,263 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 188,189 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 264,265 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 306,307 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 344,345 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 45 + + + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 109 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Current highest bid + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 111 + + + src/app/pages/nft/pages/nft/nft.page.html + 111 + + Oferta mín + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 127 + + + src/app/pages/nft/pages/nft/nft.page.html + 116 + + Your bid is the highest + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 172,173 + + Current price is refreshing in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 208,209 + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 216,218 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,257 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 321,323 + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 237,238 + + Fazer oferta + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 278 + + Your transactions + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 286 + + Sent Date + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 287 + + + src/app/pages/token/pages/trade/trade.page.html + 854 + + Time + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 289 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 33 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 110 + + + src/app/pages/member/pages/tokens/tokens.page.html + 328 + + + src/app/pages/member/pages/transactions/transactions.page.html + 25 + + + src/app/pages/nft/pages/nft/nft.page.html + 323 + + + src/app/pages/nft/pages/nft/nft.page.html + 385 + + + src/app/pages/nft/pages/nft/nft.page.html + 435 + + + src/app/pages/token/pages/trade/trade.page.html + 200 + + + src/app/pages/token/pages/trade/trade.page.html + 274 + + + src/app/pages/token/pages/trade/trade.page.html + 363 + + + src/app/pages/token/pages/trade/trade.page.html + 664 + + + src/app/pages/token/pages/trade/trade.page.html + 851 + + Quantidade + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 55 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 96 + + Detail + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 311,310 + + + src/app/pages/nft/pages/nft/nft.page.html + 324 + + + src/app/pages/nft/pages/nft/nft.page.html + 360,359 + + + src/app/pages/nft/pages/nft/nft.page.html + 386 + + + src/app/pages/nft/pages/nft/nft.page.html + 410,409 + + + src/app/pages/nft/pages/nft/nft.page.html + 436 + + + src/app/pages/nft/pages/nft/nft.page.html + 460,459 + + Link + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 345 + + Congratulations you won the NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 357,358 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 283,284 + + + src/app/components/token/components/token-bid/token-bid.component.html + 271,272 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 313,314 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 306,307 + + + src/app/components/token/components/token-vote/token-vote.component.html + 330,331 + + Fechar pagamento + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 368,369 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 294,295 + + Exibir minha NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 384 + + Bidding is expired. Good luck next time :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 272 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 459 + + Generated NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 274 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 461 + + SFT + + + NFT is not yet migrated to the decentralized network. + + src/app/components/nft/components/nft-card/nft-card.component.html + 65 + + NFT is not yet migrated to the decentralized network. + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 118 + + day + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 156 + + Current bid + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 191 + + + src/app/pages/nft/pages/nft/nft.page.html + 594 + + Propriedade de + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 229,231 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 167 + + Novo NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 3 + + Pagamento + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 74,75 + + Total price + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150,151 + + Confirmar e Bloquear + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 156 + + Sua NFT será bloqueada para compra por + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + minutos + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 185 + + Recebemos um valor inválido. Tente novamente. + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 237,238 + + Validando a sua transação... + + + Order created. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 437 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 332 + + Order created. + + + Deposit NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 215 + + Deposit NFT + + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 46,48 + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + + Confirm & Start deposit + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 76,77 + + Confirm & Start deposit + + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 113,115 + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + + NFT has been deposited. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 165 + + NFT has been deposited. + + + See NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 169,170 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 211,212 + + See NFT + + + Terms & Conditions + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 85 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 106 + + Terms & Conditions + + + Send NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 86 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 107 + + Send NFT + + + NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 147 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 168 + + NFT received. + + + Invalid NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 191 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 212 + + Invalid NFT received. + + + Invalid NFT refunded. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 205 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 226 + + Invalid NFT refunded. + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 19 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 37 + + Pré-visualizar + + + Sale Starts + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 57 + + + src/app/pages/nft/services/helper.service.ts + 142 + + Vendas começam em + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 60 + + + src/app/pages/nft/pages/nft/nft.page.html + 70 + + Preço atual + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 80 + + Autor(a) + + + System info + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 119 + + + src/app/pages/nft/pages/nft/nft.page.html + 634 + + System info + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 130 + + + src/app/pages/nft/pages/nft/nft.page.html + 654 + + O endereço atual não está conectado a uma rede ao vivo (Mainnet). Assim que a funcionalidade for suportada no IOTA/Shimmer, você poderá migrar esta NFT para sua rede de escolha. + + + Properties + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 135 + + + src/app/pages/nft/pages/new/single/single.page.html + 90 + + Propriedades + + + Stats + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 139 + + + src/app/pages/nft/pages/new/single/single.page.html + 193,192 + + Atributos + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149 + + + src/app/pages/nft/pages/new/single/single.page.html + 301 + + + src/app/pages/nft/pages/nft/nft.page.html + 27 + + Imagem NFT + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + Metadado do IPFS + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + Imagem IPFS + + + Available once minted... + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 64 + + + src/app/pages/nft/pages/nft/nft.page.ts + 81 + + Available once minted... + + + Set your floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 6,7 + + Set your floor price + + + Available time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 42,43 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 42,43 + + Available time + + + NOW + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 54,55 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 54,55 + + NOW + + + Select Date/Time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Select Date/Time + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 71 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 71 + + + src/app/pages/nft/pages/new/single/single.page.html + 69 + + A disponibilidade é obrigatória. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 80 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 80 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 70 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 81 + + + src/app/pages/nft/pages/new/single/single.page.html + 68 + + + src/app/pages/nft/pages/new/single/single.page.html + 79 + + Disponível em + + + Auction length + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 91,92 + + Auction length + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 98 + + Various auction length coming next sprint once community have a vote! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 115 + + Duration of auction is 3 days + + + Auction can't be canceled after start date + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 125 + + Auction can't be canceled after start date + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 129 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 145 + + Once your listing is complete, you will get a confirmation message. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 138,139 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 154,155 + + Confirm listing + + + Set your price + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 6,7 + + Set your price + + + Sale type + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Sale type + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 103,104 + + Open Sale + + + Specific member(s) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 113,114 + + Specific member(s) + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2 + + + src/app/pages/token/pages/trade/trade.page.html + 110 + + Trade history + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 8,10 + + Item is yours and yours only + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 16 + + This will make your item unavailable for sale. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 17 + + Stop sale! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 15 + + List Item for sale + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 80 + + Not for sale + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 88 + + + src/app/pages/token/services/new.service.ts + 29 + + Fixed price + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 96 + + Auction + + + Stake NFT + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 221 + + Stake NFT + + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 46,48 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 147,149 + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + + For how long you want to stake? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 56,57 + + + src/app/components/token/components/token-stake/token-stake.component.html + 174,175 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 57,58 + + For how long you want to stake? + + + Stake type? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 77,78 + + Stake type? + + + Confirm & Start Stake + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 118,119 + + Confirm & Start Stake + + + NFT has been staked. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 207 + + NFT has been staked. + + + Dynamic + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 76 + + Dynamic + + + Static + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 80 + + Static + + + More + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 97,98 + + More + + + Pending + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 6,7 + + + src/app/pages/token/pages/token/token.page.html + 36 + + + src/app/pages/token/pages/trade/trade.page.html + 524 + + Pending + + + Rejected + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 12,13 + + + src/app/pages/token/pages/token/token.page.html + 42 + + Rejected + + + Commencing + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 18,19 + + Commencing + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 24,25 + + Em andamento + + + Completed + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 31,32 + + Completed + + + Share + + src/app/components/share/share.component.html + 16 + + + src/app/components/share/share.component.html + 39 + + + src/app/pages/token/pages/trade/trade.page.html + 64 + + + src/app/pages/token/pages/trade/trade.page.html + 635,634 + + Compartilhar + + + Copy to clipboard + + src/app/components/share/share.component.html + 28 + + Copiar para a área de transferência + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 4 + + + src/app/pages/award/pages/new/new.page.html + 121 + + + src/app/pages/proposal/pages/new/new.page.html + 211 + + Espaço é obrigatório. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 13 + + Selecionar Espaço + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 83 + + + src/app/pages/award/pages/new/new.page.html + 152 + + + src/app/pages/proposal/pages/new/new.page.html + 242 + + Selecione um espaço + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 20 + + Todos os Espaços + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 19,20 + + Joined + + + members + + src/app/components/space/components/space-card/space-card.component.html + 44 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 23 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + membros + + + Space Claim + + src/app/components/space/components/space-claim/space-claim.component.html + 3 + + Space Claim + + + Confirm and generate address + + src/app/components/space/components/space-claim/space-claim.component.html + 54,55 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 52,53 + + + src/app/components/token/components/token-claim/token-claim.component.html + 138,139 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 96,97 + + + src/app/components/token/components/token-stake/token-stake.component.html + 251,252 + + Confirm and generate address + + + Claim complete. Congratulations. + + src/app/components/space/components/space-claim/space-claim.component.html + 160 + + + src/app/components/token/components/token-claim/token-claim.component.html + 281 + + Claim complete. Congratulations. + + + Close + + src/app/components/space/components/space-claim/space-claim.component.html + 172,173 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 181,182 + + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 29,30 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 79,80 + + + src/app/components/token/components/token-claim/token-claim.component.html + 293,294 + + + src/app/components/token/components/token-stake/token-stake.component.html + 378,379 + + Fechar + + + Invalid amount or invalid senders address. Refunding transaction... + + src/app/components/space/components/space-claim/space-claim.component.ts + 183 + + Invalid amount or invalid senders address. Refunding transaction... + + + Funds refunded. + + src/app/components/space/components/space-claim/space-claim.component.ts + 222 + + Funds refunded. + + + Space claim submitted. + + src/app/components/space/components/space-claim/space-claim.component.ts + 306 + + Space claim submitted. + + + Token Reward Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 16 + + Token Reward Schedule + + + Existing Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 29 + + Existing Schedule + + + Upload New + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 37 + + Upload New + + + Vault address: + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 55,64 + + Vault address: + + + Schedule a new Reward + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 82,83 + + Schedule a new Reward + + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 93,95 + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + + Start Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 148 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 24 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 24 + + Data de Início + + + End Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 149 + + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 14 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 25 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 25 + + Data final + + + Vesting Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 150 + + Vesting Date + + + Tokens to Distribute + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 151 + + Tokens to Distribute + + + Status + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 152 + + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 110,109 + + + src/app/pages/token/pages/trade/trade.page.html + 376 + + Estado + + + Proposal created to remove the reward. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 154 + + Proposal created to remove the reward. + + + By checking this box, you agree with + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 12 + + Ao selecionar esta caixa, você concorda com + + + Terms and Conditions + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 13 + + Termos e Condições + + + Timeline + + src/app/components/timeline/timeline.component.html + 2 + + + src/app/components/timeline/timeline.component.html + 8 + + Timeline + + + Earned Badge + + src/app/components/timeline/timeline.component.html + 66 + + Emblema Adquirido + + + with + + src/app/components/timeline/timeline.component.html + 66 + + com + + + Listed by + + src/app/components/timeline/timeline.component.html + 109 + + Listed by + + + Made available for auction by + + src/app/components/timeline/timeline.component.html + 112 + + Made available for auction by + + + Purchased by + + src/app/components/timeline/timeline.component.html + 170 + + Comprado por + + + See + + src/app/components/timeline/timeline.component.html + 181 + + See + + + Hide + + src/app/components/timeline/timeline.component.html + 182 + + Hide + + + Listed by space + + src/app/components/timeline/timeline.component.html + 287 + + Listado por espaço + + + Refund blocked funds + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 3 + + Refund blocked funds + + + Total available tokens to refund + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 29 + + Total available tokens to refund + + + Refund complete. Congratulations. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 169 + + Refund complete. Congratulations. + + + Credit refund submitted. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 309 + + Credit refund submitted. + + + Airdrop tokens on the network + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 3 + + Airdrop tokens on the network + + + Tokens to airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 56,57 + + Tokens to airdrop + + + Confirm & Start Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 86,87 + + Confirm & Start Airdrop + + + Tokens to Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 120,121 + + Tokens to Airdrop + + + Finish Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 239,240 + + Finish Airdrop + + + Detail + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 60,61 + + Detail + + + Trade + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 70,71 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 201,202 + + Trade + + + Price (USD) + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 101 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 145 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 86 + + Price (USD) + + + 24h Change + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 126,127 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 115,116 + + 24h Change + + + 24h Volume + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 154 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 146 + + 24h Volume + + + M. Cap + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 172 + + M. Cap + + + Open buy order + + src/app/components/token/components/token-bid/token-bid.component.html + 3 + + Open buy order + + + Summary + + src/app/components/token/components/token-bid/token-bid.component.html + 29,30 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 39,40 + + + src/app/components/token/components/token-offer/token-offer.component.html + 46,47 + + Summary + + + Token amount to buy + + src/app/components/token/components/token-bid/token-bid.component.html + 34,35 + + Token amount to buy + + + Offered price per token + + src/app/components/token/components/token-bid/token-bid.component.html + 44,45 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 44,45 + + + src/app/components/token/components/token-offer/token-offer.component.html + 51,52 + + Offered price per token + + + Token amount to send + + src/app/components/token/components/token-bid/token-bid.component.html + 73,74 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 117,118 + + Token amount to send + + + ~ + + src/app/components/token/components/token-bid/token-bid.component.html + 89,98 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 60,69 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 90,99 + + + src/app/pages/token/pages/trade/trade.page.html + 553,556 + + ~ + + + I agree with + + src/app/components/token/components/token-bid/token-bid.component.html + 129 + + + src/app/components/token/components/token-claim/token-claim.component.html + 115 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 153 + + + src/app/components/token/components/token-offer/token-offer.component.html + 133 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 78 + + + src/app/components/token/components/token-refund/token-refund.component.html + 65 + + I agree with + + + Token terms and Conditions + + src/app/components/token/components/token-bid/token-bid.component.html + 131 + + + src/app/components/token/components/token-claim/token-claim.component.html + 117 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 155 + + + src/app/components/token/components/token-offer/token-offer.component.html + 135 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 80 + + + src/app/components/token/components/token-refund/token-refund.component.html + 67 + + Token terms and Conditions + + + and generate address + + src/app/components/token/components/token-bid/token-bid.component.html + 147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 171 + + + src/app/components/token/components/token-vote/token-vote.component.html + 182 + + and generate address + + + Once you agree with the terms, the generated address will remain active during the whole sale. + + src/app/components/token/components/token-bid/token-bid.component.html + 154,155 + + + src/app/components/token/components/token-claim/token-claim.component.html + 146,147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 178,179 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 103,104 + + Once you agree with the terms, the generated address will remain active during the whole sale. + + + Buy complete. Congratulations. + + src/app/components/token/components/token-bid/token-bid.component.html + 259 + + Buy complete. Congratulations. + + + Bid created. + + src/app/components/token/components/token-bid/token-bid.component.ts + 344 + + Bid created. + + + Are you sure you want to cancel the sale? + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 17 + + Are you sure you want to cancel the sale? + + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 23,25 + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + + Cancel sale + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 32,33 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 74,75 + + Cancel sale + + + Canceled public sale. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts + 56 + + Canceled public sale. + + + Total () + + src/app/components/token/components/token-cancel/token-cancel.component.html + 51,52 + + Total () + + + Are you sure you want to cancel your buy order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 66 + + Are you sure you want to cancel your buy order? + + + Are you sure you want to cancel your sell order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 69 + + Are you sure you want to cancel your sell order? + + + Confirm + + src/app/components/token/components/token-cancel/token-cancel.component.html + 76,77 + + Confirm + + + Cancelled. + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 48 + + + src/app/pages/token/pages/trade/trade.page.ts + 589 + + Cancelled. + + + Cancel your buy + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 80 + + Cancel your buy + + + Cancel your sell + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 81 + + Cancel your sell + + + Ongoing sale + + src/app/components/token/components/token-card/token-card.component.html + 22 + + Ongoing sale + + + Sale ends soon + + src/app/components/token/components/token-card/token-card.component.html + 23 + + Sale ends soon + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 24 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 21 + + Cooldown ends + + + Sale starts + + src/app/components/token/components/token-card/token-card.component.html + 55,57 + + Sale starts + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 115,117 + + + src/app/components/token/components/token-card/token-card.component.html + 175,177 + + Sale ends + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 130 + + + src/app/components/token/components/token-card/token-card.component.html + 190 + + + src/app/components/token/components/token-card/token-card.component.html + 250 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 176 + + + src/app/components/token/components/token-row/token-row.component.html + 79 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 20 + + Sale ends + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 235,237 + + Cooldown ends + + + Token Claim + + src/app/components/token/components/token-claim/token-claim.component.html + 3 + + Token Claim + + + Total available tokens to claim as of today + + src/app/components/token/components/token-claim/token-claim.component.html + 42 + + + src/app/components/token/components/token-claim/token-claim.component.html + 56 + + Total available tokens to claim as of today + + + Tokens available from + + src/app/components/token/components/token-claim/token-claim.component.html + 76 + + Tokens available from + + + Total tokens to claim + + src/app/components/token/components/token-claim/token-claim.component.html + 84 + + Total tokens to claim + + + Token claim submitted. + + src/app/components/token/components/token-claim/token-claim.component.ts + 320 + + Token claim submitted. + + + Guardian's of the space will be able to decide where this token will be minted. + + src/app/components/token/components/token-info/token-info-description.component.html + 41 + + Guardian's of the space will be able to decide where this token will be minted. + + + Icon + + src/app/components/token/components/token-info/token-info-description.component.ts + 25 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 24 + + Icon + + + Name + + src/app/components/token/components/token-info/token-info-description.component.ts + 26 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 25 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 31,30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 74 + + + src/app/pages/nft/pages/new/single/single.page.html + 21 + + + src/app/pages/nft/pages/new/single/single.page.html + 27,26 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 15 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 21,20 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 25 + + Nome + + + Symbol + + src/app/components/token/components/token-info/token-info-description.component.ts + 27 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 30 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 39,38 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 26 + + Symbol + + + Launchpad Price + + src/app/components/token/components/token-info/token-info-description.component.ts + 28 + + Launchpad Price + + + Network + + src/app/components/token/components/token-info/token-info-description.component.ts + 29 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 20 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 5,4 + + + src/app/pages/nft/pages/nft/nft.page.html + 542 + + + src/app/pages/nft/pages/nft/nft.page.html + 564 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 119 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 160 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 28 + + Network + + + Total supply + + src/app/components/token/components/token-info/token-info-description.component.ts + 30 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 29 + + Total supply + + + Current distribution + + src/app/components/token/components/token-info/token-info-description.component.ts + 31 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 30 + + Current distribution + + + Type + + src/app/components/token/components/token-info/token-info-description.component.ts + 32 + + + src/app/pages/member/pages/tokens/tokens.page.html + 58 + + + src/app/pages/member/pages/tokens/tokens.page.html + 325 + + + src/app/pages/member/pages/transactions/transactions.page.html + 24 + + + src/app/pages/nft/pages/nft/nft.page.html + 384 + + + src/app/pages/nft/pages/nft/nft.page.html + 434 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 31 + + + src/app/pages/token/pages/trade/trade.page.html + 361 + + Type + + + Coming soon + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 91,92 + + Coming soon + + + In Cooldown + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 98,99 + + + src/app/components/token/components/token-row/token-row.component.html + 245,246 + + In Cooldown + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 108,109 + + + src/app/components/token/components/token-row/token-row.component.html + 256,257 + + + src/app/pages/token/pages/trade/trade.page.html + 456 + + + src/app/pages/token/pages/trade/trade.page.html + 467 + + + src/app/pages/token/pages/trade/trade.page.html + 909,910 + + Buy + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 116 + + + src/app/pages/token/pages/trade/trade.page.html + 387 + + + src/app/pages/token/pages/trade/trade.page.html + 1210 + + Buy + + + Sale starts + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 167 + + + src/app/components/token/components/token-row/token-row.component.html + 70 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 19 + + Sale starts + + + Cooldown period ends + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 187,188 + + + src/app/components/token/components/token-row/token-row.component.html + 90,91 + + Cooldown period ends + + + Mint token on network + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 3 + + Mint token on network + + + Public sale will no longer be available after bringing token to a network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 45,46 + + Public sale will no longer be available after bringing token to a network. + + + Once minted all owners will have the option to migrate their tokens to the selected network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 56,58 + + Once minted all owners will have the option to migrate their tokens to the selected network. + + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 68,70 + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + + Tokens to migrate + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 92,93 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 173,174 + + Tokens to migrate + + + Locked public tokens + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 107,108 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 189,190 + + Locked public tokens + + + Open sale order + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 3 + + Open sale order + + + Token ID + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 30,31 + + + src/app/components/token/components/token-offer/token-offer.component.html + 27,28 + + Token ID + + + You will receive + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 74,75 + + + src/app/components/token/components/token-offer/token-offer.component.html + 73,74 + + + src/app/pages/token/pages/trade/trade.page.html + 1132,1133 + + You will receive + + + Fee + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 103 + + + src/app/components/token/components/token-offer/token-offer.component.html + 101 + + + src/app/pages/token/pages/trade/trade.page.html + 1172 + + Fee + + + No FEES! + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 110,111 + + + src/app/components/token/components/token-offer/token-offer.component.html + 108,109 + + + src/app/pages/token/pages/trade/trade.page.html + 1188,1189 + + No FEES! + + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 232,234 + + + src/app/components/token/components/token-vote/token-vote.component.html + 249,251 + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + + Sell complete. Congratulations. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 301 + + + src/app/components/token/components/token-vote/token-vote.component.html + 318 + + Sell complete. Congratulations. + + + Offer order created. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 346 + + Offer order created. + + + Open Token Sell + + src/app/components/token/components/token-offer/token-offer.component.html + 3 + + Open Token Sell + + + Your Balance + + src/app/components/token/components/token-offer/token-offer.component.html + 35,36 + + Your Balance + + + Offered amount of tokens + + src/app/components/token/components/token-offer/token-offer.component.html + 64,65 + + Offered amount of tokens + + + Create a Sell Order + + src/app/components/token/components/token-offer/token-offer.component.html + 151,152 + + Create a Sell Order + + + Offer created. + + src/app/components/token/components/token-offer/token-offer.component.ts + 102 + + Offer created. + + + Public sale info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 4 + + Public sale info + + + Start date is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 7 + + Start date is required. + + + Start date for the token offering + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 16 + + Start date for the token offering + + + Offering length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 23 + + Offering length is required. + + + Select token offering length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 48 + + Select token offering length (Default 2 days) + + + Token allocation info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 63 + + Token allocation info + + + Sale Setup + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 81 + + Sale Setup + + + Enable Cooldown period + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 87,88 + + Enable Cooldown period + + + Enable Cooldown with refund option. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 98,99 + + Enable Cooldown with refund option. + + + Cooldown period length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 103 + + Cooldown period length is required. + + + Select token cooldown length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 129 + + Select token cooldown length (Default 2 days) + + + No Cooldown. Participants can’t refund. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 149,150 + + No Cooldown. Participants can’t refund. + + + Enable Oversale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 160,161 + + Enable Oversale + + + No Oversale. Sale ends with 100% reached. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 171,172 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 54,55 + + No Oversale. Sale ends with 100% reached. + + + Sale continues after 100% reached + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 179,180 + + Sale continues after 100% reached + + + Confirm and schedule sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 195,196 + + Confirm and schedule sale + + + Price per token + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 106 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 34 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 42 + + Price per token + + + Public sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 135 + + + src/app/pages/token/pages/new/summary/summary.component.html + 214 + + Public sale + + + Purchase token + + src/app/components/token/components/token-purchase/token-purchase.component.html + 3 + + Purchase token + + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 113 + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + + Enter how much you want to spend. Amount of tokens will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 116 + + Enter how much you want to spend. Amount of tokens will be calculated. + + + Purchased tokens + + src/app/components/token/components/token-purchase/token-purchase.component.html + 243,244 + + Purchased tokens + + + Price + + src/app/components/token/components/token-purchase/token-purchase.component.html + 260,261 + + Price + + + Cooldown period ends + + src/app/components/token/components/token-refund/token-refund.component.html + 23 + + Cooldown period ends + + + Confirm and refund + + src/app/components/token/components/token-refund/token-refund.component.html + 82,83 + + Confirm and refund + + + Refund token + + src/app/components/token/components/token-refund/token-refund.component.ts + 61 + + Refund token + + + Initial Price + + src/app/components/token/components/token-row/token-row.component.html + 39 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 27 + + Initial Price + + + Avg. Price + + src/app/components/token/components/token-row/token-row.component.html + 47 + + Avg. Price + + + Change (24h) + + src/app/components/token/components/token-row/token-row.component.html + 107,108 + + Change (24h) + + + Volume 24h + + src/app/components/token/components/token-row/token-row.component.html + 150 + + Volume 24h + + + Market Cap + + src/app/components/token/components/token-row/token-row.component.html + 166 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 169 + + + src/app/pages/token/pages/trade/trade.page.html + 582 + + Market Cap + + + Claim + + src/app/components/token/components/token-row/token-row.component.html + 210,211 + + Claim + + + Refund + + src/app/components/token/components/token-row/token-row.component.html + 222,223 + + Refund + + + Launching soon + + src/app/components/token/components/token-row/token-row.component.html + 238,239 + + Launching soon + + + Buy / Sell + + src/app/components/token/components/token-row/token-row.component.html + 259,260 + + Buy / Sell + + + Stake your token + + src/app/components/token/components/token-stake/token-stake.component.html + 3 + + Stake your token + + + Select or define the amount you want to stake and the period for how long you want to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 13,15 + + Select or define the amount you want to stake and the period for how long you want to lock it. + + + Since you are a guardian you can also + + src/app/components/token/components/token-stake/token-stake.component.html + 17 + + Since you are a guardian you can also + + + - Choose an amount and for how long you’d like to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 50 + + - Choose an amount and for how long you’d like to lock it. + + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + src/app/components/token/components/token-stake/token-stake.component.html + 52,54 + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + + - You will get staked points based on your input. + + src/app/components/token/components/token-stake/token-stake.component.html + 56,57 + + - You will get staked points based on your input. + + + See Staking reward page for more info + + src/app/components/token/components/token-stake/token-stake.component.html + 62 + + See Staking reward page for more info + + + here. + + src/app/components/token/components/token-stake/token-stake.component.html + 63 + + here. + + + How it works + + src/app/components/token/components/token-stake/token-stake.component.html + 71 + + How it works + + + How much you want to stake? + + src/app/components/token/components/token-stake/token-stake.component.html + 87,88 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 21,22 + + How much you want to stake? + + + Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 192 + + Rewards Multiplier + + + Staking Value + + src/app/components/token/components/token-stake/token-stake.component.html + 210,219 + + Staking Value + + + Staked amount * Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 216 + + + src/app/pages/member/pages/activity/activity.page.html + 36 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 107 + + Staked amount * Rewards Multiplier + + + You will earn + + src/app/components/token/components/token-stake/token-stake.component.html + 230 + + You will earn + + + Stake complete. Congratulations. + + src/app/components/token/components/token-stake/token-stake.component.html + 366 + + Stake complete. Congratulations. + + + Token stake submitted. + + src/app/components/token/components/token-stake/token-stake.component.ts + 410 + + Token stake submitted. + + + Trade details + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 3 + + Trade details + + + Traded amount + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 29,30 + + Traded amount + + + Price per token + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 48,49 + + + src/app/pages/token/pages/new/summary/summary.component.html + 69,70 + + Price per token + + + Date and Time + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 79,80 + + Date and Time + + + Fullfilled + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 94,95 + + Fullfilled + + + Date + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 109 + + + src/app/pages/member/pages/transactions/transactions.page.html + 22 + + + src/app/pages/nft/pages/nft/nft.page.html + 383 + + + src/app/pages/nft/pages/nft/nft.page.html + 433 + + + src/app/pages/proposal/pages/votes/votes.page.html + 15 + + + src/app/pages/token/pages/trade/trade.page.html + 198 + + + src/app/pages/token/pages/trade/trade.page.html + 272 + + + src/app/pages/token/pages/trade/trade.page.html + 360 + + Data + + + State + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 111 + + State + + + Storage deposit fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 144 + + Storage deposit fee + + + Fullfilment + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 171 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 252 + + Fullfilment + + + Seller + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 176 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 247 + + Seller + + + Transaction + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 204 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 280 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 314 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 358 + + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 41 + + + src/app/pages/member/pages/transactions/transactions.page.html + 74 + + Transaction + + + Non Transferable + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 153 + + + src/app/pages/member/pages/transactions/transactions.page.html + 77 + + Non Transferable + + + Processing... + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 155 + + + src/app/pages/member/pages/transactions/transactions.page.html + 87 + + Processing... + + + Soonaverse Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 170 + + Soonaverse Fee + + + Exchange Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 172 + + Exchange Fee + + + 24h change/Price + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 46 + + 24h change/Price + + + Markets + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 6 + + + src/app/pages/token/pages/trade/trade.page.html + 1242 + + Markets + + + No Tokens + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 38,39 + + + src/app/pages/tokens/pages/favourites/favourites.page.html + 25,26 + + No Tokens + + + Cast Vote + + src/app/components/token/components/token-vote/token-vote.component.html + 3 + + Cast Vote + + + Question + + src/app/components/token/components/token-vote/token-vote.component.html + 16,17 + + Question + + + Selected option + + src/app/components/token/components/token-vote/token-vote.component.html + 23,24 + + Selected option + + + How do you set your votes? + + src/app/components/token/components/token-vote/token-vote.component.html + 33,34 + + How do you set your votes? + + + Total native tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 88,89 + + Total native tokens + + + Total staked tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 105,106 + + Total staked tokens + + + Voting is active on + + src/app/components/token/components/token-vote/token-vote.component.html + 119,120 + + Voting is active on + + + Your total voting weight + + src/app/components/token/components/token-vote/token-vote.component.html + 131,132 + + Your total voting weight + + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + src/app/components/token/components/token-vote/token-vote.component.html + 151,153 + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + + Cast Votes + + src/app/components/token/components/token-vote/token-vote.component.html + 193 + + Cast Votes + + + Send Native Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 124 + + Send Native Tokens + + + Use Staked Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 128 + + Use Staked Tokens + + + Vote received. + + src/app/components/token/components/token-vote/token-vote.component.ts + 191 + + Vote received. + + + Transaction confirmed and funds refunded. + + src/app/components/token/components/token-vote/token-vote.component.ts + 217 + + Transaction confirmed and funds refunded. + + + Token vote executed. + + src/app/components/token/components/token-vote/token-vote.component.ts + 375 + + Token vote executed. + + + Token vote order created. + + src/app/components/token/components/token-vote/token-vote.component.ts + 392 + + Token vote order created. + + + Type + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 13,14 + + Type + + + Date + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 22,23 + + Date + + + Manage addresses + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 3 + + Manage addresses + + + Address + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 21 + + Address + + + Not yet verified + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 59 + + Not yet verified + + + Change + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 66 + + Change + + + Verify + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 67 + + Verify + + + You will be asked to send funds to the new + + src/app/components/wallet-address/verify-address/verify-address.component.html + 33 + + You will be asked to send funds to the new + + + address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/verify-address/verify-address.component.html + 36,37 + + address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/verify-address/verify-address.component.html + 41 + + espaço + + + profile + + src/app/components/wallet-address/verify-address/verify-address.component.html + 43 + + perfil + + + for future transactions. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 44 + + para transações futuras. + + + Generate new address + + src/app/components/wallet-address/verify-address/verify-address.component.html + 55,56 + + Gerar novo endereço + + + Send a small + + src/app/components/wallet-address/verify-address/verify-address.component.html + 66 + + Enviar um pequeno + + + amount to validate your address. This expires in + + src/app/components/wallet-address/verify-address/verify-address.component.html + 67 + + montante para validar seu endereço. Isso expira em + + + Expired. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 70 + + Expirado. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/verify-address/verify-address.component.html + 106,107 + + Espere a transação ser validada. Nós enviaremos de volta sua transação assim que concluída + + + Validating address... + + src/app/components/wallet-address/verify-address/verify-address.component.html + 136 + + Validating address... + + + Now you can deal with NFTs and participate in token trading. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 174 + + Now you can deal with NFTs and participate in token trading. + + + Your new address has been verified! + + src/app/components/wallet-address/verify-address/verify-address.component.html + 176 + + Your new address has been verified! + + + Finish Verification + + src/app/components/wallet-address/verify-address/verify-address.component.html + 181,182 + + Terminar Verificação + + + Generate address + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 76 + + Gerar novo endereço + + + Refunding your payment... + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 192 + + Refunding your payment... + + + Address is not verified + + src/app/components/wallet-address/wallet-address.component.html + 4 + + Address is not verified + + + wallet + + src/app/components/wallet-address/wallet-address.component.html + 25 + + wallet + + + Copy address + + src/app/components/wallet-address/wallet-address.component.html + 30 + + Copy address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + Verifique o seu + + + address + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + endereço + + + This network is currently not enabled. + + src/app/components/wallet-address/wallet-address.component.ts + 82 + + This network is currently not enabled. + + + Award Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Award Info + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 20 + + Proprietário + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 13 + + Emblemas utilizados / disponíveis + + + Badge lock period (months) + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 15 + + Badge lock period (months) + + + Award info + + src/app/pages/award/pages/award/award.page.html + 3 + + + src/app/pages/award/pages/new/new.page.html + 17 + + Informações do Prêmio + + + Minted on: + + src/app/pages/award/pages/award/award.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 47 + + Minted on: + + + Fund Award + + src/app/pages/award/pages/award/award.page.html + 121,122 + + Fund Award + + + Minting in Progress + + src/app/pages/award/pages/award/award.page.html + 129,130 + + Minting in Progress + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 136 + + + src/app/pages/award/pages/award/award.page.html + 210 + + Check out award + + + Reject Award + + src/app/pages/award/pages/award/award.page.html + 157 + + Reject Award + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 166 + + Confirmar sua participação + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 174,176 + + Toda a comunicação agora é feita fora da plataforma, informe o criador do prêmio de como ele deve entrar em contato com você. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 180 + + Forneça uma descrição ou link para seu trabalho. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 188 + + Submit + + + Cancel + + src/app/pages/award/pages/award/award.page.html + 189 + + + src/app/pages/token/pages/trade/trade.page.html + 245 + + + src/app/pages/token/pages/trade/trade.page.html + 333 + + Cancel + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 35 + + + src/app/pages/token/pages/new/new.page.ts + 34 + + + src/app/pages/token/pages/token/token.page.ts + 36 + + Resumo + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 99 + + Participantes + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2 + + Novos Prêmios + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14 + + + src/app/pages/award/pages/new/new.page.html + 77 + + + src/app/pages/proposal/pages/new/new.page.html + 24 + + É necessário um título. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19 + + Título e descrição serão incluídos no Prêmio. A data final determina a duração do prêmio. + + + Title + + src/app/pages/award/pages/new/new.page.html + 23 + + + src/app/pages/award/pages/new/new.page.html + 29,28 + + + src/app/pages/award/pages/new/new.page.html + 76 + + + src/app/pages/award/pages/new/new.page.html + 83,82 + + + src/app/pages/proposal/pages/new/new.page.html + 23 + + + src/app/pages/proposal/pages/new/new.page.html + 29,28 + + + src/app/pages/proposal/pages/new/new.page.html + 103 + + + src/app/pages/proposal/pages/new/new.page.html + 109,108 + + + src/app/pages/proposal/pages/new/new.page.html + 156 + + + src/app/pages/proposal/pages/new/new.page.html + 162,161 + + + src/app/pages/space/pages/upsert/upsert.page.html + 24 + + + src/app/pages/space/pages/upsert/upsert.page.html + 30,29 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 106 + + + src/app/pages/token/pages/new/overview/overview.component.html + 22 + + + src/app/pages/token/pages/new/overview/overview.component.html + 29,28 + + + src/app/pages/token/pages/new/overview/overview.component.html + 65 + + + src/app/pages/token/pages/new/overview/overview.component.html + 72,71 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 9 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 16,15 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 55 + + Título + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 24 + + Você deve inserir um nome. + + + End + + src/app/pages/award/pages/new/new.page.html + 36 + + + src/app/pages/award/pages/new/new.page.html + 47,46 + + + src/app/pages/proposal/pages/new/new.page.html + 56 + + + src/app/pages/proposal/pages/new/new.page.html + 68,67 + + Finalizar + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 37 + + + src/app/pages/proposal/pages/new/new.page.html + 57 + + A data final é obrigatória. + + + Description + + src/app/pages/award/pages/new/new.page.html + 52 + + + src/app/pages/award/pages/new/new.page.html + 58 + + + src/app/pages/award/pages/new/new.page.html + 91 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 40 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 45 + + + src/app/pages/nft/pages/new/single/single.page.html + 33 + + + src/app/pages/nft/pages/new/single/single.page.html + 38 + + + src/app/pages/proposal/pages/new/new.page.html + 76 + + + src/app/pages/proposal/pages/new/new.page.html + 82 + + + src/app/pages/proposal/pages/new/new.page.html + 119 + + + src/app/pages/proposal/pages/new/new.page.html + 124 + + + src/app/pages/proposal/pages/new/new.page.html + 171 + + + src/app/pages/proposal/pages/new/new.page.html + 176 + + + src/app/pages/space/pages/upsert/upsert.page.html + 36 + + + src/app/pages/space/pages/upsert/upsert.page.html + 41 + + + src/app/pages/token/pages/new/overview/overview.component.html + 37 + + + src/app/pages/token/pages/new/overview/overview.component.html + 43 + + + src/app/pages/token/pages/new/overview/overview.component.html + 80 + + + src/app/pages/token/pages/new/overview/overview.component.html + 86 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 21 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 67 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 21 + + Descrição + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 69 + + Definição do emblema + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 71 + + O título e a descrição serão incluídos no emblema. + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 97 + + Descrição do emblema + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 115 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 370 + + + src/app/pages/proposal/pages/new/new.page.html + 205 + + Informações do Espaço + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 117 + + Este é o espaço que irá listar o prêmio. + + + Reward info + + src/app/pages/award/pages/new/new.page.html + 170 + + Reward info + + + You need to fund this award with native token. Select which token will be used as reward. + + src/app/pages/award/pages/new/new.page.html + 172 + + You need to fund this award with native token. Select which token will be used as reward. + + + Token is required. + + src/app/pages/award/pages/new/new.page.html + 176 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 247 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 325 + + Token is required. + + + Select a token + + src/app/pages/award/pages/new/new.page.html + 207 + + Select a token + + + Defines the amount of tokens for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 222,223 + + Defines the amount of tokens for each badge and the number of badges available. + + + Invalid token amount per badge + + src/app/pages/award/pages/new/new.page.html + 226 + + Invalid token amount per badge + + + Tokens per badge + + src/app/pages/award/pages/new/new.page.html + 234 + + Tokens per badge + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 251 + + + src/app/pages/award/pages/new/new.page.html + 338 + + Mínimo 1 e máximo de 10000. + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 273 + + A quantidade de emblemas que você deseja disponibilizar para este prêmio. Isto também pode ser pensado como quantos prémios você quer distribuir. + + + Total to be funded + + src/app/pages/award/pages/new/new.page.html + 284,285 + + Total to be funded + + + Upload image that will be used as a Reward Badge. + + src/app/pages/award/pages/new/new.page.html + 299 + + Upload image that will be used as a Reward Badge. + + + Badge is required. + + src/app/pages/award/pages/new/new.page.html + 328,329 + + Badge is required. + + + Set the duration for which the badge will be locked in the Firefly wallet. + + src/app/pages/award/pages/new/new.page.html + 334,335 + + Set the duration for which the badge will be locked in the Firefly wallet. + + + Create award + + src/app/pages/award/pages/new/new.page.html + 369,370 + + Criar prêmio + + + Award - New + + src/app/pages/award/pages/new/new.page.ts + 119 + + + src/app/pages/award/pages/new/new.page.ts + 134 + + Award - New + + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/award/pages/new/new.page.ts + 120 + + + src/app/pages/award/pages/new/new.page.ts + 135 + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + + Member seems to log out during the file upload request. + + src/app/pages/award/pages/new/new.page.ts + 184 + + + src/app/pages/collection/pages/upsert/upsert.page.ts + 361 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 240 + + + src/app/pages/nft/pages/new/single/single.page.ts + 180 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 131 + + + src/app/pages/token/services/new.service.ts + 204 + + Member seems to log out during the file upload request. + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2 + + Descrição do prêmio + + + Award - + + src/app/pages/award/pages/overview/overview.page.ts + 17 + + + src/app/pages/award/pages/participants/participants.page.ts + 83 + + Award - + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 49 + + + src/app/pages/award/pages/participants/participants.page.html + 63 + + + src/app/pages/proposal/pages/participants/participants.page.html + 49 + + + src/app/pages/proposal/pages/participants/participants.page.html + 63 + + Encontrar Participante + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 72 + + + src/app/pages/proposal/pages/participants/participants.page.html + 72 + + + src/app/pages/space/pages/members/members.page.html + 92 + + Mostrando apenas alguns dos principais registros... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 90,91 + + + src/app/pages/proposal/pages/participants/participants.page.html + 90,91 + + Não há participantes + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 118,119 + + Recompensa + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 138,139 + + Recompensa de novo + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 50 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 158 + + + src/app/pages/space/pages/awards/awards.page.ts + 30 + + + src/app/pages/space/pages/collections/collections.page.ts + 30 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 30 + + Pendente + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 51 + + Emitido + + + See all participants within the award. + + src/app/pages/award/pages/participants/participants.page.ts + 84 + + + src/app/pages/proposal/pages/overview/overview.page.ts + 60 + + See all participants within the award. + + + applied on + + src/app/pages/award/pages/participants/participants.page.ts + 257 + + applied on + + + Make NFT’s from this collection available on decentralised network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 12,13 + + Make NFT’s from this collection available on decentralised network. + + + Minting + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 29 + + Minting + + + NFTs left + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 32 + + NFTs left + + + Collection is not yet migrated to the decentralized network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 47,48 + + Collection is not yet migrated to the decentralized network. + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 611 + + Who can buy? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 63,64 + + Open sale + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 76,77 + + Space Members Only + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89,90 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 102,103 + + Space Members with Badge Only + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 118,119 + + Must hold at least one NFT from each selected Collections + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 126,127 + + (One NFT per member) + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 175 + + Member discounts + + + discount for members with rewards from this space in total value of + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 190 + + discount for members with rewards from this space in total value of + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 5 + + Sobre esta coleção + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 22,23 + + Limited edition + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 81,82 + + + src/app/pages/collection/pages/collection/collection.page.html + 309,310 + + Publicar a Coleção + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 93,94 + + + src/app/pages/collection/pages/collection/collection.page.html + 321,322 + + Editar Coleção + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Royalties goes to + + + Rank + + src/app/pages/collection/pages/collection/collection.page.html + 166,167 + + + src/app/pages/token/pages/token/token.page.html + 69,70 + + Rank + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 185 + + Starts at + + + Deposited + + src/app/pages/collection/pages/collection/collection.page.html + 196 + + Deposited + + + Staked + + src/app/pages/collection/pages/collection/collection.page.html + 214 + + Staked + + + Links + + src/app/pages/collection/pages/collection/collection.page.html + 223 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 154,153 + + + src/app/pages/token/pages/new/overview/overview.component.html + 160,159 + + + src/app/pages/token/pages/new/summary/summary.component.html + 307,306 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 79 + + Links + + + Sale in progress + + src/app/pages/collection/pages/collection/collection.page.html + 269 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 64 + + Venda em andamento + + + remaining + + src/app/pages/collection/pages/collection/collection.page.html + 271 + + + src/app/pages/nft/pages/nft/nft.page.html + 155 + + restantes + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 338 + + + src/app/pages/collection/pages/collection/collection.page.html + 384 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 354 + + + src/app/pages/collection/pages/collection/collection.page.html + 400 + + Cancel Collection + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 421 + + + src/app/pages/nft/pages/new/new.page.html + 2 + + Criar NFT + + + Rank amount must be between + + src/app/pages/collection/pages/collection/collection.page.ts + 277 + + + src/app/pages/token/pages/token/token.page.ts + 195 + + Rank amount must be between + + + records + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 13 + + + src/app/pages/discover/pages/awards/awards.page.html + 13 + + + src/app/pages/discover/pages/members/members.page.html + 13 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 13 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 13 + + + src/app/pages/market/pages/collections/collections.page.html + 13 + + + src/app/pages/member/pages/nfts/nfts.page.html + 13 + + records + + + Filters&Sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 30 + + + src/app/pages/discover/pages/awards/awards.page.html + 30 + + + src/app/pages/discover/pages/members/members.page.html + 30 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 30 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 30 + + + src/app/pages/market/pages/collections/collections.page.html + 30 + + Filters&Sort + + + Filters&sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 71 + + + src/app/pages/discover/pages/awards/awards.page.html + 78 + + + src/app/pages/discover/pages/members/members.page.html + 78 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 78 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 79 + + + src/app/pages/market/pages/collections/collections.page.html + 79 + + Filters&sort + + + Sort by + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 93,92 + + + src/app/pages/discover/pages/awards/awards.page.html + 94,93 + + + src/app/pages/discover/pages/members/members.page.html + 94,93 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 94,93 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 95,94 + + + src/app/pages/market/pages/collections/collections.page.html + 95,94 + + Classificar por + + + Price range + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 131 + + Price range + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2 + + Criar uma nova coleção + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3 + + Editar coleção + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18 + + Informações da coleção + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20 + + O nome e a descrição serão incluídos na Coleção. + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 58 + + + src/app/pages/nft/pages/new/single/single.page.html + 51 + + Informações de Vendas + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 60 + + Todos os tempos são refletidos no fuso horário do usuário. Para NFT e SFT gerados, o preço é definido aqui e não pode ser alterado na NFT. O preço de uma coleção de NFT clássica é apenas indicativo e pode ser alterado na NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 90 + + Direitos Autorais + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 93,95 + + Esta % de direitos autorais será aplicado na cunha inicial das NFT e em todas as vendas secundárias. O endereço IOTA que estará recebendo direitos deve sempre ter um saldo mínimo de 1 Mi devido ao mecanismo de proteção de poeira do protocolo IOTA. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 106 + + Direitos Autorais - Taxa em porcentagem + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 116 + + Exemplo: 10 %, 20 %, etc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 124 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 131 + + Os direitos autorais vão para um espaço diferente + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 155 + + Links serão incluídos no detalhe da NFT. Use nomes de usuários de conta para Twitter e Discord (nome#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 160 + + URL inválida. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 167,166 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 312,311 + + + src/app/pages/token/pages/new/overview/overview.component.html + 175,174 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 91,90 + + Endereço da URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 183 + + Conecte a sua conta do Twitter + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + Usuário do Discord inválido. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 200 + + Vincule sua conta do Discord + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 215 + + Discounts + + + The discount applies only to members who have earned tokens from awards issued by this space. + + src/app/pages/collection/pages/upsert/upsert.page.html + 217 + + The discount applies only to members who have earned tokens from awards issued by this space. + + + Token amount higher than + + src/app/pages/collection/pages/upsert/upsert.page.html + 231 + + Token amount higher than + + + Select awarded token + + src/app/pages/collection/pages/upsert/upsert.page.html + 257 + + Select awarded token + + + Discount % + + src/app/pages/collection/pages/upsert/upsert.page.html + 271 + + Discount % + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 299 + + Desconto + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 310 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 331,332 + + Valor do Desconto + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 357 + + Adicionar nível de desconto + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 372 + + Este é o espaço que estará criando a coleção NFT. Apenas espaços com carteiras verificadas aparecem na lista de seleção. Por favor, certifique-se de escolher o espaço correto porque todos os fundos da venda da NFT irão para a carteira verificada neste espaço. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 390 + + Tipo de Coleção + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 392 + + Cada tipo tem características diferentes. Isto não pode ser alterado após a criação. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 424,423 + + + src/app/pages/space/pages/upsert/upsert.page.html + 200 + + Cartaz + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 454,455 + + O Cartaz é necessário. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 464 + + Marcador de posição + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 494,495 + + O marcador de posição é obrigatório. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 504 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 517 + + + src/app/pages/market/pages/collections/collections.page.html + 177 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138 + + Categoria + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 506 + + A Categoria é usada ao filtrar o conteúdo. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 510 + + Categoria. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 535 + + Configuração da Coleção + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 537 + + Quem tem acesso a uma determinada coleção. + + + Open Sale + + src/app/pages/collection/pages/upsert/upsert.page.html + 546 + + Abrir Venda + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 552 + + Todos têm acesso a essa coleção. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 564 + + Somente os Guardiões do Espaço podem acessar. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 577 + + Só os membros do espaço podem acessar. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 590 + + Apenas membros do Espaço com Emblema podem acessar. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 608 + + Opções de Coleção + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 626 + + One NFT per Member Only + + + Select collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 651 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 147 + + + src/app/pages/nft/pages/new/single/single.page.html + 361 + + Selecione uma Coleção + + + Select award + + src/app/pages/collection/pages/upsert/upsert.page.html + 670 + + Select award + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 692,693 + + Criar coleção + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 705,706 + + Salvar Coleção + + + Check out collection + + src/app/pages/collection/services/helper.service.ts + 68 + + Confira a Coleção + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 5 + + Solicitações de participação pendentes + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 16 + + Seus espaços + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 32,33 + + Ainda não há espaços + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 41,42 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 56 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 68 + + Active proposals + + + Spaces + + src/app/pages/discover/pages/awards/awards.page.html + 115,114 + + + src/app/pages/discover/pages/discover/discover.page.ts + 9 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 115,114 + + + src/app/pages/market/pages/collections/collections.page.html + 146,145 + + + src/app/pages/member/pages/member/member.page.ts + 65 + + Espaços + + + Discover - Awards + + src/app/pages/discover/pages/awards/awards.page.ts + 58 + + Discover - Awards + + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/discover/pages/awards/awards.page.ts + 59 + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + + Awards + + src/app/pages/discover/pages/discover/discover.page.ts + 10 + + + src/app/pages/member/pages/member/member.page.ts + 64 + + + src/app/pages/space/pages/space/space.page.ts + 47 + + Prêmios + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 11 + + + src/app/pages/space/pages/space/space.page.ts + 46 + + Propostas + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 12 + + + src/app/pages/space/pages/space/space.page.ts + 48 + + Membros + + + Discover - Members + + src/app/pages/discover/pages/members/members.page.ts + 51 + + Discover - Members + + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + src/app/pages/discover/pages/members/members.page.ts + 52 + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + + Discover - Proposals + + src/app/pages/discover/pages/proposals/proposals.page.ts + 57 + + Discover - Proposals + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + src/app/pages/discover/pages/proposals/proposals.page.ts + 58 + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + + Discover - Spaces + + src/app/pages/discover/pages/spaces/spaces.page.ts + 54 + + Discover - Spaces + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/discover/pages/spaces/spaces.page.ts + 55 + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + + Sale type + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Sale type + + + Collections - NFT + + src/app/pages/market/pages/collections/collections.page.ts + 68 + + Collections - NFT + + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + src/app/pages/market/pages/collections/collections.page.ts + 69 + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + + NFT Collections + + src/app/pages/market/pages/market/market.page.html + 2 + + NFT Collections + + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/market/pages/market/market.page.html + 11,13 + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + + I understand + + src/app/pages/market/pages/market/market.page.html + 22,23 + + + src/app/pages/member/pages/tokens/tokens.page.html + 43,44 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 22,23 + + I understand + + + Collections + + src/app/pages/market/pages/market/market.page.ts + 13 + + + src/app/pages/market/pages/market/market.page.ts + 34 + + + src/app/pages/space/pages/space/space.page.ts + 45 + + Coleções + + + Total staked + + src/app/pages/member/pages/activity/activity.page.html + 17,18 + + Total staked + + + Staking Value: + + src/app/pages/member/pages/activity/activity.page.html + 29,39 + + Staking Value: + + + Claimable Reward + + src/app/pages/member/pages/activity/activity.page.html + 47,48 + + Claimable Reward + + + Stake more + + src/app/pages/member/pages/activity/activity.page.html + 104,105 + + Stake more + + + Stake + + src/app/pages/member/pages/activity/activity.page.html + 107,108 + + Stake + + + My Staking + + src/app/pages/member/pages/activity/activity.page.html + 133 + + My Staking + + + until + + src/app/pages/member/pages/activity/activity.page.html + 138 + + until + + + My Favourites + + src/app/pages/member/pages/activity/activity.page.html + 152 + + My Favourites + + + View All + + src/app/pages/member/pages/activity/activity.page.html + 155 + + View All + + + Profile Options + + src/app/pages/member/pages/activity/activity.page.html + 172 + + Profile Options + + + Edit Profile + + src/app/pages/member/pages/activity/activity.page.html + 185 + + Edit Profile + + + Manage Addresses + + src/app/pages/member/pages/activity/activity.page.html + 191 + + + src/app/pages/space/pages/manage/manage.page.html + 27 + + Manage Addresses + + + Export All Transactions + + src/app/pages/member/pages/activity/activity.page.html + 202 + + Export All Transactions + + + Request Verification + + src/app/pages/member/pages/activity/activity.page.html + 227 + + + src/app/pages/space/pages/manage/manage.page.html + 85 + + Request Verification + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + Pendente + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 18,19 + + Emitido + + + No Awards + + src/app/pages/member/pages/awards/awards.page.html + 34,35 + + + src/app/pages/space/pages/awards/awards.page.html + 63,64 + + Não há prêmios + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 44,45 + + Discover Awards + + + Reputation + + src/app/pages/member/pages/badges/badges.page.html + 2 + + + src/app/pages/member/pages/member/member.page.ts + 63 + + Reputação + + + Spaces + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Spaces + + + Awards + + src/app/pages/member/pages/badges/badges.page.html + 27,28 + + Awards + + + Total Rewards + + src/app/pages/member/pages/badges/badges.page.html + 33,34 + + Total Rewards + + + My profile + + src/app/pages/member/pages/member/member.page.html + 13 + + My profile + + + Profile + + src/app/pages/member/pages/member/member.page.html + 15 + + Perfil + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 27,28 + + Profile info + + + Joined + + src/app/pages/member/pages/member/member.page.html + 49 + + Joined + + + Member - + + src/app/pages/member/pages/member/member.page.ts + 83 + + Member - + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 145 + + Atividade + + + Transactions + + src/app/pages/member/pages/member/member.page.ts + 147 + + + src/app/pages/member/pages/transactions/transactions.page.html + 18 + + Transactions + + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + src/app/pages/member/pages/nfts/nfts.page.html + 25,26 + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + + Deposit NFT + + src/app/pages/member/pages/nfts/nfts.page.html + 29,30 + + Deposit NFT + + + No NFTs + + src/app/pages/member/pages/nfts/nfts.page.html + 59,60 + + + src/app/pages/nft/pages/nft/nft.page.html + 744,745 + + Nenhuma NFTs + + + Tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 11,12 + + Tokens + + + Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 20,21 + + Staking + + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + src/app/pages/member/pages/tokens/tokens.page.html + 32,34 + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + + Item + + src/app/pages/member/pages/tokens/tokens.page.html + 57 + + + src/app/pages/member/pages/tokens/tokens.page.html + 324 + + + src/app/pages/member/pages/transactions/transactions.page.html + 23 + + Item + + + Total + + src/app/pages/member/pages/tokens/tokens.page.html + 59 + + + src/app/pages/token/pages/trade/trade.page.html + 204 + + + src/app/pages/token/pages/trade/trade.page.html + 278 + + + src/app/pages/token/pages/trade/trade.page.html + 367 + + + src/app/pages/token/pages/trade/trade.page.html + 668 + + Total + + + Owned + + src/app/pages/member/pages/tokens/tokens.page.html + 87 + + + src/app/pages/member/pages/tokens/tokens.page.html + 170 + + + src/app/pages/nft/pages/nft/nft.page.html + 17 + + Adquirido + + + Airdropped + + src/app/pages/member/pages/tokens/tokens.page.html + 118 + + + src/app/pages/member/pages/tokens/tokens.page.html + 172 + + Airdropped + + + from + + src/app/pages/member/pages/tokens/tokens.page.html + 120 + + from + + + Deposit for purchase + + src/app/pages/member/pages/tokens/tokens.page.html + 215 + + Deposit for purchase + + + No tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 258,259 + + No tokens + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 297 + + Active Staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 300 + + Expired Staking + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 307,308 + + Active Staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 310,311 + + Expired Staking + + + Staked From + + src/app/pages/member/pages/tokens/tokens.page.html + 326 + + Staked From + + + Staked Until + + src/app/pages/member/pages/tokens/tokens.page.html + 327 + + Staked Until + + + Multiplier + + src/app/pages/member/pages/tokens/tokens.page.html + 329 + + Multiplier + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 330 + + Staked Value + + + Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 380 + + Stakes + + + No Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 403,404 + + No Stakes + + + Staked from - to + + src/app/pages/member/pages/tokens/tokens.page.html + 432,433 + + Staked from - to + + + Amount (Multiplier) + + src/app/pages/member/pages/tokens/tokens.page.html + 445,446 + + Amount (Multiplier) + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 457,458 + + Staked Value + + + Claim + + src/app/pages/member/pages/tokens/tokens.page.ts + 57 + + Claim + + + Refund + + src/app/pages/member/pages/tokens/tokens.page.ts + 58 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 19 + + Refund + + + Export CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 9 + + Export CSV + + + Exporting CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 13 + + Exporting CSV + + + No transactions + + src/app/pages/member/pages/transactions/transactions.page.html + 120,121 + + No transactions + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 40 + + Alguns arquivos não foram carregados + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 51,52 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + Arquivo CSV carregado + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 67 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 73 + + Nome do arquivo + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 101 + + Erro + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 160 + + Carregar CSV existente + + + Upload back once you generate below + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 162 + + Upload back once you generate below + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 193,194 + + Você tem que enviar imagens primeiro. + + + Generate CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 211 + + Generate CSV + + + Publish NFTs + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 212 + + Publish NFTs + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 224,225 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Único + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Múltiplo + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14 + + Informação da NFT + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16 + + O nome e a descrição serão incluídos na NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 22 + + O nome é obrigatório. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 34 + + + src/app/pages/proposal/pages/new/new.page.html + 77 + + A descrição é obrigatória. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 53 + + Todos os tempos são refletidos no fuso horário do usuário. Para NFT gerada e SFT, o preço é definido por coleção e não pode ser alterado aqui. + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 92 + + Propriedades aparecem abaixo do seu item. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 102 + + Nome da propriedade (por exemplo, Personagem) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 103 + + Valor (por exemplo, Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 115 + + + src/app/pages/nft/pages/new/single/single.page.html + 151 + + + src/app/pages/nft/pages/new/single/single.page.html + 158 + + Nome da propriedade + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 126,125 + + + src/app/pages/nft/pages/new/single/single.page.html + 163 + + + src/app/pages/nft/pages/new/single/single.page.html + 171,170 + + + src/app/pages/nft/pages/new/single/single.page.html + 228,227 + + + src/app/pages/nft/pages/new/single/single.page.html + 266 + + + src/app/pages/nft/pages/new/single/single.page.html + 272,271 + + Valor + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 142 + + Propriedade + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 185 + + Adicionar propriedade + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 194 + + Os atributos aparecem abaixo do seu item. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Nome do atributo (E.g. Resistência) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 205 + + Valor (ex. 10, 1/10 , etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 217 + + + src/app/pages/nft/pages/new/single/single.page.html + 254 + + + src/app/pages/nft/pages/new/single/single.page.html + 261 + + Nome do Atributo + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 245 + + Atributo + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287 + + Adicionar Atributo + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 303 + + Envie a imagem do seu NFT. Tipos de arquivo suportados: PNG, JPEG, WEBP, MP4. Tamanho máximo: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 333 + + Media is required + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 348 + + Selecione uma das suas coleções para exibir esta NFT. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 383,384 + + Criar NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 393,394 + + Pré-visualizar NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 168 + + File name is not valid + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 7 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 48 + + + src/app/pages/nft/pages/nft/nft.page.html + 516 + + Confira nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 109 + + Current highest bid + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 165 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 173 + + Sale hasn't started yet + + + NFT is pending other member's transaction + + src/app/pages/nft/pages/nft/nft.page.html + 181 + + NFT is pending other member's transaction + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 190 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 198 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 213 + + Sell NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 218 + + Change Fixed Price + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 223 + + Change Auction + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 240,241 + + Place bid + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 263,264 + + Compre agora + + + Bidding + + src/app/pages/nft/pages/nft/nft.page.html + 281 + + Bidding + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 290 + + Current Bids + + + Past bids + + src/app/pages/nft/pages/nft/nft.page.html + 298 + + Past bids + + + My biddings + + src/app/pages/nft/pages/nft/nft.page.html + 307 + + My biddings + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 321 + + Member + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 322 + + Bidded on + + + There are no current bids + + src/app/pages/nft/pages/nft/nft.page.html + 369,370 + + There are no current bids + + + There are no past bids + + src/app/pages/nft/pages/nft/nft.page.html + 419,420 + + There are no past bids + + + There are no records. + + src/app/pages/nft/pages/nft/nft.page.html + 469,470 + + There are no records. + + + Withdraw NFT + + src/app/pages/nft/pages/nft/nft.page.html + 509,510 + + Withdraw NFT + + + History + + src/app/pages/nft/pages/nft/nft.page.html + 522 + + History + + + Minting in Progress + + src/app/pages/nft/pages/nft/nft.page.html + 556 + + Minting in Progress + + + Available for specific Member Only + + src/app/pages/nft/pages/nft/nft.page.html + 619 + + Available for specific Member Only + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 647 + + Veja todos os detalhes da transação dessa NFT no Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 685 + + Sobre a Coleção + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 694 + + Mostrar + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 695 + + coleção + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 707,706 + + por + + + Firefly does not support NFTs yet! + + src/app/pages/nft/pages/nft/nft.page.html + 799 + + Firefly does not support NFTs yet! + + + Are you sure you want to withdraw NFT from Soonaverse? + + src/app/pages/nft/pages/nft/nft.page.html + 802 + + Are you sure you want to withdraw NFT from Soonaverse? + + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + src/app/pages/nft/pages/nft/nft.page.html + 804 + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + + Confirm with Metamask + + src/app/pages/nft/pages/nft/nft.page.html + 806 + + Confirm with Metamask + + + View + + src/app/pages/nft/pages/nft/nft.page.ts + 82 + + Visualizar + + + NFT Withdrawn. + + src/app/pages/nft/pages/nft/nft.page.ts + 686 + + NFT Withdrawn. + + + Oops, it's in another universe + + src/app/pages/nft/pages/not-found/not-found.page.html + 8 + + Oops, it's in another universe + + + NFT you are looking for no longer exists on Soonaverse. + + src/app/pages/nft/pages/not-found/not-found.page.html + 12,14 + + NFT you are looking for no longer exists on Soonaverse. + + + Back to Marketplace + + src/app/pages/nft/pages/not-found/not-found.page.html + 22,24 + + Back to Marketplace + + + Auction Starts + + src/app/pages/nft/services/helper.service.ts + 145 + + Auction Starts + + + Auction Ends + + src/app/pages/nft/services/helper.service.ts + 148 + + Auction Ends + + + Pool by + + src/app/pages/pool/pages/market/pool.page.html + 3,12 + + Pool by + + + What is Pool? + + src/app/pages/pool/pages/market/pool.page.html + 20,21 + + What is Pool? + + + See Pool on iotabee + + src/app/pages/pool/pages/market/pool.page.html + 37,39 + + See Pool on iotabee + + + What is iotabee? + + src/app/pages/pool/pages/market/pool.page.html + 49 + + + src/app/pages/swap/pages/market/swap.page.html + 49 + + What is iotabee? + + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + src/app/pages/pool/pages/market/pool.page.html + 51,54 + + + src/app/pages/swap/pages/market/swap.page.html + 51,54 + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + + iotabee.com + + src/app/pages/pool/pages/market/pool.page.html + 61,62 + + + src/app/pages/swap/pages/market/swap.page.html + 61,62 + + iotabee.com + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2 + + New Proposal + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 3 + + Informação da proposta + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19 + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 39 + + + src/app/pages/proposal/pages/new/new.page.html + 50,49 + + Start + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 40 + + A data final é obrigatória. + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 93 + + Question Info + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 95 + + Title and description will only be displayed for this question. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 104 + + O Titulo da Pergunta é obrigatório. + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 143 + + Text and description for each individual answer. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 157 + + A resposta é obrigatória. + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 192 + + Adicionar Opção + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 207 + + This is the space that will list the proposal. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 259 + + Proposal Setup + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 261 + + Defines who has access to the proposal and what is the voting method. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 269 + + Target Participants + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 276 + + Todos os Guardiões + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 283 + + Only guardians can vote on this proposal + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 289 + + Todos os Membros + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 296 + + All members can vote on this proposal + + + Space's Native Token + + src/app/pages/proposal/pages/new/new.page.html + 302 + + + src/app/pages/proposal/services/helper.service.ts + 23 + + Space's Native Token + + + You must have minted token linked to your space first! + + src/app/pages/proposal/pages/new/new.page.html + 313 + + You must have minted token linked to your space first! + + + All token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 321 + + All token holders can vote. + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 343,344 + + Criar proposta + + + Proposal - New + + src/app/pages/proposal/pages/new/new.page.ts + 136 + + + src/app/pages/proposal/pages/new/new.page.ts + 151 + + Proposal - New + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + src/app/pages/proposal/pages/new/new.page.ts + 137 + + + src/app/pages/proposal/pages/new/new.page.ts + 152 + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 321 + + Choice + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 328 + + badge + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 332 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 5 + + Resultados finais + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 74 + + Descrição da proposta + + + Proposal - + + src/app/pages/proposal/pages/overview/overview.page.ts + 59 + + Proposal - + + + Voted + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 21 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 49 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 156 + + Votado + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 32 + + Votar agora + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 43 + + Início da votação + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 56 + + Você não faz parte da votação + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 60 + + Para votar, tem de fazer parte do espaço antes de a proposta ser criada. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 69 + + Faça login para votar + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 73 + + Para votar, você deve logar primeiro. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 84 + + Aprovação do Guardião Pendente + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 88 + + Esta proposta ainda não foi aprovada por nenhum Guardião. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 102 + + Peso + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 48 + + Voto pendente + + + Proposal - Participants + + src/app/pages/proposal/pages/participants/participants.page.ts + 83 + + Proposal - Participants + + + See all participants within the proposal + + src/app/pages/proposal/pages/participants/participants.page.ts + 84 + + See all participants within the proposal + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 151 + + joined soonaverse on + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 12,13 + + Aprovar + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 23,24 + + Rejeitar + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 67 + + Tipo de votação desta proposta. + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 75 + + Peso total nesta proposta para todos os participantes. + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 22 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 22 + + Marco atual + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 23 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 23 + + Data de Inicio + + + Voting Type + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 26 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 26 + + Tipo de Votação + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 27 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 27 + + Peso total + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 79 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 148 + + Check out proposal + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 87 + + Resultados atuais + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 120 + + Emblemas selecionados + + + Votes + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 36 + + Votes + + + Voter + + src/app/pages/proposal/pages/votes/votes.page.html + 14 + + Votantes + + + Option (Weight) + + src/app/pages/proposal/pages/votes/votes.page.html + 16 + + Option (Weight) + + + Expired On + + src/app/pages/proposal/pages/votes/votes.page.html + 18 + + Expired On + + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + src/app/pages/proposal/pages/votes/votes.page.html + 24 + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + + One Member One Vote + + src/app/pages/proposal/services/helper.service.ts + 25 + + One Member One Vote + + + XP Reputation - Space + + src/app/pages/proposal/services/helper.service.ts + 27 + + Reputação de XP - Espaço + + + XP Reputation - Selected Badges + + src/app/pages/proposal/services/helper.service.ts + 29 + + Reputação de XP - Emblemas Selecionados + + + Staking + + src/app/pages/soon-staking/pages/staking/staking.page.html + 3,4 + + Staking + + + How much I earn? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 13 + + How much I earn? + + + How it works? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 135 + + How it works? + + + Stake your tokens to earn rewards and unlock new features. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 137,139 + + Stake your tokens to earn rewards and unlock new features. + + + Unique Perks for stakers + + src/app/pages/soon-staking/pages/staking/staking.page.html + 160 + + Unique Perks for stakers + + + Rewards + + src/app/pages/soon-staking/pages/staking/staking.page.html + 167,168 + + Rewards + + + Trading Bonuses + + src/app/pages/soon-staking/pages/staking/staking.page.html + 180 + + Trading Bonuses + + + Unique Features + + src/app/pages/soon-staking/pages/staking/staking.page.html + 193 + + Unique Features + + + Earn more er than you think + + src/app/pages/soon-staking/pages/staking/staking.page.html + 209 + + Earn more er than you think + + + The more you hold, the more rewards you get. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 214,215 + + The more you hold, the more rewards you get. + + + New + + src/app/pages/space/pages/awards/awards.page.html + 43 + + + src/app/pages/space/pages/collections/collections.page.html + 49 + + + src/app/pages/space/pages/proposals/proposals.page.html + 42 + + Novo + + + award + + src/app/pages/space/pages/awards/awards.page.html + 44 + + prêmios + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 31 + + + src/app/pages/space/pages/members/members.page.html + 45 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 31 + + Ativo + + + Space - Awards + + src/app/pages/space/pages/awards/awards.page.ts + 54 + + Space - Awards + + + Space's awards + + src/app/pages/space/pages/awards/awards.page.ts + 55 + + Space's awards + + + No Collections + + src/app/pages/space/pages/collections/collections.page.html + 70,71 + + Sem Coleções + + + Space - Collections + + src/app/pages/space/pages/collections/collections.page.ts + 65 + + Space - Collections + + + Space's collections + + src/app/pages/space/pages/collections/collections.page.ts + 66 + + Space's collections + + + Space Options + + src/app/pages/space/pages/manage/manage.page.html + 2 + + Space Options + + + Token Options + + src/app/pages/space/pages/manage/manage.page.html + 6 + + Token Options + + + Edit Space + + src/app/pages/space/pages/manage/manage.page.html + 21 + + Edit Space + + + Manage Guardians + + src/app/pages/space/pages/manage/manage.page.html + 38 + + Manage Guardians + + + Export Current Members + + src/app/pages/space/pages/manage/manage.page.html + 44 + + Export Current Members + + + Create New Award + + src/app/pages/space/pages/manage/manage.page.html + 57 + + Create New Award + + + Create New Proposal + + src/app/pages/space/pages/manage/manage.page.html + 68 + + Create New Proposal + + + Create New Collection + + src/app/pages/space/pages/manage/manage.page.html + 79 + + Create New Collection + + + Edit Token + + src/app/pages/space/pages/manage/manage.page.html + 105 + + Edit Token + + + Create Airdrop + + src/app/pages/space/pages/manage/manage.page.html + 127 + + Create Airdrop + + + Staking Reward Schedule + + src/app/pages/space/pages/manage/manage.page.html + 135 + + Staking Reward Schedule + + + Export Current Stakers + + src/app/pages/space/pages/manage/manage.page.html + 141 + + Export Current Stakers + + + Active + + src/app/pages/space/pages/members/members.page.html + 18,19 + + Ativo + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 35,36 + + Bloqueado + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 52 + + Bloqueado + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 67 + + + src/app/pages/space/pages/members/members.page.html + 82 + + Encontrar membros + + + No Members + + src/app/pages/space/pages/members/members.page.html + 110,111 + + Não há membros + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 118 + + ingressou no espaço + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 161,162 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 174,175 + + Make Guardian + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 184,185 + + Block Member + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 187,188 + + Accept Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 190,191 + + Unblock Member + + + Space - Members + + src/app/pages/space/pages/members/members.page.ts + 76 + + Space - Members + + + Space's members + + src/app/pages/space/pages/members/members.page.ts + 77 + + Space's members + + + Upcoming Sale + + src/app/pages/space/pages/overview/overview.page.html + 7 + + Upcoming Sale + + + Live Token Sale + + src/app/pages/space/pages/overview/overview.page.html + 9 + + Live Token Sale + + + Space - + + src/app/pages/space/pages/overview/overview.page.ts + 55 + + Space - + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 43 + + proposta + + + No Proposals + + src/app/pages/space/pages/proposals/proposals.page.html + 62,63 + + Não há propostas + + + Space - Proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 54 + + Space - Proposals + + + Space's proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 55 + + Space's proposals + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 34 + + Check out space + + + pending + + src/app/pages/space/pages/space/space-about/space-about.component.html + 153 + + pending + + + Export members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 168 + + Export members + + + Exporting members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 172 + + Exporting members + + + Open to join instantly + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Open to join instantly + + + Requires approval to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 183 + + Requires approval to join + + + Requires + + src/app/pages/space/pages/space/space-about/space-about.component.html + 187 + + Requires + + + staked value to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 193 + + staked value to join + + + Related Links + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 92 + + Related Links + + + Claim ownership + + src/app/pages/space/pages/space/space-about/space-about.component.html + 259,260 + + Claim ownership + + + Space's Wallet Addresses + + src/app/pages/space/pages/space/space-about/space-about.component.html + 290 + + Space's Wallet Addresses + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 321 + + Sair do Espaço + + + About space + + src/app/pages/space/pages/space/space.page.html + 3 + + Sobre o espaço + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 55,56 + + + src/app/pages/space/pages/space/space.page.html + 118,119 + + Entrar no Espaço + + + Pending Request + + src/app/pages/space/pages/space/space.page.html + 68 + + + src/app/pages/space/pages/space/space.page.html + 131 + + Pending Request + + + Ask to join Space + + src/app/pages/space/pages/space/space.page.html + 70 + + + src/app/pages/space/pages/space/space.page.html + 133 + + Ask to join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 82,83 + + + src/app/pages/space/pages/space/space.page.html + 160,161 + + Editar Espaço + + + Stake + + src/app/pages/space/pages/space/space.page.html + 144 + + Stake + + + to Join + + src/app/pages/space/pages/space/space.page.html + 147 + + to Join + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2 + + Adicionar novo Espaço + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3 + + Editar Espaço + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17 + + Informações do Espaço + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19 + + Título e descrição serão incluídos no Espaço. + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 56 + + Links serão incluídos no detalhe do Espaço. Use nomes de usuários de conta no Github, Twitter e Discord (nome#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 97 + + Apenas o código de convite discord é suportado (ou seja, RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 104 + + Digite seu código de convite do Discord + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 125 + + Tipo de Espaço + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 127 + + Cada tipo tem características diferentes. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 137,138 + + Aberto para qualquer um entrar instantaneamente + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 142 + + Requer aprovação de um membro + + + Requires stake value (in space's token) + + src/app/pages/space/pages/upsert/upsert.page.html + 146 + + Requires stake value (in space's token) + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 174 + + Avatar is mandatory + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 243,244 + + Criar Espaço + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 256,257 + + Salvar Espaço + + + Space - New + + src/app/pages/space/pages/upsert/upsert.page.ts + 76 + + Space - New + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/space/pages/upsert/upsert.page.ts + 77 + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 210 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 216 + + Upload new to replace existing. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 211 + + Your brand is key. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 217 + + Make it personal. + + + Swap by + + src/app/pages/swap/pages/market/swap.page.html + 3,12 + + Swap by + + + What is Swap? + + src/app/pages/swap/pages/market/swap.page.html + 20,21 + + What is Swap? + + + See Swap on iotabee + + src/app/pages/swap/pages/market/swap.page.html + 37,39 + + See Swap on iotabee + + + Create airdrop + + src/app/pages/token/pages/airdrops/airdrops.page.html + 8,9 + + Create airdrop + + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/pages/token/pages/airdrops/airdrops.page.html + 17,19 + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + + Some rows have been removed + + src/app/pages/token/pages/airdrops/airdrops.page.html + 92 + + Some rows have been removed + + + Submit airdrop + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 118,119 + + Submit airdrop + + + + row is not valid + + src/app/pages/token/pages/airdrops/airdrops.page.ts + 73 + + row is not valid + + + Breakdown + + src/app/pages/token/pages/metrics/metrics.page.html + 1 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 284 + + Breakdown + + + Token distribution + + src/app/pages/token/pages/metrics/metrics.page.html + 5 + + Token distribution + + + Total token supply + + src/app/pages/token/pages/metrics/metrics.page.ts + 56 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 96 + + Total token supply + + + Launchpad price per token + + src/app/pages/token/pages/metrics/metrics.page.ts + 67 + + Launchpad price per token + + + Initial Cap + + src/app/pages/token/pages/metrics/metrics.page.ts + 74 + + Initial Cap + + + Total melted tokens + + src/app/pages/token/pages/metrics/metrics.page.ts + 82 + + Total melted tokens + + + You can create only ONE token per space and it can never be changed. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 14,15 + + You can create only ONE token per space and it can never be changed. + + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 23,26 + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + + Continue + + src/app/pages/token/pages/new/introduction/introduction.component.html + 38,39 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 191,192 + + + src/app/pages/token/pages/new/overview/overview.component.html + 104,105 + + Continue + + + Token Sale Requirements + + src/app/pages/token/pages/new/introduction/introduction.component.html + 50 + + Token Sale Requirements + + + To create a public sale or use the Token Exchange you must complete our KYC process. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 52 + + To create a public sale or use the Token Exchange you must complete our KYC process. + + + Begin Process + + src/app/pages/token/pages/new/introduction/introduction.component.html + 58 + + Begin Process + + + Continue + + + src/app/pages/token/pages/new/introduction/introduction.component.html + 73,74 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 330,331 + + + src/app/pages/token/pages/new/overview/overview.component.html + 231,232 + + Continue + + + + Token info + + src/app/pages/token/pages/new/metrics/metrics.component.html + 9 + + + src/app/pages/token/pages/new/summary/summary.component.html + 14 + + + src/app/pages/token/pages/token/token.page.html + 3 + + Token info + + + Name is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 16 + + Name is invalid. + + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + src/app/pages/token/pages/new/metrics/metrics.component.html + 33 + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + + Token supply + + src/app/pages/token/pages/new/metrics/metrics.component.html + 47 + + + src/app/pages/token/pages/new/summary/summary.component.html + 53 + + Token supply + + + Price per token (MIOTA) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 53 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 58 + + Price per token (MIOTA) + + + Price is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 54 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 38 + + Price is invalid. + + + Total token supply (up to 6 decimals are supported) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 68 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 74 + + Total token supply (up to 6 decimals are supported) + + + Total supply is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 69 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 107 + + Total supply is invalid. + + + Allocation title + + src/app/pages/token/pages/new/metrics/metrics.component.html + 111 + + Allocation title + + + % of tokens for sale + + src/app/pages/token/pages/new/metrics/metrics.component.html + 121 + + % of tokens for sale + + + Percentage of tokens is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 122 + + Percentage of tokens is invalid. + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 126 + + % of tokens for sale (Default 100%) + + + Only 1 of the allocations can be public + + src/app/pages/token/pages/new/metrics/metrics.component.html + 149 + + Only 1 of the allocations can be public + + + Sum of the percentages must be 100 + + src/app/pages/token/pages/new/metrics/metrics.component.html + 155 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 166 + + Sum of the percentages must be 100 + + + Invalid sum of percentages + + src/app/pages/token/pages/new/metrics/metrics.component.html + 160 + + Invalid sum of percentages + + + Add allocation + + src/app/pages/token/pages/new/metrics/metrics.component.html + 179 + + Add allocation + + + Token icon + + src/app/pages/token/pages/new/metrics/metrics.component.html + 221 + + + src/app/pages/token/pages/new/summary/summary.component.html + 265 + + Token icon + + + (Recomended size: 400 x 400px) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 223 + + (Recomended size: 400 x 400px) + + + Icon is mandatory + + src/app/pages/token/pages/new/metrics/metrics.component.html + 232 + + Icon is mandatory + + + Token price + + src/app/pages/token/pages/new/metrics/metrics.component.html + 264 + + + src/app/pages/token/pages/new/summary/summary.component.html + 283 + + Token price + + + Distribution of the token happens after the token offering end date. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 266 + + + src/app/pages/token/pages/new/summary/summary.component.html + 285 + + Distribution of the token happens after the token offering end date. + + + Configure the token supply first to see breakdown. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 288 + + Configure the token supply first to see breakdown. + + + Token terms and conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 298 + + + src/app/pages/token/pages/new/summary/summary.component.html + 324 + + Token terms and conditions + + + Provide link for Terms and Conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 300 + + Provide link for Terms and Conditions + + + Terms and Conditions link is invalid. (Start with http:// or https://) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 306 + + Terms and Conditions link is invalid. (Start with http:// or https://) + + + Token allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 75 + + + src/app/pages/token/pages/new/summary/summary.component.html + 165 + + Token allocation + + + Allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 76 + + + src/app/pages/token/pages/new/summary/summary.component.ts + 30 + + Allocation + + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 81,82 + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + + Create token + + src/app/pages/token/pages/new/new.page.html + 2 + + Create token + + + Introduction + + src/app/pages/token/pages/new/new.page.ts + 32 + + Introduction + + + Metrics + + src/app/pages/token/pages/new/new.page.ts + 33 + + + src/app/pages/token/pages/token/token.page.ts + 38 + + Metrics + + + Summary + + src/app/pages/token/pages/new/new.page.ts + 35 + + Summary + + + New Token + + src/app/pages/token/pages/new/new.page.ts + 72 + + New Token + + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + src/app/pages/token/pages/new/new.page.ts + 73 + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + + Token description + + src/app/pages/token/pages/new/overview/overview.component.html + 12 + + + src/app/pages/token/pages/new/summary/summary.component.html + 93 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 6 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 27 + + Token description + + + This text will be displayed on the main token page. + + src/app/pages/token/pages/new/overview/overview.component.html + 14 + + This text will be displayed on the main token page. + + + Title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 23 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 10 + + Title is invalid. + + + Description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 38 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 22 + + Description is invalid. + + + Short description + + src/app/pages/token/pages/new/overview/overview.component.html + 55 + + + src/app/pages/token/pages/new/summary/summary.component.html + 129 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 49 + + Short description + + + Short description of the token which will be displayed on the token trading page. + + src/app/pages/token/pages/new/overview/overview.component.html + 57 + + Short description of the token which will be displayed on the token trading page. + + + Short title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 66 + + Short title is invalid. + + + Short description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 81 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 68 + + Short description is invalid. + + + Overview graphics + + src/app/pages/token/pages/new/overview/overview.component.html + 121 + + Overview graphics + + + Token introductory video / image + + src/app/pages/token/pages/new/overview/overview.component.html + 123 + + Token introductory video / image + + + Introductionary media is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 132 + + Introductionary media is invalid. + + + Invalid URL. (Start with http:// or https://) + + src/app/pages/token/pages/new/overview/overview.component.html + 168 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 84 + + Invalid URL. (Start with http:// or https://) + + + Add link + + src/app/pages/token/pages/new/overview/overview.component.html + 191 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 107 + + Add link + + + Trading Options + + src/app/pages/token/pages/new/overview/overview.component.html + 203 + + Trading Options + + + Enable trading + + src/app/pages/token/pages/new/overview/overview.component.html + 207 + + Enable trading + + + Edit + + src/app/pages/token/pages/new/summary/summary.component.html + 22,23 + + + src/app/pages/token/pages/new/summary/summary.component.html + 61,62 + + + src/app/pages/token/pages/new/summary/summary.component.html + 101,102 + + + src/app/pages/token/pages/new/summary/summary.component.html + 137,138 + + + src/app/pages/token/pages/new/summary/summary.component.html + 173,174 + + Edit + + + Name + + src/app/pages/token/pages/new/summary/summary.component.html + 30,31 + + Name + + + Symbol + + src/app/pages/token/pages/new/summary/summary.component.html + 41,42 + + Symbol + + + Total token supply + + src/app/pages/token/pages/new/summary/summary.component.html + 80,81 + + Total token supply + + + Description title + + src/app/pages/token/pages/new/summary/summary.component.html + 109,110 + + Description title + + + Description + + src/app/pages/token/pages/new/summary/summary.component.html + 120,121 + + Description + + + Short description title + + src/app/pages/token/pages/new/summary/summary.component.html + 145,146 + + Short description title + + + Short description + + src/app/pages/token/pages/new/summary/summary.component.html + 156,157 + + Short description + + + Allocation title + + src/app/pages/token/pages/new/summary/summary.component.html + 187,188 + + Allocation title + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/summary/summary.component.html + 198,199 + + % of tokens for sale (Default 100%) + + + Submit token + + src/app/pages/token/pages/new/summary/summary.component.html + 227,228 + + Submit token + + + (Recommended size: 400 x 400px) + + src/app/pages/token/pages/new/summary/summary.component.html + 267 + + (Recommended size: 400 x 400px) + + + Some description + + src/app/pages/token/pages/new/summary/summary.component.html + 326 + + Some description + + + Terms&conditions + + src/app/pages/token/pages/new/summary/summary.component.html + 340 + + Terms&conditions + + + Submit token + + + src/app/pages/token/pages/new/summary/summary.component.html + 356,357 + + Submit token + + + + Trade token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 15,16 + + Trade token + + + Buy Tokens + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 28,29 + + Buy Tokens + + + Schedule public sale + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 42,43 + + Schedule public sale + + + Allow Trading + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 57,58 + + Allow Trading + + + Edit token info + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 86 + + Edit token info + + + Check out token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 100 + + Check out token + + + Mint Token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 132,133 + + Mint Token + + + Minting in progress + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 144,145 + + Minting in progress + + + Token was not made available on decentralised network yet. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 150 + + Token was not made available on decentralised network yet. + + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 153,154 + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + + Trading enabled. + + src/app/pages/token/pages/token/token-buy/token-buy.component.ts + 86 + + Trading enabled. + + + Short description title is invalid. + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 56 + + Short description title is invalid. + + + Short description title + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 61 + + Short description title + + + Short token description + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 73 + + Short token description + + + Sale Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 4 + + Sale Info + + + Sale schedule + + src/app/pages/token/pages/token/token-info/token-info.component.html + 10 + + Sale schedule + + + During cooldown period you are able to trigger refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 41 + + During cooldown period you are able to trigger refund. + + + No Cooldown. Participants can't refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 75,76 + + No Cooldown. Participants can't refund. + + + Token Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 80 + + + src/app/pages/token/pages/trade/trade.page.html + 57 + + + src/app/pages/token/pages/trade/trade.page.html + 624 + + Token Info + + + My purchased tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 4 + + My purchased tokens + + + + + + + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 78,80 + + + + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 90,92 + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + + Your Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 21 + + Your Deposit + + + Potential Tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 22 + + Potential Tokens + + + Token Owned + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 23 + + Token Owned + + + Total Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 24 + + Total Deposit + + + Total Participants + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 25 + + Total Participants + + + Sale ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 45 + + Sale ends in + + + Cooldown in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 62 + + Cooldown in progress + + + Sale starts in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 69 + + Sale starts in + + + Cooldown ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 73 + + Cooldown ends in + + + + + + + src/app/pages/token/pages/token/token.page.html + 47,48 + + + + + Airdrops + + src/app/pages/token/pages/token/token.page.ts + 41 + + Airdrops + + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + src/app/pages/token/pages/token/token.page.ts + 100 + + + src/app/pages/token/pages/trade/trade.page.ts + 275 + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + + Ongoing Sale + + src/app/pages/token/pages/token/token.page.ts + 248 + + Ongoing Sale + + + Scheduled + + src/app/pages/token/pages/token/token.page.ts + 250 + + Scheduled + + + Cooldown + + src/app/pages/token/pages/token/token.page.ts + 252 + + Cooldown + + + Processing + + src/app/pages/token/pages/token/token.page.ts + 254 + + Processing + + + Order book + + src/app/pages/token/pages/trade/trade.page.html + 94 + + + src/app/pages/token/pages/trade/trade.page.html + 644 + + Order book + + + Token chart + + src/app/pages/token/pages/trade/trade.page.html + 102 + + + src/app/pages/token/pages/trade/trade.page.html + 795 + + Token chart + + + My trading + + src/app/pages/token/pages/trade/trade.page.html + 158 + + My trading + + + Open buy orders + + src/app/pages/token/pages/trade/trade.page.html + 166 + + Open buy orders + + + Open sell orders + + src/app/pages/token/pages/trade/trade.page.html + 174 + + Open sell orders + + + Order history + + src/app/pages/token/pages/trade/trade.page.html + 182 + + Order history + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 213 + + + src/app/pages/token/pages/trade/trade.page.html + 287 + + Fulfilled + + + There are no buys + + src/app/pages/token/pages/trade/trade.page.html + 257,258 + + There are no buys + + + Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 321,322 + + + src/app/pages/token/pages/trade/trade.page.html + 416,417 + + Cancelled + + + Expired + + src/app/pages/token/pages/trade/trade.page.html + 324,325 + + + src/app/pages/token/pages/trade/trade.page.html + 422,423 + + Expired + + + There are no sells + + src/app/pages/token/pages/trade/trade.page.html + 345,346 + + There are no sells + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 388 + + + src/app/pages/token/pages/trade/trade.page.html + 1213 + + Sell + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 404,405 + + Fulfilled + + + Partially Fulfilled / Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 410,411 + + Partially Fulfilled / Cancelled + + + Fulfilled / Cancelled (unfulfillable) + + src/app/pages/token/pages/trade/trade.page.html + 419,420 + + Fulfilled / Cancelled (unfulfillable) + + + There is no order history + + src/app/pages/token/pages/trade/trade.page.html + 434,435 + + There is no order history + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 477,478 + + + src/app/pages/token/pages/trade/trade.page.html + 488,489 + + + src/app/pages/token/pages/trade/trade.page.html + 919,920 + + Sell + + + Available + + src/app/pages/token/pages/trade/trade.page.html + 530,531 + + Available + + + Current Price + + src/app/pages/token/pages/trade/trade.page.html + 542 + + Current Price + + + Change 24h + + src/app/pages/token/pages/trade/trade.page.html + 564,565 + + Change 24h + + + ( ~ ) + + src/app/pages/token/pages/trade/trade.page.html + 729,732 + + ( ~ ) + + + current price + + src/app/pages/token/pages/trade/trade.page.html + 737,738 + + current price + + + There is no activity yet + + src/app/pages/token/pages/trade/trade.page.html + 788,789 + + There is no activity yet + + + Trade history + + src/app/pages/token/pages/trade/trade.page.html + 829,830 + + Trade history + + + There is no trade history + + src/app/pages/token/pages/trade/trade.page.html + 894,895 + + There is no trade history + + + You don’t have enough tokens + + src/app/pages/token/pages/trade/trade.page.html + 928 + + You don’t have enough tokens + + + Amount to + + src/app/pages/token/pages/trade/trade.page.html + 935,936 + + Amount to + + + Balance + + src/app/pages/token/pages/trade/trade.page.html + 979 + + Balance + + + Set your price per 1 + + src/app/pages/token/pages/trade/trade.page.html + 998,1000 + + Set your price per 1 + + + LIMIT PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1009,1010 + + LIMIT PRICE + + + MARKET PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1017,1018 + + MARKET PRICE + + + ~ + + src/app/pages/token/pages/trade/trade.page.html + 1038,1041 + + + src/app/pages/token/pages/trade/trade.page.html + 1145,1148 + + ~ + + + Set Current Price + + src/app/pages/token/pages/trade/trade.page.html + 1069 + + Set Current Price + + + Set BID + + src/app/pages/token/pages/trade/trade.page.html + 1093,1104 + + Set BID + + + The bid price is the highest price that a particular buyer is willing to pay. + + src/app/pages/token/pages/trade/trade.page.html + 1100 + + The bid price is the highest price that a particular buyer is willing to pay. + + + Set ASK + + src/app/pages/token/pages/trade/trade.page.html + 1109,1120 + + Set ASK + + + The asking price is the minimum price that an individual would be willing to sell their asset. + + src/app/pages/token/pages/trade/trade.page.html + 1116 + + The asking price is the minimum price that an individual would be willing to sell their asset. + + + You will spend + + src/app/pages/token/pages/trade/trade.page.html + 1129,1130 + + You will spend + + + Minimum total has to be at least + + src/app/pages/token/pages/trade/trade.page.html + 1163 + + Minimum total has to be at least + + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + src/app/pages/token/pages/trade/trade.page.html + 1179 + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + + 1h + + src/app/pages/token/pages/trade/trade.page.ts + 118 + + 1h + + + 4h + + src/app/pages/token/pages/trade/trade.page.ts + 119 + + 4h + + + 1d + + src/app/pages/token/pages/trade/trade.page.ts + 120 + + 1d + + + 1w + + src/app/pages/token/pages/trade/trade.page.ts + 121 + + 1w + + + Bids + + src/app/pages/token/pages/trade/trade.page.ts + 563 + + Bids + + + Asks + + src/app/pages/token/pages/trade/trade.page.ts + 567 + + Asks + + + Cancelled + + src/app/pages/token/services/helper.service.ts + 201 + + Cancelled + + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 42 + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + + Go to trading pairs to add your favourite tokens. + + src/app/pages/tokens/pages/favourites/favourites.page.html + 47,48 + + Go to trading pairs to add your favourite tokens. + + + Add favourites + + src/app/pages/tokens/pages/favourites/favourites.page.html + 56,57 + + Add favourites + + + Tokens - Favourite + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 52 + + Tokens - Favourite + + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 53 + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + + Tokens - Launchpad + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 41 + + Tokens - Launchpad + + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 42 + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/tokens/pages/tokens/tokens.page.html + 11,13 + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + + Highlighted Token + + src/app/pages/tokens/pages/tokens/tokens.page.html + 49 + + Highlighted Token + + + Favorites + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 17 + + Favorites + + + All tokens + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 20 + + All tokens + + + Trading pairs + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 21 + + Trading pairs + + + Launchpad + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 22 + + Launchpad + + + Tokens - Trading Pairs + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 43 + + Tokens - Trading Pairs + + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 44 + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + + AuditOne Validation + + src/app/service-modules/audit-one/components/modal/modal.component.html + 3 + + AuditOne Validation + + + Requested On + + src/app/service-modules/audit-one/components/modal/modal.component.html + 22 + + Requested On + + + Last Update + + src/app/service-modules/audit-one/components/modal/modal.component.html + 23 + + Last Update + + + There are no records. + + src/app/service-modules/audit-one/components/modal/modal.component.html + 52 + + There are no records. + + + AuditOne + + src/app/service-modules/audit-one/components/widget/widget.component.html + 11 + + AuditOne + + + Verified + + src/app/service-modules/audit-one/components/widget/widget.component.html + 47 + + Verified + + + See more + + src/app/service-modules/audit-one/components/widget/widget.component.html + 52 + + See more + + + + diff --git a/src/locale/messages.pt-PT.xlf b/src/locale/messages.pt-PT.xlf new file mode 100644 index 0000000..e3a3977 --- /dev/null +++ b/src/locale/messages.pt-PT.xlf @@ -0,0 +1,6844 @@ + + + + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 69 + + Back + + + Discover + + src/app/@shell/ui/header/header.component.html + 56,57 + + + src/app/pages/home/home.page.html + 18,19 + + Discover + + + Create new + + src/app/@shell/ui/header/header.component.html + 62 + + Create new + + + Space + + src/app/@shell/ui/header/header.component.html + 68,69 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 83,84 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 6,7 + + + src/app/pages/collection/pages/collection/collection.page.html + 54,55 + + + src/app/pages/market/pages/collections/collections.page.html + 122,123 + + + src/app/pages/market/pages/nfts/nfts.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 69,70 + + Space + + + Proposal + + src/app/@shell/ui/header/header.component.html + 71,72 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 23,24 + + Proposal + + + Award + + src/app/@shell/ui/header/header.component.html + 74,75 + + + src/app/pages/award/pages/award/award.page.html + 26,27 + + Award + + + Collection + + src/app/@shell/ui/header/header.component.html + 77,78 + + + src/app/pages/collection/pages/collection/collection.page.html + 19,20 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 114,115 + + + src/app/pages/nft/pages/new/single/single.page.html + 336,337 + + + src/app/pages/space/pages/collections/collections.page.html + 26 + + Collection + + + None. + + src/app/@shell/ui/header/header.component.html + 128,129 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 52 + + None. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 137,138 + + + src/app/components/auth/services/auth.service.ts + 315 + + My Profile + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 152,153 + + Purchase has not been completed + + + You have + + src/app/@shell/ui/header/header.component.html + 154 + + You have + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 154,155 + + to finish your transaction + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 156,157 + + Open Checkout + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 272 + + You won the NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 273 + + You are a proud owner of a new NFT. Congratulations! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 280 + + You lost your bid! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 281 + + Your bid on + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 282 + + was outbid. Try again! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 289 + + just offered + + + for + + src/app/@shell/ui/header/header.component.ts + 290 + + + src/app/components/timeline-nft/timeline-nft.component.html + 60 + + for + + + Your + + src/app/@shell/ui/header/header.component.ts + 291 + + Your + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 292 + + has received a new bid for + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 300,299 + + Unsupported + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 301 + + This notification is not yet supported in your language + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 12 + + Space + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 17 + + Proposal + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 22 + + Award + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27 + + Collection + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 34,35 + + Connect to your MetaMask wallet + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 52,53 + + Log out + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 56,57 + + Powered by + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8,10 + + The page you were looking for was not found + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 11,13 + + Discover Soonaverse + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 28,29 + + See Docs + + + Coming SOON + + src/app/@shell/ui/sider/sider.component.html + 35,36 + + + src/app/pages/award/pages/new/new.page.html + 271,272 + + + src/app/pages/award/pages/new/new.page.html + 281,282 + + + src/app/pages/award/pages/new/new.page.html + 291,292 + + Coming SOON + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 8,9 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 9,10 + + Connect to your Metamask wallet + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 20,21 + + Make sure you select public IOTA EVM Chain in MetaMask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 22,23 + + Network Name: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23,24 + + RPC URL: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 24,25 + + Chain ID: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 31,32 + + + src/app/pages/award/pages/award/award.page.html + 154 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 152 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 184 + + Cancel + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 1,3 + + Connect + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Disconnect + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 111 + + Unable to sign transaction. Please try to reload page. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 156 + + You must unlock your MetaMask first! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 167 + + You must enable access to read your account address. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 189 + + Please make sure you select address in MetaMask! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 196 + + Unable to get nonce to authenticate! + + + You have to open Soonaverse in MetaMask app. + + src/app/components/auth/services/auth.service.ts + 239 + + You have to open Soonaverse in MetaMask app. + + + Failed to initialize MetaMask, try to reload page. + + src/app/components/auth/services/auth.service.ts + 241 + + Failed to initialize MetaMask, try to reload page. + + + Pending + + + src/app/components/award/components/award-status/award-status.component.html + 1,2 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 1,2 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 1,2 + + Pending + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 3,4 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 3,4 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 3,4 + + Rejected + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 5 + + + src/app/pages/space/pages/awards/awards.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 25 + + Completed + + + Available + + src/app/components/award/components/award-status/award-status.component.html + 6 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 62 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 150,149 + + + src/app/pages/collection/pages/collection/collection.page.html + 91,92 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 39,37 + + + src/app/pages/space/pages/collections/collections.page.ts + 24 + + Available + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 4 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 553,554 + + Space Members Only + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 542,543 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 14 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 564,565 + + Space Members with Badge Only + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 574,575 + + At least one NFT from Collections + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 19 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 43,44 + + Starts in + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 21 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 46,47 + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26,27 + + days + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 24 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 50,51 + + Starts today + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 42 + + Limited Edition + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 57 + + Pending approval + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 67 + + + src/app/pages/space/pages/awards/awards.page.ts + 26 + + + src/app/pages/space/pages/collections/collections.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 26 + + Rejected + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 2,3 + + + src/app/pages/nft/pages/new/single/single.page.html + 342,343 + + Collection is required. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 11,12 + + Select Collection + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 65,67 + + Select a Collection + + + Search + + src/app/components/collection/components/select-collection/select-collection.component.html + 74 + + + src/app/components/space/components/select-space/select-space.component.html + 74 + + + src/app/pages/discover/pages/discover/discover.page.html + 22,23 + + + src/app/pages/market/pages/market/market.page.html + 22,23 + + Search + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 84 + + + src/app/components/space/components/select-space/select-space.component.html + 84 + + No results for + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 14,13 + + All Collections + + + Wallet details + + src/app/components/member/components/member-about/member-about.component.html + 42,43 + + Wallet details + + + Member's Wallet Address. + + src/app/components/member/components/member-about/member-about.component.html + 44,45 + + Member's Wallet Address. + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 55,56 + + Recently joined spaces + + + All + + src/app/components/member/components/member-about/member-about.component.html + 58,59 + + + src/app/pages/discover/pages/spaces/spaces.page.ts + 28,27 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 38,37 + + All + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 78,79 + + No Contribution Yet. + + + Latest Badges + + src/app/components/member/components/member-about/member-about.component.html + 84,85 + + Latest Badges + + + No badges + + src/app/components/member/components/member-about/member-about.component.html + 93,94 + + No badges + + + See all + + src/app/components/member/components/member-about/member-about.component.html + 97,98 + + See all + + + Connections + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 5 + + + src/app/pages/member/pages/activity/activity.page.html + 68 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 50,51 + + Connections + + + Awards + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 6 + + + src/app/pages/discover/pages/discover/discover.page.ts + 23 + + + src/app/pages/member/pages/member/member.page.ts + 27 + + + src/app/pages/space/pages/space/space.page.ts + 33 + + Awards + + + XP + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 7 + + + src/app/components/member/components/member-card/member-card.component.html + 31,32 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 16,17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 25,26 + + XP + + + Total reputation + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 29 + + Total reputation + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 38,39 + + awards + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 6,7 + + Display Name + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 7,8 + + Set a display name. This does not change your username. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 11 + + Display name (optional) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 18,19 + + About + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19,20 + + A brief description of yourself shown on your profile. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 22 + + Your description (optional) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 29,30 + + + src/app/pages/space/pages/upsert/upsert.page.html + 154 + + Avatar + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 30,31 + + Customise your Soonaverse identity. + + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 34,37 + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 43,44 + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 49,50 + + + src/app/pages/space/pages/upsert/upsert.page.html + 52,53 + + Networking + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 51,52 + + + src/app/pages/space/pages/upsert/upsert.page.html + 60,61 + + Invalid Github username. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 53,54 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67,68 + + Type your Github account username + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 63,64 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 206,207 + + + src/app/pages/space/pages/upsert/upsert.page.html + 80,81 + + Invalid Twitter username. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 65,66 + + + src/app/pages/space/pages/upsert/upsert.page.html + 87,88 + + Type your Twitter account username + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,76 + + Only username#1234 format supported. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 77,78 + + Type your Discord account username + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 89,90 + + Settings + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 91,92 + + Save changes + + + reputation + + src/app/components/member/components/member-reputation-drawer/member-reputation-drawer.component.html + 15 + + + src/app/components/member/components/member-reputation-modal/member-reputation-modal.component.html + 17 + + reputation + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 15,16 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 29,30 + + Make a bid + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 44,45 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 9,10 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 44,45 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46,47 + + NFT image + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 61 + + Ends + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 66 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 63 + + Royalties + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 72,73 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 116,117 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 66,67 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 69,70 + + Royalties are automatically deducted and paid to artists. + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 91 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 94 + + Current highest bid + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 92 + + + src/app/pages/nft/pages/nft/nft.page.html + 59 + + Min bid + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 95 + + + src/app/pages/nft/pages/nft/nft.page.html + 61 + + Your bid is the highest + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Current price is refreshing in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 152,153 + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 156,157 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 196,197 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 277,278 + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + + By checking this box, you agree with + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 162,163 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 108,109 + + By checking this box, you agree with + + + Terms and Conditions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 165,166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 111,112 + + Terms and Conditions + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 171 + + Make a bid + + + Send IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 180,181 + + Send IOTA to following address (please restake after!): + + + Copied + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 189 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 240 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150 + + + src/app/components/share/share.component.html + 11 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 139 + + + src/app/components/wallet-address/wallet-address.component.html + 24 + + Copied + + + Copy + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 190 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 241 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 151 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 140 + + + src/app/components/wallet-address/wallet-address.component.html + 25 + + Copy + + + Do not send funds from an exchange, always use wallets you fully control. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 201 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + Do not send funds from an exchange, always use wallets you fully control. + + + Firefly + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 210 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 166 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 151 + + Firefly + + + Tanglepay + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 219 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 300 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 175 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 160 + + Tanglepay + + + Send + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130 + + Send + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231,232 + + IOTA to following address (please restake after!): + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 247 + + Your transactions + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 253,254 + + Sent Date + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 254,255 + + Time + + + Action + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,256 + + Action + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 256,257 + + + src/app/pages/nft/pages/nft/nft.page.html + 170,171 + + + src/app/pages/nft/pages/nft/nft.page.html + 204,205 + + Amount + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 258,259 + + Detail + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 270,271 + + + src/app/pages/nft/pages/nft/nft.page.html + 171,172 + + + src/app/pages/nft/pages/nft/nft.page.html + 190,191 + + + src/app/pages/nft/pages/nft/nft.page.html + 205,206 + + + src/app/pages/nft/pages/nft/nft.page.html + 219,220 + + Link + + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 282 + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 314,315 + + Congratulations you won the NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 320 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 238 + + Close checkout + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 325 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 243 + + Show my NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 337,338 + + Bidding is expired. Good luck next time :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 227 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 368 + + Generated NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 229 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 370 + + SFT + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 47,48 + + day + + + Price + + src/app/components/nft/components/nft-card/nft-card.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 12 + + + src/app/pages/collection/pages/collection/collection.page.html + 190 + + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 65 + + + src/app/pages/market/pages/collections/collections.page.html + 162 + + + src/app/pages/market/pages/nfts/nfts.page.html + 50 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 71,72 + + + src/app/pages/nft/pages/new/single/single.page.html + 62 + + Price + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 73 + + Current bid + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 88,89 + + Owned by + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 100,101 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 155,154 + + New NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 15,16 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 29,30 + + Checkout + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 71,72 + + Total price + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 117 + + Confirm and Lock + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121 + + Your NFT will be locked for purchase for + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121,122 + + minutes + + + remaining to make the transfer. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 132,133 + + remaining to make the transfer. + + + Expired + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 133,134 + + Expired + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 137 + + We received invalid amount. Try again. + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141,142 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130,131 + + IOTA to following address (please restake after!): + + + Transaction history + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 214 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 177 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 204 + + Transaction history + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 204 + + Validating your transaction... + + + Transaction complete. Congratulations. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 232,233 + + Transaction complete. Congratulations. + + + + + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 10,11 + + + src/app/pages/collection/pages/collection/collection.page.html + 55,56 + + + src/app/pages/collection/pages/collection/collection.page.html + 70,71 + + + + + d + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26 + + d + + + h + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34 + + h + + + hours + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34,35 + + hours + + + m + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42 + + m + + + min + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42,43 + + min + + + s + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50 + + s + + + sec + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50,51 + + sec + + + Sale Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 34 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 50,51 + + Sale Starts + + + Auction Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 37 + + Auction Starts + + + Auction Ends + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 40 + + Auction Ends + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 16,17 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 31,32 + + Preview + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 59,60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 74,75 + + + src/app/pages/nft/pages/nft/nft.page.html + 43,44 + + Current price + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68,69 + + Author + + + Migrate + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100,101 + + + src/app/pages/nft/pages/nft/nft.page.html + 291,292 + + Migrate + + + Shimmer/Mainnet (Tokenization)...SOON. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 102,104 + + + src/app/pages/nft/pages/nft/nft.page.html + 293,295 + + Shimmer/Mainnet (Tokenization)...SOON. + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 108,109 + + + src/app/pages/nft/pages/nft/nft.page.html + 299,300 + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 114,115 + + + src/app/pages/nft/pages/nft/nft.page.html + 305,306 + + IPFS Metadata + + + Preparing... + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 116 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 122 + + Preparing... + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 120,121 + + + src/app/pages/nft/pages/nft/nft.page.html + 312,313 + + IPFS Image + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149,150 + + + src/app/pages/nft/pages/new/single/single.page.html + 297,298 + + + src/app/pages/nft/pages/nft/nft.page.html + 15 + + NFT Image + + + Trade info + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 3,5 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 3,4 + + Trade info + + + Floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 12 + + Floor price + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 41 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 40,41 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 101,102 + + + src/app/pages/nft/pages/new/single/single.page.html + 90,91 + + Available On is required. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 50 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 49,50 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 112,113 + + + src/app/pages/nft/pages/new/single/single.page.html + 100,101 + + Available on + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 57 + + Various auction length coming next sprint once community have a vote! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + Duration of auction is 3 days + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 158 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 91,92 + + Once your listing is complete, you will get a confirmation message. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 159 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Confirm listing + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 62,63 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 532,533 + + Open Sale + + + Specific member(s) only (Transfer) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Specific member(s) only (Transfer) + + + Reserve for specific buyer + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 82,83 + + Reserve for specific buyer + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2,4 + + Trade history + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 6,8 + + Item is yours and yours only + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 11 + + This will make your item unavailable for sale. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 12 + + Stop sale! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 16,17 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 31,32 + + List Item for sale + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 86,87 + + Not for sale + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 90,91 + + Fixed price + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 94,95 + + Auction + + + Donut graph coming SOON. + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 40,41 + + Donut graph coming SOON. + + + Commencing + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 5,6 + + Commencing + + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 7,8 + + In-Progress + + + Completed + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 9,10 + + Completed + + + + Share + + src/app/components/share/share.component.html + 5,6 + + + src/app/components/share/share.component.html + 18,19 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 14,15 + + Share + + + Copy to clipboard + + src/app/components/share/share.component.html + 12 + + Copy to clipboard + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 2,3 + + + src/app/pages/award/pages/new/new.page.html + 109,110 + + + src/app/pages/proposal/pages/new/new.page.html + 248,249 + + Space is required. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 11,12 + + Select Space + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 65,67 + + + src/app/pages/award/pages/new/new.page.html + 138,139 + + + src/app/pages/proposal/pages/new/new.page.html + 277,278 + + Select a space + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 14,13 + + All Spaces + + + No Connections + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 2,3 + + No Connections + + + Rep. weight + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 7,8 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 68,69 + + Rep. weight + + + Status + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 8,9 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 72,73 + + Status + + + Established + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 33 + + Established + + + Recognised + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 34 + + Recognised + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 11,12 + + + src/app/pages/member/pages/member/member.page.html + 30 + + Joined + + + members + + src/app/components/space/components/space-card/space-card.component.html + 28 + + + src/app/pages/discover/pages/members/members.page.html + 55,56 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 10,11 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 35,36 + + members + + + Value range is 0-1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 8 + + Value range is 0-1000 + + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 30,31 + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + + Equal + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 39 + + Equal + + + Half + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 40 + + Half + + + Double + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 41 + + Double + + + Earned Badge + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + Earned Badge + + + with + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + with + + + Show less + + src/app/components/timeline-badges/timeline-badges.component.html + 38 + + + src/app/components/timeline-nft/timeline-nft.component.html + 114 + + Show less + + + Show more + + src/app/components/timeline-badges/timeline-badges.component.html + 39 + + + src/app/components/timeline-nft/timeline-nft.component.html + 115 + + Show more + + + Timeline + + src/app/components/timeline-nft/timeline-nft.component.html + 1 + + Timeline + + + Listed by + + src/app/components/timeline-nft/timeline-nft.component.html + 20 + + Listed by + + + Made available for auction by + + src/app/components/timeline-nft/timeline-nft.component.html + 23 + + Made available for auction by + + + Purchased by + + src/app/components/timeline-nft/timeline-nft.component.html + 59 + + Purchased by + + + details + + src/app/components/timeline-nft/timeline-nft.component.html + 61 + + details + + + Invalid + + src/app/components/timeline-nft/timeline-nft.component.html + 73,74 + + Invalid + + + Listed by space + + src/app/components/timeline-nft/timeline-nft.component.html + 104 + + Listed by space + + + Bill (owner) + + src/app/components/timeline-nft/timeline-nft.component.ts + 46 + + Bill (owner) + + + Bill (royalty) + + src/app/components/timeline-nft/timeline-nft.component.ts + 48 + + Bill (royalty) + + + Credit + + src/app/components/timeline-nft/timeline-nft.component.ts + 51 + + Credit + + + Payment + + src/app/components/timeline-nft/timeline-nft.component.ts + 53 + + Payment + + + Order + + src/app/components/timeline-nft/timeline-nft.component.ts + 55 + + Order + + + Generate address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 12,13 + + Generate address + + + Make transaction + + src/app/components/wallet-address/iota-address/iota-address.component.html + 33,34 + + Make transaction + + + Wait for confirmation + + src/app/components/wallet-address/iota-address/iota-address.component.html + 55,56 + + Wait for confirmation + + + Confirmed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 78,79 + + Confirmed + + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/iota-address/iota-address.component.html + 104,105 + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/iota-address/iota-address.component.html + 105 + + space + + + profile + + src/app/components/wallet-address/iota-address/iota-address.component.html + 106 + + profile + + + for future transactions. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 107,108 + + for future transactions. + + + Generate new address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 111 + + Generate new address + + + Send a small + + src/app/components/wallet-address/iota-address/iota-address.component.html + 120 + + Send a small + + + amount to validate your address. This expires in + + src/app/components/wallet-address/iota-address/iota-address.component.html + 121 + + amount to validate your address. This expires in + + + Expired. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 123,124 + + Expired. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 172 + + Wait for transaction to be validated. We will send back your transaction once completed + + + Validating address... + + src/app/components/wallet-address/iota-address/iota-address.component.html + 194 + + Validating address... + + + Now you can deal with NFT`s + + src/app/components/wallet-address/iota-address/iota-address.component.html + 221,222 + + Now you can deal with NFT`s + + + Finish Verification + + src/app/components/wallet-address/iota-address/iota-address.component.html + 225 + + Finish Verification + + + Not verified + + src/app/components/wallet-address/wallet-address.component.html + 4,5 + + Not verified + + + Verify wallet + + src/app/components/wallet-address/wallet-address.component.html + 9,10 + + Verify wallet + + + Verified + + src/app/components/wallet-address/wallet-address.component.html + 18,19 + + Verified + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 43 + + Verify your + + + address + + src/app/components/wallet-address/wallet-address.component.html + 43 + + + src/app/components/wallet-address/wallet-address.component.html + 59 + + address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 59 + + Verify your + + + Detailed Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Detailed Info + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.html + 3,4 + + Badges used / available + + + End Date + + src/app/pages/award/pages/award/award-info/award-info.component.html + 9,10 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 50 + + End Date + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 16 + + Owner + + + Award info + + src/app/pages/award/pages/award/award.page.html + 5,6 + + + src/app/pages/award/pages/new/new.page.html + 17,18 + + Award info + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 81,82 + + + src/app/pages/award/pages/award/award.page.html + 176,177 + + Check out award + + + Approve Award + + src/app/pages/award/pages/award/award.page.html + 91,92 + + Approve Award + + + Approve + + src/app/pages/award/pages/award/award.page.html + 103 + + Approve + + + Decline + + src/app/pages/award/pages/award/award.page.html + 114 + + Decline + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 128,129 + + Confirm your participation + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 136,137 + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 142,143 + + Provide description or link to your work. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 151 + + Submit + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 35 + + + src/app/pages/space/pages/space/space.page.ts + 30 + + Overview + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 94 + + Participants + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2,4 + + New Award + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14,15 + + + src/app/pages/proposal/pages/new/new.page.html + 23,24 + + Title is required. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19,20 + + Title and description will be included on the Award. End date determines the duration of the Award. + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 23,24 + + You must enter name. + + + Title + + src/app/pages/award/pages/new/new.page.html + 28 + + + src/app/pages/proposal/pages/new/new.page.html + 28 + + + src/app/pages/space/pages/upsert/upsert.page.html + 29 + + Title + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 35,36 + + + src/app/pages/proposal/pages/new/new.page.html + 51,52 + + End Date is required. + + + End + + src/app/pages/award/pages/new/new.page.html + 45 + + + src/app/pages/proposal/pages/new/new.page.html + 62 + + End + + + Award description + + src/app/pages/award/pages/new/new.page.html + 55,56 + + Award description + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 66,67 + + Badge definition + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 68,69 + + Title and description will be included on the badge. + + + Badge Title is required. + + src/app/pages/award/pages/new/new.page.html + 73,74 + + Badge Title is required. + + + Badge Title + + src/app/pages/award/pages/new/new.page.html + 78,79 + + Badge Title + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 89,90 + + Badge description + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 103,104 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 363,364 + + + src/app/pages/proposal/pages/new/new.page.html + 242,243 + + Space Info + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 105,106 + + This is the space that will list the award. + + + Reward Info + + src/app/pages/award/pages/new/new.page.html + 155,156 + + Reward Info + + + Defines the amount of XP for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 157,158 + + Defines the amount of XP for each badge and the number of badges available. + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 162,163 + + + src/app/pages/award/pages/new/new.page.html + 182,183 + + Minimum 1 and maximum 10000. + + + Total XP (Max 10000) + + src/app/pages/award/pages/new/new.page.html + 167,168 + + Total XP (Max 10000) + + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + src/app/pages/award/pages/new/new.page.html + 177,178 + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + + Number of Badges + + src/app/pages/award/pages/new/new.page.html + 187,188 + + Number of Badges + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 197,198 + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + + Badge + + src/app/pages/award/pages/new/new.page.html + 206 + + Badge + + + What the badge looks like. + + src/app/pages/award/pages/new/new.page.html + 207,208 + + What the badge looks like. + + + Mint an unique NTT badge. + + src/app/pages/award/pages/new/new.page.html + 216,217 + + Mint an unique NTT badge. + + + Mint Avatar + + src/app/pages/award/pages/new/new.page.html + 225 + + Mint Avatar + + + WOW! Now reward your members with it! + + src/app/pages/award/pages/new/new.page.html + 238,239 + + WOW! Now reward your members with it! + + + Award Setup + + src/app/pages/award/pages/new/new.page.html + 245,246 + + Award Setup + + + Defines who and how can get a badge. + + src/app/pages/award/pages/new/new.page.html + 247,248 + + Defines who and how can get a badge. + + + Guardian approval + + src/app/pages/award/pages/new/new.page.html + 254,255 + + Guardian approval + + + The award must be approved by the guardians of the space before it's active or distributed + + src/app/pages/award/pages/new/new.page.html + 260,261 + + The award must be approved by the guardians of the space before it's active or distributed + + + Discord Activity + + src/app/pages/award/pages/new/new.page.html + 265,266 + + Discord Activity + + + Github Activity + + src/app/pages/award/pages/new/new.page.html + 275,276 + + Github Activity + + + Custom and more + + src/app/pages/award/pages/new/new.page.html + 285,286 + + Custom and more + + + Create award + + src/app/pages/award/pages/new/new.page.html + 310,311 + + Create award + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2,3 + + Award Description + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 39 + + + src/app/pages/award/pages/participants/participants.page.html + 46,47 + + + src/app/pages/proposal/pages/participants/participants.page.html + 24 + + + src/app/pages/proposal/pages/participants/participants.page.html + 31,32 + + Find Participant + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 51 + + + src/app/pages/proposal/pages/participants/participants.page.html + 36 + + + src/app/pages/space/pages/members/members.page.html + 49,50 + + Showing only few top records... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 59 + + + src/app/pages/proposal/pages/participants/participants.page.html + 44 + + No Participants + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 71 + + Reward + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 82 + + Reward again + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 39 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 131 + + + src/app/pages/space/pages/awards/awards.page.ts + 23 + + + src/app/pages/space/pages/collections/collections.page.ts + 23 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 23 + + Pending + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 40 + + Issued + + + Visit website + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 7,8 + + Visit website + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 18,19 + + Who can buy? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 22,23 + + Open sale + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 28,29 + + Space Members Only + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 34,35 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 40,41 + + Space Members with Badge Only + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 46,47 + + Must hold at least one NFT from each selected Collections + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51,52 + + (One NFT per member) + + + The badges you need + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 78 + + The badges you need + + + Resources + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89 + + Resources + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 114 + + Member discounts + + + Discount for members with XP + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 119 + + Discount for members with XP + + + Guardians of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 47 + + Guardians of Space Only + + + Members of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 49 + + Members of Space Only + + + Members With Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 51 + + Members With Badge Only + + + Check out collection + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 72 + + Check out collection + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 3 + + About collection + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 11 + + Limited edition + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 26 + + + src/app/pages/collection/pages/collection/collection.page.html + 118 + + Publish Collection + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 30 + + + src/app/pages/collection/pages/collection/collection.page.html + 122 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 36 + + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Cancel Collection + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 132 + + Edit Collection + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 69,70 + + Royalties goes to + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 79,80 + + Starts at + + + Items + + src/app/pages/collection/pages/collection/collection.page.html + 86,87 + + Items + + + Price starts at + + src/app/pages/collection/pages/collection/collection.page.html + 96,97 + + Price starts at + + + Sale in progress + + src/app/pages/collection/pages/collection/collection.page.html + 104,105 + + Sale in progress + + + remaining + + src/app/pages/collection/pages/collection/collection.page.html + 106,107 + + + src/app/pages/nft/pages/nft/nft.page.html + 86,87 + + remaining + + + Find item + + src/app/pages/collection/pages/collection/collection.page.html + 156 + + + src/app/pages/member/pages/nfts/nfts.page.html + 12 + + Find item + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 166,167 + + + src/app/pages/nft/pages/new/new.page.html + 2,3 + + Create NFT + + + Recent + + src/app/pages/collection/pages/collection/collection.page.html + 192 + + + src/app/pages/collection/pages/collection/collection.page.html + 209 + + + src/app/pages/discover/pages/awards/awards.page.html + 20 + + + src/app/pages/discover/pages/awards/awards.page.html + 31 + + + src/app/pages/discover/pages/collections/collections.page.html + 40 + + + src/app/pages/discover/pages/collections/collections.page.html + 51 + + + src/app/pages/discover/pages/members/members.page.html + 31 + + + src/app/pages/discover/pages/members/members.page.html + 42 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 20 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 31 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 20 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 33 + + + src/app/pages/market/pages/collections/collections.page.html + 154 + + + src/app/pages/market/pages/collections/collections.page.html + 171 + + + src/app/pages/market/pages/nfts/nfts.page.html + 42 + + + src/app/pages/market/pages/nfts/nfts.page.html + 59 + + Recent + + + Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 193 + + + src/app/pages/market/pages/collections/collections.page.html + 155 + + + src/app/pages/market/pages/nfts/nfts.page.html + 43 + + + src/app/pages/market/pages/nfts/nfts.page.html + 60 + + Low to High + + + High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 194 + + + src/app/pages/market/pages/collections/collections.page.html + 156 + + + src/app/pages/market/pages/nfts/nfts.page.html + 44 + + + src/app/pages/market/pages/nfts/nfts.page.html + 61 + + High to Low + + + Sort by + + src/app/pages/collection/pages/collection/collection.page.html + 199 + + + src/app/pages/discover/pages/awards/awards.page.html + 18 + + + src/app/pages/discover/pages/awards/awards.page.html + 24,25 + + + src/app/pages/discover/pages/collections/collections.page.html + 37,38 + + + src/app/pages/discover/pages/collections/collections.page.html + 44,45 + + + src/app/pages/discover/pages/members/members.page.html + 29 + + + src/app/pages/discover/pages/members/members.page.html + 35,36 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 18 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 24,25 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 18 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 24,25 + + + src/app/pages/market/pages/collections/collections.page.html + 152 + + + src/app/pages/market/pages/collections/collections.page.html + 161 + + + src/app/pages/market/pages/nfts/nfts.page.html + 40 + + + src/app/pages/market/pages/nfts/nfts.page.html + 49 + + Sort by + + + Price: Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 210 + + + src/app/pages/market/pages/collections/collections.page.html + 172 + + Price: Low to High + + + Price: High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 211 + + + src/app/pages/market/pages/collections/collections.page.html + 173 + + Price: High to Low + + + No NFTs + + src/app/pages/collection/pages/collection/collection.page.html + 233 + + + src/app/pages/market/pages/nfts/nfts.page.html + 84 + + + src/app/pages/member/pages/nfts/nfts.page.html + 32 + + + src/app/pages/nft/pages/nft/nft.page.html + 375 + + No NFTs + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2,3 + + Create new collection + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3,5 + + Edit collection + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18,19 + + Collection info + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20,21 + + Name and description will be included on the Collection. + + + Name + + src/app/pages/collection/pages/upsert/upsert.page.html + 30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 70,71 + + + src/app/pages/nft/pages/new/single/single.page.html + 26 + + Name + + + Description + + src/app/pages/collection/pages/upsert/upsert.page.html + 40,41 + + + src/app/pages/nft/pages/new/single/single.page.html + 36,37 + + Description + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 53,54 + + + src/app/pages/nft/pages/new/single/single.page.html + 49,50 + + Sales info + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 55,56 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 118 + + Royalty + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 120 + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 131,132 + + Royalties - Percentage fee + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 141,142 + + Example: 10 % , 20 % , etc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 150 + + Royalties goes to a different space + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 158,159 + + Royalties goes to a different space + + + Links + + src/app/pages/collection/pages/upsert/upsert.page.html + 181 + + Links + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 182,183 + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 187,188 + + Invalid URL. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 213,214 + + Link to your Twitter account + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 226,227 + + Invalid Discord username. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 233,234 + + Link to your Discord account + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 248,249 + + Discounts + + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + src/app/pages/collection/pages/upsert/upsert.page.html + 250,251 + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 298 + + Discount + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 311 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + Discount Amount + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 350,351 + + Add discount level + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 365,366 + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 383,384 + + Collection Type + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 385,386 + + Each type has different characteristics. This cannot be changed after creation. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 417 + + + src/app/pages/space/pages/upsert/upsert.page.html + 192 + + Banner + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 443 + + Banner is required. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + Placeholder + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 478 + + Placeholder is required. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 488,489 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 501,502 + + + src/app/pages/market/pages/collections/collections.page.html + 132,133 + + + src/app/pages/market/pages/collections/collections.page.html + 137,138 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 116,117 + + Category + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 490,491 + + Category is used when filtering content. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 494,495 + + Category. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 519,520 + + Collection Setup + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 521,522 + + Who has access to a given collection. + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 537,538 + + Everyone has access to this collection. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 547,548 + + Only Space Guardians can access. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 558,559 + + Only Space Members can access. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 569,570 + + Only Space Members with badge can access. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 585,586 + + Collection Options + + + Limited Edition + + src/app/pages/collection/pages/upsert/upsert.page.html + 590 + + Limited Edition + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 606 + + One NFT per Member Only + + + Select Collections + + src/app/pages/collection/pages/upsert/upsert.page.html + 629,630 + + Select Collections + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 677,678 + + Create collection + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 690,691 + + Save collection + + + Member seems to log out during the file upload request. + + src/app/pages/collection/pages/upsert/upsert.page.ts + 317 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 195 + + + src/app/pages/nft/pages/new/single/single.page.ts + 154 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 107 + + Member seems to log out during the file upload request. + + + My Overview + + src/app/pages/dashboard/dashboard.page.html + 2,3 + + My Overview + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 6,7 + + Pending Membership Requests + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 14,15 + + Your spaces + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 23 + + No Spaces yet + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 25,26 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 36,37 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 48,49 + + Active proposals + + + Oldest + + src/app/pages/discover/pages/awards/awards.page.html + 21 + + + src/app/pages/discover/pages/awards/awards.page.html + 32 + + + src/app/pages/discover/pages/collections/collections.page.html + 41 + + + src/app/pages/discover/pages/collections/collections.page.html + 52 + + + src/app/pages/discover/pages/members/members.page.html + 32 + + + src/app/pages/discover/pages/members/members.page.html + 43 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 21 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 32 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 21 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 34 + + Oldest + + + No Awards + + src/app/pages/discover/pages/awards/awards.page.html + 54 + + + src/app/pages/member/pages/awards/awards.page.html + 19 + + + src/app/pages/space/pages/awards/awards.page.html + 35 + + No Awards + + + collections + + src/app/pages/discover/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 185,186 + + collections + + + No Collections + + src/app/pages/discover/pages/collections/collections.page.html + 75 + + + src/app/pages/space/pages/collections/collections.page.html + 38 + + No Collections + + + Discover Soonaverse + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Discover Soonaverse + + + Enter the first few letters to search... + + src/app/pages/discover/pages/discover/discover.page.html + 7 + + Enter the first few letters to search... + + + Spaces + + src/app/pages/discover/pages/discover/discover.page.ts + 21 + + + src/app/pages/member/pages/member/member.page.ts + 29 + + Spaces + + + Collections + + src/app/pages/discover/pages/discover/discover.page.ts + 22 + + + src/app/pages/market/pages/market/market.page.ts + 23 + + + src/app/pages/space/pages/space/space.page.ts + 31 + + Collections + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 24 + + + src/app/pages/space/pages/space/space.page.ts + 32 + + Proposals + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 25 + + + src/app/pages/space/pages/space/space.page.ts + 34 + + Members + + + Include connections + + src/app/pages/discover/pages/members/members.page.html + 23,24 + + + src/app/pages/member/pages/activity/activity.page.html + 28,29 + + + src/app/pages/member/pages/spaces/member-spaces.component.html + 5,6 + + Include connections + + + (Select some space) + + src/app/pages/discover/pages/members/members.page.html + 24 + + + src/app/pages/member/pages/activity/activity.page.html + 29 + + (Select some space) + + + No Members + + src/app/pages/discover/pages/members/members.page.html + 66 + + + src/app/pages/space/pages/members/members.page.html + 58 + + No Members + + + proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 43,44 + + proposals + + + No Proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 55 + + + src/app/pages/space/pages/proposals/proposals.page.html + 35 + + No Proposals + + + No Spaces + + src/app/pages/discover/pages/spaces/spaces.page.html + 56 + + No Spaces + + + Open + + src/app/pages/discover/pages/spaces/spaces.page.ts + 29 + + Open + + + Welcome to The Soonaverse + + src/app/pages/home/home.page.html + 5,6 + + Welcome to The Soonaverse + + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + src/app/pages/home/home.page.html + 8,9 + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + + Join Us + + src/app/pages/home/home.page.html + 19,20 + + Join Us + + + Marketplace + + src/app/pages/home/home.page.html + 31 + + Marketplace + + + See Docs + + src/app/pages/home/home.page.html + 43,44 + + See Docs + + + Get started with the Soonaverse + + src/app/pages/home/home.page.html + 52,53 + + Get started with the Soonaverse + + + Not sure where to start? Find featured spaces and NFT Collections below. + + src/app/pages/home/home.page.html + 54 + + Not sure where to start? Find featured spaces and NFT Collections below. + + + Trending Collections + + src/app/pages/home/home.page.html + 60,61 + + Trending Collections + + + Go to Marketplace + + src/app/pages/home/home.page.html + 70 + + Go to Marketplace + + + Discover more + + src/app/pages/home/home.page.html + 86 + + + src/app/pages/home/home.page.html + 102 + + + src/app/pages/home/home.page.html + 122 + + Discover more + + + Popular spaces + + src/app/pages/home/home.page.html + 92,93 + + Popular spaces + + + Creating your community is easy as 1-2-3 + + src/app/pages/home/home.page.html + 130,131 + + Creating your community is easy as 1-2-3 + + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + src/app/pages/home/home.page.html + 132,133 + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + + StepArticle image + + src/app/pages/home/home.page.html + 143,144 + + StepArticle image + + + Voting is essential and it needs to be on-chain and FREE. + + src/app/pages/home/home.page.html + 162 + + Voting is essential and it needs to be on-chain and FREE. + + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + src/app/pages/home/home.page.html + 165,167 + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + + Go there now + + src/app/pages/home/home.page.html + 177 + + Go there now + + + Want to learn more about SoonLabs? + + src/app/pages/home/home.page.html + 202,203 + + Want to learn more about SoonLabs? + + + Visit YouTube + + src/app/pages/home/home.page.html + 213 + + Visit YouTube + + + Who’s using the Soonaverse? + + src/app/pages/home/home.page.html + 222,224 + + Who’s using the Soonaverse? + + + Investors + + src/app/pages/home/home.page.html + 275,276 + + Investors + + + Privacy + + src/app/pages/home/home.page.html + 285,286 + + Privacy + + + Terms + + src/app/pages/home/home.page.html + 295,296 + + Terms + + + Powered by SoonLabs + + src/app/pages/home/home.page.html + 306,307 + + + src/app/pages/home/home.page.html + 318,319 + + Powered by SoonLabs + + + Create your community + + src/app/pages/home/home.page.ts + 33,31 + + Create your community + + + Feeless, secure, on-chain voting, and “one click” creation tools. + + src/app/pages/home/home.page.ts + 34 + + Feeless, secure, on-chain voting, and “one click” creation tools. + + + Build reputation and rewards + + src/app/pages/home/home.page.ts + 38,36 + + Build reputation and rewards + + + Create incentives and build reputation, trust and community engagement. + + src/app/pages/home/home.page.ts + 39 + + Create incentives and build reputation, trust and community engagement. + + + Manage, Maintain, Grow + + src/app/pages/home/home.page.ts + 43,41 + + Manage, Maintain, Grow + + + Governance, voting, for both public and private communities. + + src/app/pages/home/home.page.ts + 44 + + Governance, voting, for both public and private communities. + + + NFTs + + src/app/pages/market/pages/collections/collections.page.html + 12,13 + + + src/app/pages/market/pages/nfts/nfts.page.html + 13,14 + + + src/app/pages/member/pages/member/member.page.ts + 30 + + NFTs + + + Select Access type + + src/app/pages/market/pages/collections/collections.page.html + 20,21 + + Select Access type + + + All accesses + + src/app/pages/market/pages/collections/collections.page.html + 25,26 + + + src/app/pages/market/pages/collections/collections.page.html + 32,33 + + + src/app/pages/market/pages/collections/collections.page.html + 111 + + All accesses + + + Open sale + + src/app/pages/market/pages/collections/collections.page.html + 38,39 + + + src/app/pages/market/pages/collections/collections.page.html + 45,46 + + + src/app/pages/market/pages/collections/collections.page.html + 112 + + Open sale + + + Space members only + + src/app/pages/market/pages/collections/collections.page.html + 51,52 + + + src/app/pages/market/pages/collections/collections.page.html + 58,59 + + + src/app/pages/market/pages/collections/collections.page.html + 113 + + Space members only + + + Space guardians only + + src/app/pages/market/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 71,72 + + + src/app/pages/market/pages/collections/collections.page.html + 114 + + Space guardians only + + + Space members with badge only + + src/app/pages/market/pages/collections/collections.page.html + 77,78 + + + src/app/pages/market/pages/collections/collections.page.html + 84,85 + + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Space members with badge only + + + At least one NFT from collections + + src/app/pages/market/pages/collections/collections.page.html + 90,91 + + + src/app/pages/market/pages/collections/collections.page.html + 97,98 + + + src/app/pages/market/pages/collections/collections.page.html + 116 + + At least one NFT from collections + + + No collections + + src/app/pages/market/pages/collections/collections.page.html + 196 + + No collections + + + Marketplace + + src/app/pages/market/pages/market/market.page.html + 2,4 + + Marketplace + + + Spaces, awards, proposals or members... + + src/app/pages/market/pages/market/market.page.html + 7 + + Spaces, awards, proposals or members... + + + NFT's + + src/app/pages/market/pages/market/market.page.ts + 24 + + NFT's + + + On Auction + + src/app/pages/market/pages/nfts/nfts.page.ts + 40,37 + + On Auction + + + Owned + + src/app/pages/market/pages/nfts/nfts.page.ts + 41 + + + src/app/pages/nft/pages/nft/nft.page.html + 6,7 + + Owned + + + View space + + src/app/pages/member/pages/activity/activity.page.html + 20,21 + + View space + + + Awards Completed + + src/app/pages/member/pages/activity/activity.page.html + 37 + + Awards Completed + + + Total Reputation + + src/app/pages/member/pages/activity/activity.page.html + 39 + + Total Reputation + + + Earned badges + + src/app/pages/member/pages/activity/activity.page.html + 47 + + Earned badges + + + More + + src/app/pages/member/pages/activity/activity.page.html + 51,52 + + More + + + Reputation + + src/app/pages/member/pages/activity/activity.page.html + 72,73 + + Reputation + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 6,7 + + Pending + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + Issued + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 21,22 + + Discover Awards + + + No Badges yet + + src/app/pages/member/pages/badges/badges.page.html + 19,20 + + No Badges yet + + + Discover Badges + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Discover Badges + + + My profile + + src/app/pages/member/pages/member/member.page.html + 9 + + My profile + + + Profile + + src/app/pages/member/pages/member/member.page.html + 10 + + Profile + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 15,16 + + Profile info + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 26 + + Activity + + + Badges + + src/app/pages/member/pages/member/member.page.ts + 28 + + Badges + + + (Join space with alliance) + + src/app/pages/member/pages/spaces/member-spaces.component.html + 6 + + (Join space with alliance) + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 44,45 + + Some files have not been uploaded + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 48,49 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 57 + + Uploaded CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 69,70 + + Filename + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 92,93 + + Error + + + Select collection + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 123,124 + + + src/app/pages/nft/pages/new/single/single.page.html + 349,350 + + Select collection + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136,137 + + Upload existing CSV + + + Upload back once you generate bellow + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138,139 + + Upload back once you generate bellow + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 166 + + You have to upload images first. + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 191,192 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Single + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Multiple + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14,15 + + NFT info + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16,17 + + Name and description will be included on the NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 21,22 + + Name is required. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 32,33 + + Description is required. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 51,52 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + + Properties + + src/app/pages/nft/pages/new/single/single.page.html + 111,112 + + Properties + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 113,114 + + Properties show up underneath your item. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 120,121 + + Property name (E.g. Character) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 121,122 + + Value (E.g. Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 133,134 + + + src/app/pages/nft/pages/new/single/single.page.html + 166,168 + + + src/app/pages/nft/pages/new/single/single.page.html + 173,174 + + Property name + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 144 + + + src/app/pages/nft/pages/new/single/single.page.html + 178,180 + + + src/app/pages/nft/pages/new/single/single.page.html + 186 + + + src/app/pages/nft/pages/new/single/single.page.html + 236 + + + src/app/pages/nft/pages/new/single/single.page.html + 270,272 + + + src/app/pages/nft/pages/new/single/single.page.html + 276 + + Value + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 159 + + Property + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 196,197 + + Add property + + + Stats + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Stats + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 205,206 + + Stats show up underneath your item. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 212,213 + + Stats name (E.g. Stamina) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 213,214 + + Value (E.g. 10, 1/10 , etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 225,226 + + + src/app/pages/nft/pages/new/single/single.page.html + 258,260 + + + src/app/pages/nft/pages/new/single/single.page.html + 265,266 + + Stat name + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 251 + + Stat + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287,288 + + Add stat + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 299,300 + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 324 + + Media is required + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 338,339 + + Select one of your collections to display this NFT. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 371,372 + + Create NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 381,382 + + Preview NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 142 + + File name is not valid + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 4,5 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 248,249 + + Check out nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 58 + + Current highest bid + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 94 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 102 + + Sale hasn't started yet + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 110 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 118 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 123,124 + + Sell NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 124,125 + + Change Fixed Price + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 125,126 + + Change Auction + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + Place bid + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 138 + + Buy now + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 151,152 + + Current Bids + + + My Bids + + src/app/pages/nft/pages/nft/nft.page.html + 155,156 + + My Bids + + + My Transactions + + src/app/pages/nft/pages/nft/nft.page.html + 159,160 + + My Transactions + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 168,169 + + Member + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 169,170 + + Bidded on + + + Date + + src/app/pages/nft/pages/nft/nft.page.html + 202,203 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 8,9 + + Date + + + Type + + src/app/pages/nft/pages/nft/nft.page.html + 203,204 + + Type + + + On-Chain Record + + src/app/pages/nft/pages/nft/nft.page.html + 276,277 + + On-Chain Record + + + Preparing... + + src/app/pages/nft/pages/nft/nft.page.html + 277,278 + + Preparing... + + + View + + src/app/pages/nft/pages/nft/nft.page.html + 280,281 + + + src/app/pages/nft/pages/nft/nft.page.html + 308,309 + + + src/app/pages/nft/pages/nft/nft.page.html + 315,316 + + View + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 285,286 + + View all of the transaction details of this NFT on the Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 340,341 + + About the collection + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 343,344 + + Show + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 344 + + collection + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 353,355 + + by + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2,4 + + New Proposal + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17,18 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 5,6 + + Proposal info + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19,20 + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 35,36 + + Start Date is required. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 45 + + Start + + + Commencing milestone. + + src/app/pages/proposal/pages/new/new.page.html + 69,70 + + Commencing milestone. + + + Commencing milestone + + src/app/pages/proposal/pages/new/new.page.html + 76,77 + + Commencing milestone + + + Start milestone. + + src/app/pages/proposal/pages/new/new.page.html + 83,84 + + Start milestone. + + + Start milestone + + src/app/pages/proposal/pages/new/new.page.html + 90,91 + + Start milestone + + + End milestone. + + src/app/pages/proposal/pages/new/new.page.html + 97,98 + + End milestone. + + + End milestone + + src/app/pages/proposal/pages/new/new.page.html + 104,105 + + End milestone + + + Proposal description is required. + + src/app/pages/proposal/pages/new/new.page.html + 112,113 + + Proposal description is required. + + + Proposal description + + src/app/pages/proposal/pages/new/new.page.html + 117,118 + + Proposal description + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 127,128 + + Question Info + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 129,130 + + Title and description will only be displayed for this question. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 136,137 + + Question Title is required. + + + Question Title + + src/app/pages/proposal/pages/new/new.page.html + 140,141 + + Question Title + + + Question description + + src/app/pages/proposal/pages/new/new.page.html + 152,153 + + Question description + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 178,179 + + Text and description for each individual answer. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 183,184 + + Answer Text is required. + + + Answer Text + + src/app/pages/proposal/pages/new/new.page.html + 187,188 + + Answer Text + + + Answer description + + src/app/pages/proposal/pages/new/new.page.html + 198,199 + + Answer description + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 233,234 + + Add Choice + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 244,245 + + This is the space that will list the proposal. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 292,293 + + Proposal Setup + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 294,295 + + Defines who has access to the proposal and what is the voting method. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 299 + + Target Participants + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 306,307 + + All Guardians + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 312,313 + + Only guardians can vote on this proposal + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 316,317 + + All Members + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 322,323 + + All members can vote on this proposal + + + IOTA Token Holders + + src/app/pages/proposal/pages/new/new.page.html + 327,328 + + IOTA Token Holders + + + All IOTA token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 333,334 + + All IOTA token holders can vote. + + + Voting Type + + src/app/pages/proposal/pages/new/new.page.html + 341 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 55 + + Voting Type + + + Member - One Vote + + src/app/pages/proposal/pages/new/new.page.html + 348,349 + + Member - One Vote + + + Each member of the space gets one vote + + src/app/pages/proposal/pages/new/new.page.html + 354,355 + + Each member of the space gets one vote + + + XP Reputation - Space + + src/app/pages/proposal/pages/new/new.page.html + 362,363 + + XP Reputation - Space + + + Votes are weighted based on total amount of XP a member has in the space + + src/app/pages/proposal/pages/new/new.page.html + 368,369 + + Votes are weighted based on total amount of XP a member has in the space + + + XP Reputation - Space + Connection + + src/app/pages/proposal/pages/new/new.page.html + 378,379 + + XP Reputation - Space + Connection + + + Votes are weighted based on total amount of XP a member has in the space & connections + + src/app/pages/proposal/pages/new/new.page.html + 384,385 + + Votes are weighted based on total amount of XP a member has in the space & connections + + + XP Reputation - Selected Badges + + src/app/pages/proposal/pages/new/new.page.html + 394,395 + + XP Reputation - Selected Badges + + + Votes are weighted based on total amount of XP a member has for selected badges + + src/app/pages/proposal/pages/new/new.page.html + 400,401 + + Votes are weighted based on total amount of XP a member has for selected badges + + + Reputation Options + + src/app/pages/proposal/pages/new/new.page.html + 412,413 + + Reputation Options + + + Set Minimum Weight + + src/app/pages/proposal/pages/new/new.page.html + 423,424 + + Set Minimum Weight + + + Select Badge + + src/app/pages/proposal/pages/new/new.page.html + 438,439 + + Select Badge + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 465,466 + + Create Proposal + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 322 + + Choice + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + badge + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 2,3 + + Final Results + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 58,59 + + Proposal Description + + + Voted + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 3,4 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 38 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 129 + + Voted + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 4,5 + + Vote Now + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 5 + + Voting starts + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 9 + + You are not part of the vote + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 12 + + In order to vote, you must be part of the space before proposal was created. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 18 + + Log in to vote + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 21 + + In order to vote, you must login first. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 27 + + Pending Guardian Approval + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 30 + + This proposal has not been approved by any Guardian yet. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 52 + + Weight + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 37 + + Pending Vote + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 124 + + joined soonaverse on + + + Voter + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 7,8 + + Voter + + + Option + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 9,10 + + Option + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 26 + + Approve + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 28 + + Decline + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 34,35 + + Current Milestone + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 39 + + Commence Date + + + Start Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 45 + + Start Date + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 56 + + Voting Type of this proposal. + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 60 + + Total Weight + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 61 + + Total weight within this proposal for all participants. + + + Export to JSON + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 65,67 + + Export to JSON + + + Cast your vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 50,51 + + Cast your vote + + + Open Firefly to Vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 53 + + Open Firefly to Vote + + + Voting instructions + + src/app/pages/proposal/pages/proposal/proposal.page.html + 55 + + Voting instructions + + + You will select your options and execute the vote within Firefly. + + src/app/pages/proposal/pages/proposal/proposal.page.html + 57,58 + + You will select your options and execute the vote within Firefly. + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 64,65 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 117,118 + + Check out proposal + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 70,71 + + Current Results + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 91 + + Selected Badges + + + New + + src/app/pages/space/pages/awards/awards.page.html + 23,24 + + + src/app/pages/space/pages/collections/collections.page.html + 25,26 + + + src/app/pages/space/pages/proposals/proposals.page.html + 23,24 + + New + + + award + + src/app/pages/space/pages/awards/awards.page.html + 24 + + award + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 24 + + + src/app/pages/space/pages/members/members.page.html + 24 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 24 + + Active + + + Active + + src/app/pages/space/pages/members/members.page.html + 9 + + Active + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 18 + + Blocked + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 28 + + Blocked + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 35 + + + src/app/pages/space/pages/members/members.page.html + 43,44 + + Find Member + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 63 + + joined space on + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 78,79 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 81,82 + + Make Guardian + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 84,86 + + Accept Member + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 89,91 + + Block Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 91,93 + + Unblock Member + + + Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 3,5 + + Active Proposals + + + No Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 11 + + No Active Proposals + + + Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 24,26 + + Active Awards + + + No Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 32 + + No Active Awards + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 24 + + proposal + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 21,22 + + Check out space + + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 53,54 + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + + Show All + + src/app/pages/space/pages/space/space-about/space-about.component.html + 59,60 + + Show All + + + Connected spaces that you recognize + + src/app/pages/space/pages/space/space-about/space-about.component.html + 65,66 + + Connected spaces that you recognize + + + New connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 76,77 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 88 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 117 + + New connection + + + connections + + src/app/pages/space/pages/space/space-about/space-about.component.html + 104 + + connections + + + Close + + src/app/pages/space/pages/space/space-about/space-about.component.html + 120 + + Close + + + New + + src/app/pages/space/pages/space/space-about/space-about.component.html + 132 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 169 + + New + + + Edit + + src/app/pages/space/pages/space/space-about/space-about.component.html + 133 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 170 + + Edit + + + connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 134,135 + + connection + + + Form a connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 148 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Form a connection + + + Save + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 181 + + Save + + + Terminate alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 159,160 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 190,191 + + Terminate alliance + + + alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 171,172 + + alliance + + + Space's Wallet Address + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201,202 + + Space's Wallet Address + + + Wallet to hold funds for the Space. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 203,204 + + Wallet to hold funds for the Space. + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 252,253 + + Leave Space + + + About space + + src/app/pages/space/pages/space/space.page.html + 5,6 + + About space + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 53 + + + src/app/pages/space/pages/space/space.page.html + 113,114 + + Join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 77 + + + src/app/pages/space/pages/space/space.page.html + 139 + + Edit Space + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2,3 + + Add new space + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3,4 + + Edit space + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17,18 + + Space info + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19,20 + + Title and description will be included on the Space. + + + Space description + + src/app/pages/space/pages/upsert/upsert.page.html + 39,40 + + Space description + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 54,55 + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 100,101 + + Only discord invite code supported (i.e. RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 107,108 + + Type your Discord invite code + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 128,129 + + Space Type + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 130,131 + + Each type has different characteristics. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 139,140 + + Open for anyone to join instantly + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 143,144 + + Requires a member approval + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 163,164 + + Avatar is mandatory + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 236,237 + + Create space + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 249,250 + + Save space + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Upload new to replace existing. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + Your brand is key. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Make it personal. + + + + diff --git a/src/locale/messages.qu-PE.xlf b/src/locale/messages.qu-PE.xlf new file mode 100644 index 0000000..ae8c67e --- /dev/null +++ b/src/locale/messages.qu-PE.xlf @@ -0,0 +1,6844 @@ + + + + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 69 + + Back + + + Discover + + src/app/@shell/ui/header/header.component.html + 56,57 + + + src/app/pages/home/home.page.html + 18,19 + + Tariy + + + Create new + + src/app/@shell/ui/header/header.component.html + 62 + + Kamay musux + + + Space + + src/app/@shell/ui/header/header.component.html + 68,69 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 83,84 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 6,7 + + + src/app/pages/collection/pages/collection/collection.page.html + 54,55 + + + src/app/pages/market/pages/collections/collections.page.html + 122,123 + + + src/app/pages/market/pages/nfts/nfts.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 69,70 + + Kiti + + + Proposal + + src/app/@shell/ui/header/header.component.html + 71,72 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 23,24 + + Yawñapay + + + Award + + src/app/@shell/ui/header/header.component.html + 74,75 + + + src/app/pages/award/pages/award/award.page.html + 26,27 + + Shuñay + + + Collection + + src/app/@shell/ui/header/header.component.html + 77,78 + + + src/app/pages/collection/pages/collection/collection.page.html + 19,20 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 114,115 + + + src/app/pages/nft/pages/new/single/single.page.html + 336,337 + + + src/app/pages/space/pages/collections/collections.page.html + 26 + + Collection + + + None. + + src/app/@shell/ui/header/header.component.html + 128,129 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 52 + + None. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 137,138 + + + src/app/components/auth/services/auth.service.ts + 315 + + My Profile + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 152,153 + + Purchase has not been completed + + + You have + + src/app/@shell/ui/header/header.component.html + 154 + + You have + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 154,155 + + to finish your transaction + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 156,157 + + Open Checkout + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 272 + + You won the NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 273 + + You are a proud owner of a new NFT. Congratulations! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 280 + + You lost your bid! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 281 + + Your bid on + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 282 + + was outbid. Try again! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 289 + + just offered + + + for + + src/app/@shell/ui/header/header.component.ts + 290 + + + src/app/components/timeline-nft/timeline-nft.component.html + 60 + + for + + + Your + + src/app/@shell/ui/header/header.component.ts + 291 + + Your + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 292 + + has received a new bid for + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 300,299 + + Unsupported + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 301 + + This notification is not yet supported in your language + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 12 + + Kiti + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 17 + + Yawñapay + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 22 + + Shuñay + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27 + + Collection + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 34,35 + + Connect to your MetaMask wallet + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 52,53 + + Wisk'ay + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 56,57 + + Powered by + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8,10 + + The page you were looking for was not found + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 11,13 + + Tariy Soonaverse + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 28,29 + + See Docs + + + Coming SOON + + src/app/@shell/ui/sider/sider.component.html + 35,36 + + + src/app/pages/award/pages/new/new.page.html + 271,272 + + + src/app/pages/award/pages/new/new.page.html + 281,282 + + + src/app/pages/award/pages/new/new.page.html + 291,292 + + Chayamun PRONTO + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 8,9 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 9,10 + + T'inkiy shikra Metamask + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 20,21 + + Make sure you select public IOTA EVM Chain in MetaMask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 22,23 + + Network Name: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23,24 + + URL RPC: https://evm.wasp.sc.iota.org + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 24,25 + + Chain ID: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 31,32 + + + src/app/pages/award/pages/award/award.page.html + 154 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 152 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 184 + + Q'ullwachay + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 1,3 + + T'inkiy + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Disconnect + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 111 + + Unable to sign transaction. Please try to reload page. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 156 + + You must unlock your MetaMask first! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 167 + + You must enable access to read your account address. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 189 + + Please make sure you select address in MetaMask! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 196 + + Unable to get nonce to authenticate! + + + You have to open Soonaverse in MetaMask app. + + src/app/components/auth/services/auth.service.ts + 239 + + You have to open Soonaverse in MetaMask app. + + + Failed to initialize MetaMask, try to reload page. + + src/app/components/auth/services/auth.service.ts + 241 + + Failed to initialize MetaMask, try to reload page. + + + Pending + + + src/app/components/award/components/award-status/award-status.component.html + 1,2 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 1,2 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 1,2 + + Pending + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 3,4 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 3,4 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 3,4 + + Rejected + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 5 + + + src/app/pages/space/pages/awards/awards.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 25 + + Completed + + + Available + + src/app/components/award/components/award-status/award-status.component.html + 6 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 62 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 150,149 + + + src/app/pages/collection/pages/collection/collection.page.html + 91,92 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 39,37 + + + src/app/pages/space/pages/collections/collections.page.ts + 24 + + Available + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 4 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 553,554 + + Space Members Only + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 542,543 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 14 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 564,565 + + Space Members with Badge Only + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 574,575 + + At least one NFT from Collections + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 19 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 43,44 + + Starts in + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 21 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 46,47 + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26,27 + + days + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 24 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 50,51 + + Starts today + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 42 + + Limited Edition + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 57 + + Pending approval + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 67 + + + src/app/pages/space/pages/awards/awards.page.ts + 26 + + + src/app/pages/space/pages/collections/collections.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 26 + + Rejected + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 2,3 + + + src/app/pages/nft/pages/new/single/single.page.html + 342,343 + + Collection is required. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 11,12 + + Select Collection + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 65,67 + + Select a Collection + + + Search + + src/app/components/collection/components/select-collection/select-collection.component.html + 74 + + + src/app/components/space/components/select-space/select-space.component.html + 74 + + + src/app/pages/discover/pages/discover/discover.page.html + 22,23 + + + src/app/pages/market/pages/market/market.page.html + 22,23 + + Search + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 84 + + + src/app/components/space/components/select-space/select-space.component.html + 84 + + No results for + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 14,13 + + All Collections + + + Wallet details + + src/app/components/member/components/member-about/member-about.component.html + 42,43 + + Wallet details + + + Member's Wallet Address. + + src/app/components/member/components/member-about/member-about.component.html + 44,45 + + Member's Wallet Address. + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 55,56 + + Recently joined spaces + + + All + + src/app/components/member/components/member-about/member-about.component.html + 58,59 + + + src/app/pages/discover/pages/spaces/spaces.page.ts + 28,27 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 38,37 + + All + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 78,79 + + No Contribution Yet. + + + Latest Badges + + src/app/components/member/components/member-about/member-about.component.html + 84,85 + + Latest Badges + + + No badges + + src/app/components/member/components/member-about/member-about.component.html + 93,94 + + No badges + + + See all + + src/app/components/member/components/member-about/member-about.component.html + 97,98 + + See all + + + Connections + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 5 + + + src/app/pages/member/pages/activity/activity.page.html + 68 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 50,51 + + Connections + + + Awards + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 6 + + + src/app/pages/discover/pages/discover/discover.page.ts + 23 + + + src/app/pages/member/pages/member/member.page.ts + 27 + + + src/app/pages/space/pages/space/space.page.ts + 33 + + Awards + + + XP + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 7 + + + src/app/components/member/components/member-card/member-card.component.html + 31,32 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 16,17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 25,26 + + XP + + + Total reputation + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 29 + + Total reputation + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 38,39 + + awards + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 6,7 + + Display Name + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 7,8 + + Set a display name. This does not change your username. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 11 + + Display name (optional) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 18,19 + + About + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19,20 + + A brief description of yourself shown on your profile. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 22 + + Your description (optional) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 29,30 + + + src/app/pages/space/pages/upsert/upsert.page.html + 154 + + Avatar + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 30,31 + + Customise your Soonaverse identity. + + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 34,37 + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 43,44 + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 49,50 + + + src/app/pages/space/pages/upsert/upsert.page.html + 52,53 + + Networking + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 51,52 + + + src/app/pages/space/pages/upsert/upsert.page.html + 60,61 + + Invalid Github username. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 53,54 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67,68 + + Type your Github account username + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 63,64 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 206,207 + + + src/app/pages/space/pages/upsert/upsert.page.html + 80,81 + + Invalid Twitter username. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 65,66 + + + src/app/pages/space/pages/upsert/upsert.page.html + 87,88 + + Type your Twitter account username + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,76 + + Only username#1234 format supported. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 77,78 + + Type your Discord account username + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 89,90 + + Settings + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 91,92 + + Save changes + + + reputation + + src/app/components/member/components/member-reputation-drawer/member-reputation-drawer.component.html + 15 + + + src/app/components/member/components/member-reputation-modal/member-reputation-modal.component.html + 17 + + reputation + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 15,16 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 29,30 + + Make a bid + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 44,45 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 9,10 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 44,45 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46,47 + + NFT image + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 61 + + Ends + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 66 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 63 + + Royalties + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 72,73 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 116,117 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 66,67 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 69,70 + + Royalties are automatically deducted and paid to artists. + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 91 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 94 + + Current highest bid + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 92 + + + src/app/pages/nft/pages/nft/nft.page.html + 59 + + Min bid + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 95 + + + src/app/pages/nft/pages/nft/nft.page.html + 61 + + Your bid is the highest + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Current price is refreshing in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 152,153 + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 156,157 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 196,197 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 277,278 + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + + By checking this box, you agree with + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 162,163 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 108,109 + + By checking this box, you agree with + + + Terms and Conditions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 165,166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 111,112 + + Terms and Conditions + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 171 + + Make a bid + + + Send IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 180,181 + + Send IOTA to following address (please restake after!): + + + Copied + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 189 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 240 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150 + + + src/app/components/share/share.component.html + 11 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 139 + + + src/app/components/wallet-address/wallet-address.component.html + 24 + + Copied + + + Copy + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 190 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 241 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 151 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 140 + + + src/app/components/wallet-address/wallet-address.component.html + 25 + + Copy + + + Do not send funds from an exchange, always use wallets you fully control. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 201 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + Do not send funds from an exchange, always use wallets you fully control. + + + Firefly + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 210 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 166 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 151 + + Firefly + + + Tanglepay + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 219 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 300 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 175 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 160 + + Tanglepay + + + Send + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130 + + Send + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231,232 + + IOTA to following address (please restake after!): + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 247 + + Your transactions + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 253,254 + + Sent Date + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 254,255 + + Time + + + Action + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,256 + + Action + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 256,257 + + + src/app/pages/nft/pages/nft/nft.page.html + 170,171 + + + src/app/pages/nft/pages/nft/nft.page.html + 204,205 + + Amount + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 258,259 + + Detail + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 270,271 + + + src/app/pages/nft/pages/nft/nft.page.html + 171,172 + + + src/app/pages/nft/pages/nft/nft.page.html + 190,191 + + + src/app/pages/nft/pages/nft/nft.page.html + 205,206 + + + src/app/pages/nft/pages/nft/nft.page.html + 219,220 + + Link + + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 282 + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 314,315 + + Congratulations you won the NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 320 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 238 + + Close checkout + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 325 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 243 + + Show my NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 337,338 + + Bidding is expired. Good luck next time :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 227 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 368 + + Generated NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 229 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 370 + + SFT + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 47,48 + + day + + + Price + + src/app/components/nft/components/nft-card/nft-card.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 12 + + + src/app/pages/collection/pages/collection/collection.page.html + 190 + + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 65 + + + src/app/pages/market/pages/collections/collections.page.html + 162 + + + src/app/pages/market/pages/nfts/nfts.page.html + 50 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 71,72 + + + src/app/pages/nft/pages/new/single/single.page.html + 62 + + Price + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 73 + + Current bid + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 88,89 + + Owned by + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 100,101 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 155,154 + + New NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 15,16 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 29,30 + + Checkout + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 71,72 + + Total price + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 117 + + Confirm and Lock + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121 + + Your NFT will be locked for purchase for + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121,122 + + minutes + + + remaining to make the transfer. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 132,133 + + remaining to make the transfer. + + + Expired + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 133,134 + + Expired + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 137 + + We received invalid amount. Try again. + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141,142 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130,131 + + IOTA to following address (please restake after!): + + + Transaction history + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 214 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 177 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 204 + + Transaction history + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 204 + + Validating your transaction... + + + Transaction complete. Congratulations. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 232,233 + + Transaction complete. Congratulations. + + + + + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 10,11 + + + src/app/pages/collection/pages/collection/collection.page.html + 55,56 + + + src/app/pages/collection/pages/collection/collection.page.html + 70,71 + + + + + d + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26 + + d + + + h + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34 + + h + + + hours + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34,35 + + hours + + + m + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42 + + m + + + min + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42,43 + + min + + + s + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50 + + s + + + sec + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50,51 + + sec + + + Sale Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 34 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 50,51 + + Sale Starts + + + Auction Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 37 + + Auction Starts + + + Auction Ends + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 40 + + Auction Ends + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 16,17 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 31,32 + + Preview + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 59,60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 74,75 + + + src/app/pages/nft/pages/nft/nft.page.html + 43,44 + + Current price + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68,69 + + Author + + + Migrate + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100,101 + + + src/app/pages/nft/pages/nft/nft.page.html + 291,292 + + Migrate + + + Shimmer/Mainnet (Tokenization)...SOON. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 102,104 + + + src/app/pages/nft/pages/nft/nft.page.html + 293,295 + + Shimmer/Mainnet (Tokenization)...SOON. + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 108,109 + + + src/app/pages/nft/pages/nft/nft.page.html + 299,300 + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 114,115 + + + src/app/pages/nft/pages/nft/nft.page.html + 305,306 + + IPFS Metadata + + + Preparing... + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 116 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 122 + + Preparing... + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 120,121 + + + src/app/pages/nft/pages/nft/nft.page.html + 312,313 + + IPFS Image + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149,150 + + + src/app/pages/nft/pages/new/single/single.page.html + 297,298 + + + src/app/pages/nft/pages/nft/nft.page.html + 15 + + NFT Image + + + Trade info + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 3,5 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 3,4 + + Trade info + + + Floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 12 + + Floor price + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 41 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 40,41 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 101,102 + + + src/app/pages/nft/pages/new/single/single.page.html + 90,91 + + Available On is required. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 50 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 49,50 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 112,113 + + + src/app/pages/nft/pages/new/single/single.page.html + 100,101 + + Available on + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 57 + + Various auction length coming next sprint once community have a vote! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + Duration of auction is 3 days + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 158 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 91,92 + + Once your listing is complete, you will get a confirmation message. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 159 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Confirm listing + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 62,63 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 532,533 + + Open Sale + + + Specific member(s) only (Transfer) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Specific member(s) only (Transfer) + + + Reserve for specific buyer + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 82,83 + + Reserve for specific buyer + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2,4 + + Trade history + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 6,8 + + Item is yours and yours only + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 11 + + This will make your item unavailable for sale. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 12 + + Stop sale! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 16,17 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 31,32 + + List Item for sale + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 86,87 + + Not for sale + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 90,91 + + Fixed price + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 94,95 + + Auction + + + Donut graph coming SOON. + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 40,41 + + Donut graph coming SOON. + + + Commencing + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 5,6 + + Commencing + + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 7,8 + + In-Progress + + + Completed + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 9,10 + + Completed + + + + Share + + src/app/components/share/share.component.html + 5,6 + + + src/app/components/share/share.component.html + 18,19 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 14,15 + + Share + + + Copy to clipboard + + src/app/components/share/share.component.html + 12 + + Copy to clipboard + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 2,3 + + + src/app/pages/award/pages/new/new.page.html + 109,110 + + + src/app/pages/proposal/pages/new/new.page.html + 248,249 + + Space is required. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 11,12 + + Select Space + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 65,67 + + + src/app/pages/award/pages/new/new.page.html + 138,139 + + + src/app/pages/proposal/pages/new/new.page.html + 277,278 + + Select a space + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 14,13 + + All Spaces + + + No Connections + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 2,3 + + No Connections + + + Rep. weight + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 7,8 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 68,69 + + Rep. weight + + + Status + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 8,9 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 72,73 + + Status + + + Established + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 33 + + Established + + + Recognised + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 34 + + Recognised + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 11,12 + + + src/app/pages/member/pages/member/member.page.html + 30 + + Joined + + + members + + src/app/components/space/components/space-card/space-card.component.html + 28 + + + src/app/pages/discover/pages/members/members.page.html + 55,56 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 10,11 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 35,36 + + members + + + Value range is 0-1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 8 + + Value range is 0-1000 + + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 30,31 + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + + Equal + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 39 + + Equal + + + Half + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 40 + + Half + + + Double + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 41 + + Double + + + Earned Badge + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + Earned Badge + + + with + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + with + + + Show less + + src/app/components/timeline-badges/timeline-badges.component.html + 38 + + + src/app/components/timeline-nft/timeline-nft.component.html + 114 + + Show less + + + Show more + + src/app/components/timeline-badges/timeline-badges.component.html + 39 + + + src/app/components/timeline-nft/timeline-nft.component.html + 115 + + Show more + + + Timeline + + src/app/components/timeline-nft/timeline-nft.component.html + 1 + + Timeline + + + Listed by + + src/app/components/timeline-nft/timeline-nft.component.html + 20 + + Listed by + + + Made available for auction by + + src/app/components/timeline-nft/timeline-nft.component.html + 23 + + Made available for auction by + + + Purchased by + + src/app/components/timeline-nft/timeline-nft.component.html + 59 + + Purchased by + + + details + + src/app/components/timeline-nft/timeline-nft.component.html + 61 + + details + + + Invalid + + src/app/components/timeline-nft/timeline-nft.component.html + 73,74 + + Invalid + + + Listed by space + + src/app/components/timeline-nft/timeline-nft.component.html + 104 + + Listed by space + + + Bill (owner) + + src/app/components/timeline-nft/timeline-nft.component.ts + 46 + + Bill (owner) + + + Bill (royalty) + + src/app/components/timeline-nft/timeline-nft.component.ts + 48 + + Bill (royalty) + + + Credit + + src/app/components/timeline-nft/timeline-nft.component.ts + 51 + + Credit + + + Payment + + src/app/components/timeline-nft/timeline-nft.component.ts + 53 + + Payment + + + Order + + src/app/components/timeline-nft/timeline-nft.component.ts + 55 + + Order + + + Generate address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 12,13 + + Generate address + + + Make transaction + + src/app/components/wallet-address/iota-address/iota-address.component.html + 33,34 + + Make transaction + + + Wait for confirmation + + src/app/components/wallet-address/iota-address/iota-address.component.html + 55,56 + + Wait for confirmation + + + Confirmed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 78,79 + + Confirmed + + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/iota-address/iota-address.component.html + 104,105 + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/iota-address/iota-address.component.html + 105 + + space + + + profile + + src/app/components/wallet-address/iota-address/iota-address.component.html + 106 + + profile + + + for future transactions. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 107,108 + + for future transactions. + + + Generate new address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 111 + + Generate new address + + + Send a small + + src/app/components/wallet-address/iota-address/iota-address.component.html + 120 + + Send a small + + + amount to validate your address. This expires in + + src/app/components/wallet-address/iota-address/iota-address.component.html + 121 + + amount to validate your address. This expires in + + + Expired. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 123,124 + + Expired. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 172 + + Wait for transaction to be validated. We will send back your transaction once completed + + + Validating address... + + src/app/components/wallet-address/iota-address/iota-address.component.html + 194 + + Validating address... + + + Now you can deal with NFT`s + + src/app/components/wallet-address/iota-address/iota-address.component.html + 221,222 + + Now you can deal with NFT`s + + + Finish Verification + + src/app/components/wallet-address/iota-address/iota-address.component.html + 225 + + Finish Verification + + + Not verified + + src/app/components/wallet-address/wallet-address.component.html + 4,5 + + Not verified + + + Verify wallet + + src/app/components/wallet-address/wallet-address.component.html + 9,10 + + Verify wallet + + + Verified + + src/app/components/wallet-address/wallet-address.component.html + 18,19 + + Verified + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 43 + + Verify your + + + address + + src/app/components/wallet-address/wallet-address.component.html + 43 + + + src/app/components/wallet-address/wallet-address.component.html + 59 + + address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 59 + + Verify your + + + Detailed Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Detailed Info + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.html + 3,4 + + Badges used / available + + + End Date + + src/app/pages/award/pages/award/award-info/award-info.component.html + 9,10 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 50 + + End Date + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 16 + + Owner + + + Award info + + src/app/pages/award/pages/award/award.page.html + 5,6 + + + src/app/pages/award/pages/new/new.page.html + 17,18 + + Award info + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 81,82 + + + src/app/pages/award/pages/award/award.page.html + 176,177 + + Check out award + + + Approve Award + + src/app/pages/award/pages/award/award.page.html + 91,92 + + Approve Award + + + Approve + + src/app/pages/award/pages/award/award.page.html + 103 + + Approve + + + Decline + + src/app/pages/award/pages/award/award.page.html + 114 + + Decline + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 128,129 + + Confirm your participation + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 136,137 + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 142,143 + + Provide description or link to your work. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 151 + + Submit + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 35 + + + src/app/pages/space/pages/space/space.page.ts + 30 + + Overview + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 94 + + Participants + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2,4 + + New Award + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14,15 + + + src/app/pages/proposal/pages/new/new.page.html + 23,24 + + Title is required. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19,20 + + Title and description will be included on the Award. End date determines the duration of the Award. + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 23,24 + + You must enter name. + + + Title + + src/app/pages/award/pages/new/new.page.html + 28 + + + src/app/pages/proposal/pages/new/new.page.html + 28 + + + src/app/pages/space/pages/upsert/upsert.page.html + 29 + + Title + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 35,36 + + + src/app/pages/proposal/pages/new/new.page.html + 51,52 + + End Date is required. + + + End + + src/app/pages/award/pages/new/new.page.html + 45 + + + src/app/pages/proposal/pages/new/new.page.html + 62 + + End + + + Award description + + src/app/pages/award/pages/new/new.page.html + 55,56 + + Award description + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 66,67 + + Badge definition + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 68,69 + + Title and description will be included on the badge. + + + Badge Title is required. + + src/app/pages/award/pages/new/new.page.html + 73,74 + + Badge Title is required. + + + Badge Title + + src/app/pages/award/pages/new/new.page.html + 78,79 + + Badge Title + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 89,90 + + Badge description + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 103,104 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 363,364 + + + src/app/pages/proposal/pages/new/new.page.html + 242,243 + + Space Info + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 105,106 + + This is the space that will list the award. + + + Reward Info + + src/app/pages/award/pages/new/new.page.html + 155,156 + + Reward Info + + + Defines the amount of XP for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 157,158 + + Defines the amount of XP for each badge and the number of badges available. + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 162,163 + + + src/app/pages/award/pages/new/new.page.html + 182,183 + + Minimum 1 and maximum 10000. + + + Total XP (Max 10000) + + src/app/pages/award/pages/new/new.page.html + 167,168 + + Total XP (Max 10000) + + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + src/app/pages/award/pages/new/new.page.html + 177,178 + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + + Number of Badges + + src/app/pages/award/pages/new/new.page.html + 187,188 + + Number of Badges + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 197,198 + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + + Badge + + src/app/pages/award/pages/new/new.page.html + 206 + + Badge + + + What the badge looks like. + + src/app/pages/award/pages/new/new.page.html + 207,208 + + What the badge looks like. + + + Mint an unique NTT badge. + + src/app/pages/award/pages/new/new.page.html + 216,217 + + Mint an unique NTT badge. + + + Mint Avatar + + src/app/pages/award/pages/new/new.page.html + 225 + + Mint Avatar + + + WOW! Now reward your members with it! + + src/app/pages/award/pages/new/new.page.html + 238,239 + + WOW! Now reward your members with it! + + + Award Setup + + src/app/pages/award/pages/new/new.page.html + 245,246 + + Award Setup + + + Defines who and how can get a badge. + + src/app/pages/award/pages/new/new.page.html + 247,248 + + Defines who and how can get a badge. + + + Guardian approval + + src/app/pages/award/pages/new/new.page.html + 254,255 + + Guardian approval + + + The award must be approved by the guardians of the space before it's active or distributed + + src/app/pages/award/pages/new/new.page.html + 260,261 + + The award must be approved by the guardians of the space before it's active or distributed + + + Discord Activity + + src/app/pages/award/pages/new/new.page.html + 265,266 + + Discord Activity + + + Github Activity + + src/app/pages/award/pages/new/new.page.html + 275,276 + + Github Activity + + + Custom and more + + src/app/pages/award/pages/new/new.page.html + 285,286 + + Custom and more + + + Create award + + src/app/pages/award/pages/new/new.page.html + 310,311 + + Create award + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2,3 + + Award Description + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 39 + + + src/app/pages/award/pages/participants/participants.page.html + 46,47 + + + src/app/pages/proposal/pages/participants/participants.page.html + 24 + + + src/app/pages/proposal/pages/participants/participants.page.html + 31,32 + + Find Participant + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 51 + + + src/app/pages/proposal/pages/participants/participants.page.html + 36 + + + src/app/pages/space/pages/members/members.page.html + 49,50 + + Showing only few top records... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 59 + + + src/app/pages/proposal/pages/participants/participants.page.html + 44 + + No Participants + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 71 + + Reward + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 82 + + Reward again + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 39 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 131 + + + src/app/pages/space/pages/awards/awards.page.ts + 23 + + + src/app/pages/space/pages/collections/collections.page.ts + 23 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 23 + + Pending + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 40 + + Issued + + + Visit website + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 7,8 + + Visit website + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 18,19 + + Who can buy? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 22,23 + + Open sale + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 28,29 + + Space Members Only + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 34,35 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 40,41 + + Space Members with Badge Only + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 46,47 + + Must hold at least one NFT from each selected Collections + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51,52 + + (One NFT per member) + + + The badges you need + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 78 + + The badges you need + + + Resources + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89 + + Resources + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 114 + + Member discounts + + + Discount for members with XP + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 119 + + Discount for members with XP + + + Guardians of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 47 + + Guardians of Space Only + + + Members of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 49 + + Members of Space Only + + + Members With Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 51 + + Members With Badge Only + + + Check out collection + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 72 + + Check out collection + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 3 + + About collection + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 11 + + Limited edition + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 26 + + + src/app/pages/collection/pages/collection/collection.page.html + 118 + + Publish Collection + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 30 + + + src/app/pages/collection/pages/collection/collection.page.html + 122 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 36 + + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Cancel Collection + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 132 + + Edit Collection + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 69,70 + + Royalties goes to + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 79,80 + + Starts at + + + Items + + src/app/pages/collection/pages/collection/collection.page.html + 86,87 + + Items + + + Price starts at + + src/app/pages/collection/pages/collection/collection.page.html + 96,97 + + Price starts at + + + Sale in progress + + src/app/pages/collection/pages/collection/collection.page.html + 104,105 + + Sale in progress + + + remaining + + src/app/pages/collection/pages/collection/collection.page.html + 106,107 + + + src/app/pages/nft/pages/nft/nft.page.html + 86,87 + + remaining + + + Find item + + src/app/pages/collection/pages/collection/collection.page.html + 156 + + + src/app/pages/member/pages/nfts/nfts.page.html + 12 + + Find item + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 166,167 + + + src/app/pages/nft/pages/new/new.page.html + 2,3 + + Create NFT + + + Recent + + src/app/pages/collection/pages/collection/collection.page.html + 192 + + + src/app/pages/collection/pages/collection/collection.page.html + 209 + + + src/app/pages/discover/pages/awards/awards.page.html + 20 + + + src/app/pages/discover/pages/awards/awards.page.html + 31 + + + src/app/pages/discover/pages/collections/collections.page.html + 40 + + + src/app/pages/discover/pages/collections/collections.page.html + 51 + + + src/app/pages/discover/pages/members/members.page.html + 31 + + + src/app/pages/discover/pages/members/members.page.html + 42 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 20 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 31 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 20 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 33 + + + src/app/pages/market/pages/collections/collections.page.html + 154 + + + src/app/pages/market/pages/collections/collections.page.html + 171 + + + src/app/pages/market/pages/nfts/nfts.page.html + 42 + + + src/app/pages/market/pages/nfts/nfts.page.html + 59 + + Recent + + + Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 193 + + + src/app/pages/market/pages/collections/collections.page.html + 155 + + + src/app/pages/market/pages/nfts/nfts.page.html + 43 + + + src/app/pages/market/pages/nfts/nfts.page.html + 60 + + Low to High + + + High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 194 + + + src/app/pages/market/pages/collections/collections.page.html + 156 + + + src/app/pages/market/pages/nfts/nfts.page.html + 44 + + + src/app/pages/market/pages/nfts/nfts.page.html + 61 + + High to Low + + + Sort by + + src/app/pages/collection/pages/collection/collection.page.html + 199 + + + src/app/pages/discover/pages/awards/awards.page.html + 18 + + + src/app/pages/discover/pages/awards/awards.page.html + 24,25 + + + src/app/pages/discover/pages/collections/collections.page.html + 37,38 + + + src/app/pages/discover/pages/collections/collections.page.html + 44,45 + + + src/app/pages/discover/pages/members/members.page.html + 29 + + + src/app/pages/discover/pages/members/members.page.html + 35,36 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 18 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 24,25 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 18 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 24,25 + + + src/app/pages/market/pages/collections/collections.page.html + 152 + + + src/app/pages/market/pages/collections/collections.page.html + 161 + + + src/app/pages/market/pages/nfts/nfts.page.html + 40 + + + src/app/pages/market/pages/nfts/nfts.page.html + 49 + + Sort by + + + Price: Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 210 + + + src/app/pages/market/pages/collections/collections.page.html + 172 + + Price: Low to High + + + Price: High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 211 + + + src/app/pages/market/pages/collections/collections.page.html + 173 + + Price: High to Low + + + No NFTs + + src/app/pages/collection/pages/collection/collection.page.html + 233 + + + src/app/pages/market/pages/nfts/nfts.page.html + 84 + + + src/app/pages/member/pages/nfts/nfts.page.html + 32 + + + src/app/pages/nft/pages/nft/nft.page.html + 375 + + No NFTs + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2,3 + + Create new collection + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3,5 + + Edit collection + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18,19 + + Collection info + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20,21 + + Name and description will be included on the Collection. + + + Name + + src/app/pages/collection/pages/upsert/upsert.page.html + 30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 70,71 + + + src/app/pages/nft/pages/new/single/single.page.html + 26 + + Name + + + Description + + src/app/pages/collection/pages/upsert/upsert.page.html + 40,41 + + + src/app/pages/nft/pages/new/single/single.page.html + 36,37 + + Description + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 53,54 + + + src/app/pages/nft/pages/new/single/single.page.html + 49,50 + + Sales info + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 55,56 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 118 + + Royalty + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 120 + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 131,132 + + Royalties - Percentage fee + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 141,142 + + Example: 10 % , 20 % , etc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 150 + + Royalties goes to a different space + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 158,159 + + Royalties goes to a different space + + + Links + + src/app/pages/collection/pages/upsert/upsert.page.html + 181 + + Links + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 182,183 + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 187,188 + + Invalid URL. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 213,214 + + Link to your Twitter account + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 226,227 + + Invalid Discord username. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 233,234 + + Link to your Discord account + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 248,249 + + Discounts + + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + src/app/pages/collection/pages/upsert/upsert.page.html + 250,251 + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 298 + + Discount + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 311 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + Discount Amount + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 350,351 + + Add discount level + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 365,366 + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 383,384 + + Collection Type + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 385,386 + + Each type has different characteristics. This cannot be changed after creation. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 417 + + + src/app/pages/space/pages/upsert/upsert.page.html + 192 + + Banner + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 443 + + Banner is required. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + Placeholder + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 478 + + Placeholder is required. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 488,489 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 501,502 + + + src/app/pages/market/pages/collections/collections.page.html + 132,133 + + + src/app/pages/market/pages/collections/collections.page.html + 137,138 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 116,117 + + Category + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 490,491 + + Category is used when filtering content. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 494,495 + + Category. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 519,520 + + Collection Setup + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 521,522 + + Who has access to a given collection. + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 537,538 + + Everyone has access to this collection. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 547,548 + + Only Space Guardians can access. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 558,559 + + Only Space Members can access. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 569,570 + + Only Space Members with badge can access. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 585,586 + + Collection Options + + + Limited Edition + + src/app/pages/collection/pages/upsert/upsert.page.html + 590 + + Limited Edition + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 606 + + One NFT per Member Only + + + Select Collections + + src/app/pages/collection/pages/upsert/upsert.page.html + 629,630 + + Select Collections + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 677,678 + + Create collection + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 690,691 + + Save collection + + + Member seems to log out during the file upload request. + + src/app/pages/collection/pages/upsert/upsert.page.ts + 317 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 195 + + + src/app/pages/nft/pages/new/single/single.page.ts + 154 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 107 + + Member seems to log out during the file upload request. + + + My Overview + + src/app/pages/dashboard/dashboard.page.html + 2,3 + + My Overview + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 6,7 + + Pending Membership Requests + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 14,15 + + Your spaces + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 23 + + No Spaces yet + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 25,26 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 36,37 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 48,49 + + Active proposals + + + Oldest + + src/app/pages/discover/pages/awards/awards.page.html + 21 + + + src/app/pages/discover/pages/awards/awards.page.html + 32 + + + src/app/pages/discover/pages/collections/collections.page.html + 41 + + + src/app/pages/discover/pages/collections/collections.page.html + 52 + + + src/app/pages/discover/pages/members/members.page.html + 32 + + + src/app/pages/discover/pages/members/members.page.html + 43 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 21 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 32 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 21 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 34 + + Oldest + + + No Awards + + src/app/pages/discover/pages/awards/awards.page.html + 54 + + + src/app/pages/member/pages/awards/awards.page.html + 19 + + + src/app/pages/space/pages/awards/awards.page.html + 35 + + No Awards + + + collections + + src/app/pages/discover/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 185,186 + + collections + + + No Collections + + src/app/pages/discover/pages/collections/collections.page.html + 75 + + + src/app/pages/space/pages/collections/collections.page.html + 38 + + No Collections + + + Discover Soonaverse + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Discover Soonaverse + + + Enter the first few letters to search... + + src/app/pages/discover/pages/discover/discover.page.html + 7 + + Enter the first few letters to search... + + + Spaces + + src/app/pages/discover/pages/discover/discover.page.ts + 21 + + + src/app/pages/member/pages/member/member.page.ts + 29 + + Spaces + + + Collections + + src/app/pages/discover/pages/discover/discover.page.ts + 22 + + + src/app/pages/market/pages/market/market.page.ts + 23 + + + src/app/pages/space/pages/space/space.page.ts + 31 + + Collections + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 24 + + + src/app/pages/space/pages/space/space.page.ts + 32 + + Proposals + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 25 + + + src/app/pages/space/pages/space/space.page.ts + 34 + + Members + + + Include connections + + src/app/pages/discover/pages/members/members.page.html + 23,24 + + + src/app/pages/member/pages/activity/activity.page.html + 28,29 + + + src/app/pages/member/pages/spaces/member-spaces.component.html + 5,6 + + Include connections + + + (Select some space) + + src/app/pages/discover/pages/members/members.page.html + 24 + + + src/app/pages/member/pages/activity/activity.page.html + 29 + + (Select some space) + + + No Members + + src/app/pages/discover/pages/members/members.page.html + 66 + + + src/app/pages/space/pages/members/members.page.html + 58 + + No Members + + + proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 43,44 + + proposals + + + No Proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 55 + + + src/app/pages/space/pages/proposals/proposals.page.html + 35 + + No Proposals + + + No Spaces + + src/app/pages/discover/pages/spaces/spaces.page.html + 56 + + No Spaces + + + Open + + src/app/pages/discover/pages/spaces/spaces.page.ts + 29 + + Open + + + Welcome to The Soonaverse + + src/app/pages/home/home.page.html + 5,6 + + Welcome to The Soonaverse + + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + src/app/pages/home/home.page.html + 8,9 + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + + Join Us + + src/app/pages/home/home.page.html + 19,20 + + Join Us + + + Marketplace + + src/app/pages/home/home.page.html + 31 + + Marketplace + + + See Docs + + src/app/pages/home/home.page.html + 43,44 + + See Docs + + + Get started with the Soonaverse + + src/app/pages/home/home.page.html + 52,53 + + Get started with the Soonaverse + + + Not sure where to start? Find featured spaces and NFT Collections below. + + src/app/pages/home/home.page.html + 54 + + Not sure where to start? Find featured spaces and NFT Collections below. + + + Trending Collections + + src/app/pages/home/home.page.html + 60,61 + + Trending Collections + + + Go to Marketplace + + src/app/pages/home/home.page.html + 70 + + Go to Marketplace + + + Discover more + + src/app/pages/home/home.page.html + 86 + + + src/app/pages/home/home.page.html + 102 + + + src/app/pages/home/home.page.html + 122 + + Discover more + + + Popular spaces + + src/app/pages/home/home.page.html + 92,93 + + Popular spaces + + + Creating your community is easy as 1-2-3 + + src/app/pages/home/home.page.html + 130,131 + + Creating your community is easy as 1-2-3 + + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + src/app/pages/home/home.page.html + 132,133 + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + + StepArticle image + + src/app/pages/home/home.page.html + 143,144 + + StepArticle image + + + Voting is essential and it needs to be on-chain and FREE. + + src/app/pages/home/home.page.html + 162 + + Voting is essential and it needs to be on-chain and FREE. + + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + src/app/pages/home/home.page.html + 165,167 + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + + Go there now + + src/app/pages/home/home.page.html + 177 + + Go there now + + + Want to learn more about SoonLabs? + + src/app/pages/home/home.page.html + 202,203 + + Want to learn more about SoonLabs? + + + Visit YouTube + + src/app/pages/home/home.page.html + 213 + + Visit YouTube + + + Who’s using the Soonaverse? + + src/app/pages/home/home.page.html + 222,224 + + Who’s using the Soonaverse? + + + Investors + + src/app/pages/home/home.page.html + 275,276 + + Investors + + + Privacy + + src/app/pages/home/home.page.html + 285,286 + + Privacy + + + Terms + + src/app/pages/home/home.page.html + 295,296 + + Terms + + + Powered by SoonLabs + + src/app/pages/home/home.page.html + 306,307 + + + src/app/pages/home/home.page.html + 318,319 + + Powered by SoonLabs + + + Create your community + + src/app/pages/home/home.page.ts + 33,31 + + Create your community + + + Feeless, secure, on-chain voting, and “one click” creation tools. + + src/app/pages/home/home.page.ts + 34 + + Feeless, secure, on-chain voting, and “one click” creation tools. + + + Build reputation and rewards + + src/app/pages/home/home.page.ts + 38,36 + + Build reputation and rewards + + + Create incentives and build reputation, trust and community engagement. + + src/app/pages/home/home.page.ts + 39 + + Create incentives and build reputation, trust and community engagement. + + + Manage, Maintain, Grow + + src/app/pages/home/home.page.ts + 43,41 + + Manage, Maintain, Grow + + + Governance, voting, for both public and private communities. + + src/app/pages/home/home.page.ts + 44 + + Governance, voting, for both public and private communities. + + + NFTs + + src/app/pages/market/pages/collections/collections.page.html + 12,13 + + + src/app/pages/market/pages/nfts/nfts.page.html + 13,14 + + + src/app/pages/member/pages/member/member.page.ts + 30 + + NFTs + + + Select Access type + + src/app/pages/market/pages/collections/collections.page.html + 20,21 + + Select Access type + + + All accesses + + src/app/pages/market/pages/collections/collections.page.html + 25,26 + + + src/app/pages/market/pages/collections/collections.page.html + 32,33 + + + src/app/pages/market/pages/collections/collections.page.html + 111 + + All accesses + + + Open sale + + src/app/pages/market/pages/collections/collections.page.html + 38,39 + + + src/app/pages/market/pages/collections/collections.page.html + 45,46 + + + src/app/pages/market/pages/collections/collections.page.html + 112 + + Open sale + + + Space members only + + src/app/pages/market/pages/collections/collections.page.html + 51,52 + + + src/app/pages/market/pages/collections/collections.page.html + 58,59 + + + src/app/pages/market/pages/collections/collections.page.html + 113 + + Space members only + + + Space guardians only + + src/app/pages/market/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 71,72 + + + src/app/pages/market/pages/collections/collections.page.html + 114 + + Space guardians only + + + Space members with badge only + + src/app/pages/market/pages/collections/collections.page.html + 77,78 + + + src/app/pages/market/pages/collections/collections.page.html + 84,85 + + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Space members with badge only + + + At least one NFT from collections + + src/app/pages/market/pages/collections/collections.page.html + 90,91 + + + src/app/pages/market/pages/collections/collections.page.html + 97,98 + + + src/app/pages/market/pages/collections/collections.page.html + 116 + + At least one NFT from collections + + + No collections + + src/app/pages/market/pages/collections/collections.page.html + 196 + + No collections + + + Marketplace + + src/app/pages/market/pages/market/market.page.html + 2,4 + + Marketplace + + + Spaces, awards, proposals or members... + + src/app/pages/market/pages/market/market.page.html + 7 + + Spaces, awards, proposals or members... + + + NFT's + + src/app/pages/market/pages/market/market.page.ts + 24 + + NFT's + + + On Auction + + src/app/pages/market/pages/nfts/nfts.page.ts + 40,37 + + On Auction + + + Owned + + src/app/pages/market/pages/nfts/nfts.page.ts + 41 + + + src/app/pages/nft/pages/nft/nft.page.html + 6,7 + + Owned + + + View space + + src/app/pages/member/pages/activity/activity.page.html + 20,21 + + View space + + + Awards Completed + + src/app/pages/member/pages/activity/activity.page.html + 37 + + Awards Completed + + + Total Reputation + + src/app/pages/member/pages/activity/activity.page.html + 39 + + Total Reputation + + + Earned badges + + src/app/pages/member/pages/activity/activity.page.html + 47 + + Earned badges + + + More + + src/app/pages/member/pages/activity/activity.page.html + 51,52 + + More + + + Reputation + + src/app/pages/member/pages/activity/activity.page.html + 72,73 + + Reputation + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 6,7 + + Pending + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + Issued + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 21,22 + + Discover Awards + + + No Badges yet + + src/app/pages/member/pages/badges/badges.page.html + 19,20 + + No Badges yet + + + Discover Badges + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Discover Badges + + + My profile + + src/app/pages/member/pages/member/member.page.html + 9 + + My profile + + + Profile + + src/app/pages/member/pages/member/member.page.html + 10 + + Profile + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 15,16 + + Profile info + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 26 + + Activity + + + Badges + + src/app/pages/member/pages/member/member.page.ts + 28 + + Badges + + + (Join space with alliance) + + src/app/pages/member/pages/spaces/member-spaces.component.html + 6 + + (Join space with alliance) + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 44,45 + + Some files have not been uploaded + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 48,49 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 57 + + Uploaded CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 69,70 + + Filename + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 92,93 + + Error + + + Select collection + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 123,124 + + + src/app/pages/nft/pages/new/single/single.page.html + 349,350 + + Select collection + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136,137 + + Upload existing CSV + + + Upload back once you generate bellow + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138,139 + + Upload back once you generate bellow + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 166 + + You have to upload images first. + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 191,192 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Single + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Multiple + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14,15 + + NFT info + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16,17 + + Name and description will be included on the NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 21,22 + + Name is required. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 32,33 + + Description is required. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 51,52 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + + Properties + + src/app/pages/nft/pages/new/single/single.page.html + 111,112 + + Properties + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 113,114 + + Properties show up underneath your item. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 120,121 + + Property name (E.g. Character) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 121,122 + + Value (E.g. Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 133,134 + + + src/app/pages/nft/pages/new/single/single.page.html + 166,168 + + + src/app/pages/nft/pages/new/single/single.page.html + 173,174 + + Property name + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 144 + + + src/app/pages/nft/pages/new/single/single.page.html + 178,180 + + + src/app/pages/nft/pages/new/single/single.page.html + 186 + + + src/app/pages/nft/pages/new/single/single.page.html + 236 + + + src/app/pages/nft/pages/new/single/single.page.html + 270,272 + + + src/app/pages/nft/pages/new/single/single.page.html + 276 + + Value + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 159 + + Property + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 196,197 + + Add property + + + Stats + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Stats + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 205,206 + + Stats show up underneath your item. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 212,213 + + Stats name (E.g. Stamina) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 213,214 + + Value (E.g. 10, 1/10 , etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 225,226 + + + src/app/pages/nft/pages/new/single/single.page.html + 258,260 + + + src/app/pages/nft/pages/new/single/single.page.html + 265,266 + + Stat name + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 251 + + Stat + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287,288 + + Add stat + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 299,300 + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 324 + + Media is required + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 338,339 + + Select one of your collections to display this NFT. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 371,372 + + Create NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 381,382 + + Preview NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 142 + + File name is not valid + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 4,5 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 248,249 + + Check out nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 58 + + Current highest bid + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 94 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 102 + + Sale hasn't started yet + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 110 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 118 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 123,124 + + Sell NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 124,125 + + Change Fixed Price + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 125,126 + + Change Auction + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + Place bid + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 138 + + Buy now + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 151,152 + + Current Bids + + + My Bids + + src/app/pages/nft/pages/nft/nft.page.html + 155,156 + + My Bids + + + My Transactions + + src/app/pages/nft/pages/nft/nft.page.html + 159,160 + + My Transactions + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 168,169 + + Member + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 169,170 + + Bidded on + + + Date + + src/app/pages/nft/pages/nft/nft.page.html + 202,203 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 8,9 + + Date + + + Type + + src/app/pages/nft/pages/nft/nft.page.html + 203,204 + + Type + + + On-Chain Record + + src/app/pages/nft/pages/nft/nft.page.html + 276,277 + + On-Chain Record + + + Preparing... + + src/app/pages/nft/pages/nft/nft.page.html + 277,278 + + Preparing... + + + View + + src/app/pages/nft/pages/nft/nft.page.html + 280,281 + + + src/app/pages/nft/pages/nft/nft.page.html + 308,309 + + + src/app/pages/nft/pages/nft/nft.page.html + 315,316 + + View + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 285,286 + + View all of the transaction details of this NFT on the Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 340,341 + + About the collection + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 343,344 + + Show + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 344 + + collection + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 353,355 + + by + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2,4 + + New Proposal + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17,18 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 5,6 + + Proposal info + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19,20 + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 35,36 + + Start Date is required. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 45 + + Start + + + Commencing milestone. + + src/app/pages/proposal/pages/new/new.page.html + 69,70 + + Commencing milestone. + + + Commencing milestone + + src/app/pages/proposal/pages/new/new.page.html + 76,77 + + Commencing milestone + + + Start milestone. + + src/app/pages/proposal/pages/new/new.page.html + 83,84 + + Start milestone. + + + Start milestone + + src/app/pages/proposal/pages/new/new.page.html + 90,91 + + Start milestone + + + End milestone. + + src/app/pages/proposal/pages/new/new.page.html + 97,98 + + End milestone. + + + End milestone + + src/app/pages/proposal/pages/new/new.page.html + 104,105 + + End milestone + + + Proposal description is required. + + src/app/pages/proposal/pages/new/new.page.html + 112,113 + + Proposal description is required. + + + Proposal description + + src/app/pages/proposal/pages/new/new.page.html + 117,118 + + Proposal description + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 127,128 + + Question Info + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 129,130 + + Title and description will only be displayed for this question. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 136,137 + + Question Title is required. + + + Question Title + + src/app/pages/proposal/pages/new/new.page.html + 140,141 + + Question Title + + + Question description + + src/app/pages/proposal/pages/new/new.page.html + 152,153 + + Question description + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 178,179 + + Text and description for each individual answer. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 183,184 + + Answer Text is required. + + + Answer Text + + src/app/pages/proposal/pages/new/new.page.html + 187,188 + + Answer Text + + + Answer description + + src/app/pages/proposal/pages/new/new.page.html + 198,199 + + Answer description + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 233,234 + + Add Choice + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 244,245 + + This is the space that will list the proposal. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 292,293 + + Proposal Setup + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 294,295 + + Defines who has access to the proposal and what is the voting method. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 299 + + Target Participants + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 306,307 + + All Guardians + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 312,313 + + Only guardians can vote on this proposal + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 316,317 + + All Members + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 322,323 + + All members can vote on this proposal + + + IOTA Token Holders + + src/app/pages/proposal/pages/new/new.page.html + 327,328 + + IOTA Token Holders + + + All IOTA token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 333,334 + + All IOTA token holders can vote. + + + Voting Type + + src/app/pages/proposal/pages/new/new.page.html + 341 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 55 + + Voting Type + + + Member - One Vote + + src/app/pages/proposal/pages/new/new.page.html + 348,349 + + Member - One Vote + + + Each member of the space gets one vote + + src/app/pages/proposal/pages/new/new.page.html + 354,355 + + Each member of the space gets one vote + + + XP Reputation - Space + + src/app/pages/proposal/pages/new/new.page.html + 362,363 + + XP Reputation - Space + + + Votes are weighted based on total amount of XP a member has in the space + + src/app/pages/proposal/pages/new/new.page.html + 368,369 + + Votes are weighted based on total amount of XP a member has in the space + + + XP Reputation - Space + Connection + + src/app/pages/proposal/pages/new/new.page.html + 378,379 + + XP Reputation - Space + Connection + + + Votes are weighted based on total amount of XP a member has in the space & connections + + src/app/pages/proposal/pages/new/new.page.html + 384,385 + + Votes are weighted based on total amount of XP a member has in the space & connections + + + XP Reputation - Selected Badges + + src/app/pages/proposal/pages/new/new.page.html + 394,395 + + XP Reputation - Selected Badges + + + Votes are weighted based on total amount of XP a member has for selected badges + + src/app/pages/proposal/pages/new/new.page.html + 400,401 + + Votes are weighted based on total amount of XP a member has for selected badges + + + Reputation Options + + src/app/pages/proposal/pages/new/new.page.html + 412,413 + + Reputation Options + + + Set Minimum Weight + + src/app/pages/proposal/pages/new/new.page.html + 423,424 + + Set Minimum Weight + + + Select Badge + + src/app/pages/proposal/pages/new/new.page.html + 438,439 + + Select Badge + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 465,466 + + Create Proposal + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 322 + + Choice + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + badge + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 2,3 + + Final Results + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 58,59 + + Proposal Description + + + Voted + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 3,4 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 38 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 129 + + Voted + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 4,5 + + Vote Now + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 5 + + Voting starts + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 9 + + You are not part of the vote + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 12 + + In order to vote, you must be part of the space before proposal was created. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 18 + + Log in to vote + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 21 + + In order to vote, you must login first. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 27 + + Pending Guardian Approval + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 30 + + This proposal has not been approved by any Guardian yet. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 52 + + Weight + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 37 + + Pending Vote + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 124 + + joined soonaverse on + + + Voter + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 7,8 + + Voter + + + Option + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 9,10 + + Option + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 26 + + Approve + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 28 + + Decline + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 34,35 + + Current Milestone + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 39 + + Commence Date + + + Start Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 45 + + Start Date + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 56 + + Voting Type of this proposal. + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 60 + + Total Weight + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 61 + + Total weight within this proposal for all participants. + + + Export to JSON + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 65,67 + + Export to JSON + + + Cast your vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 50,51 + + Cast your vote + + + Open Firefly to Vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 53 + + Open Firefly to Vote + + + Voting instructions + + src/app/pages/proposal/pages/proposal/proposal.page.html + 55 + + Voting instructions + + + You will select your options and execute the vote within Firefly. + + src/app/pages/proposal/pages/proposal/proposal.page.html + 57,58 + + You will select your options and execute the vote within Firefly. + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 64,65 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 117,118 + + Check out proposal + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 70,71 + + Current Results + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 91 + + Selected Badges + + + New + + src/app/pages/space/pages/awards/awards.page.html + 23,24 + + + src/app/pages/space/pages/collections/collections.page.html + 25,26 + + + src/app/pages/space/pages/proposals/proposals.page.html + 23,24 + + New + + + award + + src/app/pages/space/pages/awards/awards.page.html + 24 + + award + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 24 + + + src/app/pages/space/pages/members/members.page.html + 24 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 24 + + Active + + + Active + + src/app/pages/space/pages/members/members.page.html + 9 + + Active + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 18 + + Blocked + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 28 + + Blocked + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 35 + + + src/app/pages/space/pages/members/members.page.html + 43,44 + + Find Member + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 63 + + joined space on + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 78,79 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 81,82 + + Make Guardian + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 84,86 + + Accept Member + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 89,91 + + Block Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 91,93 + + Unblock Member + + + Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 3,5 + + Active Proposals + + + No Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 11 + + No Active Proposals + + + Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 24,26 + + Active Awards + + + No Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 32 + + No Active Awards + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 24 + + proposal + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 21,22 + + Check out space + + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 53,54 + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + + Show All + + src/app/pages/space/pages/space/space-about/space-about.component.html + 59,60 + + Show All + + + Connected spaces that you recognize + + src/app/pages/space/pages/space/space-about/space-about.component.html + 65,66 + + Connected spaces that you recognize + + + New connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 76,77 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 88 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 117 + + New connection + + + connections + + src/app/pages/space/pages/space/space-about/space-about.component.html + 104 + + connections + + + Close + + src/app/pages/space/pages/space/space-about/space-about.component.html + 120 + + Close + + + New + + src/app/pages/space/pages/space/space-about/space-about.component.html + 132 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 169 + + New + + + Edit + + src/app/pages/space/pages/space/space-about/space-about.component.html + 133 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 170 + + Edit + + + connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 134,135 + + connection + + + Form a connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 148 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Form a connection + + + Save + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 181 + + Save + + + Terminate alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 159,160 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 190,191 + + Terminate alliance + + + alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 171,172 + + alliance + + + Space's Wallet Address + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201,202 + + Space's Wallet Address + + + Wallet to hold funds for the Space. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 203,204 + + Wallet to hold funds for the Space. + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 252,253 + + Leave Space + + + About space + + src/app/pages/space/pages/space/space.page.html + 5,6 + + About space + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 53 + + + src/app/pages/space/pages/space/space.page.html + 113,114 + + Join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 77 + + + src/app/pages/space/pages/space/space.page.html + 139 + + Edit Space + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2,3 + + Add new space + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3,4 + + Edit space + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17,18 + + Space info + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19,20 + + Title and description will be included on the Space. + + + Space description + + src/app/pages/space/pages/upsert/upsert.page.html + 39,40 + + Space description + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 54,55 + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 100,101 + + Only discord invite code supported (i.e. RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 107,108 + + Type your Discord invite code + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 128,129 + + Space Type + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 130,131 + + Each type has different characteristics. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 139,140 + + Open for anyone to join instantly + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 143,144 + + Requires a member approval + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 163,164 + + Avatar is mandatory + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 236,237 + + Create space + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 249,250 + + Save space + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Upload new to replace existing. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + Your brand is key. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Make it personal. + + + + diff --git a/src/locale/messages.ru-RU.xlf b/src/locale/messages.ru-RU.xlf new file mode 100644 index 0000000..b631f77 --- /dev/null +++ b/src/locale/messages.ru-RU.xlf @@ -0,0 +1,6844 @@ + + + + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 69 + + Back + + + Discover + + src/app/@shell/ui/header/header.component.html + 56,57 + + + src/app/pages/home/home.page.html + 18,19 + + Найти + + + Create new + + src/app/@shell/ui/header/header.component.html + 62 + + Создать + + + Space + + src/app/@shell/ui/header/header.component.html + 68,69 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 83,84 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 6,7 + + + src/app/pages/collection/pages/collection/collection.page.html + 54,55 + + + src/app/pages/market/pages/collections/collections.page.html + 122,123 + + + src/app/pages/market/pages/nfts/nfts.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 69,70 + + Пространство + + + Proposal + + src/app/@shell/ui/header/header.component.html + 71,72 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 23,24 + + Предложение + + + Award + + src/app/@shell/ui/header/header.component.html + 74,75 + + + src/app/pages/award/pages/award/award.page.html + 26,27 + + Награда + + + Collection + + src/app/@shell/ui/header/header.component.html + 77,78 + + + src/app/pages/collection/pages/collection/collection.page.html + 19,20 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 114,115 + + + src/app/pages/nft/pages/new/single/single.page.html + 336,337 + + + src/app/pages/space/pages/collections/collections.page.html + 26 + + Коллекция + + + None. + + src/app/@shell/ui/header/header.component.html + 128,129 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 52 + + Никто не голосовал против. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 137,138 + + + src/app/components/auth/services/auth.service.ts + 315 + + Мой профиль + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 152,153 + + Покупка не была завершена + + + You have + + src/app/@shell/ui/header/header.component.html + 154 + + У вас есть + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 154,155 + + чтобы завершить транзакцию + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 156,157 + + Open Checkout + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 272 + + Вы выиграли NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 273 + + Вы гордый владелец нового NFT. Поздравляем! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 280 + + Ваша ставка проиграла! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 281 + + Ваша ставка + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 282 + + was outbid. Try again! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 289 + + just offered + + + for + + src/app/@shell/ui/header/header.component.ts + 290 + + + src/app/components/timeline-nft/timeline-nft.component.html + 60 + + для + + + Your + + src/app/@shell/ui/header/header.component.ts + 291 + + Ваш(и) + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 292 + + has received a new bid for + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 300,299 + + Недопустимо + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 301 + + Это сообщение не поддерживается на вашем языке + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 12 + + Пространство + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 17 + + Предложение + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 22 + + Награда + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27 + + Коллекция + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 34,35 + + Подключите кошелек MetaMask + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 52,53 + + Выйти + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 56,57 + + Powered by + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8,10 + + Страница, которую вы искали, не найдена + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 11,13 + + Путешествуйте по Soonaverse + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 28,29 + + См. документацию + + + Coming SOON + + src/app/@shell/ui/sider/sider.component.html + 35,36 + + + src/app/pages/award/pages/new/new.page.html + 271,272 + + + src/app/pages/award/pages/new/new.page.html + 281,282 + + + src/app/pages/award/pages/new/new.page.html + 291,292 + + Скоро + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 8,9 + + MetaMask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 9,10 + + Подключите кошелек MetaMask + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 20,21 + + Убедитесь, что вы выбрали сеть: IOTA EVM в MetaMask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 22,23 + + Название сети: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23,24 + + URL-адрес RPC: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 24,25 + + ID цепочки: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 31,32 + + + src/app/pages/award/pages/award/award.page.html + 154 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 152 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 184 + + Отмена + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 1,3 + + Подключиться + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Отключить + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 111 + + Unable to sign transaction. Please try to reload page. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 156 + + You must unlock your MetaMask first! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 167 + + You must enable access to read your account address. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 189 + + Please make sure you select address in MetaMask! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 196 + + Unable to get nonce to authenticate! + + + You have to open Soonaverse in MetaMask app. + + src/app/components/auth/services/auth.service.ts + 239 + + You have to open Soonaverse in MetaMask app. + + + Failed to initialize MetaMask, try to reload page. + + src/app/components/auth/services/auth.service.ts + 241 + + Failed to initialize MetaMask, try to reload page. + + + Pending + + + src/app/components/award/components/award-status/award-status.component.html + 1,2 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 1,2 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 1,2 + + Подтверждение + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 3,4 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 3,4 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 3,4 + + Отклонено + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 5 + + + src/app/pages/space/pages/awards/awards.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 25 + + Завершено + + + Available + + src/app/components/award/components/award-status/award-status.component.html + 6 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 62 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 150,149 + + + src/app/pages/collection/pages/collection/collection.page.html + 91,92 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 39,37 + + + src/app/pages/space/pages/collections/collections.page.ts + 24 + + Доступно + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 4 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 553,554 + + Только для участников пространства + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 542,543 + + Только для хранителей пространства + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 14 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 564,565 + + Только для участников пространства со Значком + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 574,575 + + At least one NFT from Collections + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 19 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 43,44 + + Starts in + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 21 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 46,47 + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26,27 + + days + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 24 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 50,51 + + Starts today + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 42 + + Limited Edition + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 57 + + Pending approval + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 67 + + + src/app/pages/space/pages/awards/awards.page.ts + 26 + + + src/app/pages/space/pages/collections/collections.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 26 + + Rejected + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 2,3 + + + src/app/pages/nft/pages/new/single/single.page.html + 342,343 + + Collection is required. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 11,12 + + Select Collection + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 65,67 + + Select a Collection + + + Search + + src/app/components/collection/components/select-collection/select-collection.component.html + 74 + + + src/app/components/space/components/select-space/select-space.component.html + 74 + + + src/app/pages/discover/pages/discover/discover.page.html + 22,23 + + + src/app/pages/market/pages/market/market.page.html + 22,23 + + Search + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 84 + + + src/app/components/space/components/select-space/select-space.component.html + 84 + + No results for + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 14,13 + + All Collections + + + Wallet details + + src/app/components/member/components/member-about/member-about.component.html + 42,43 + + Wallet details + + + Member's Wallet Address. + + src/app/components/member/components/member-about/member-about.component.html + 44,45 + + Адрес кошелька пользователя. + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 55,56 + + Recently joined spaces + + + All + + src/app/components/member/components/member-about/member-about.component.html + 58,59 + + + src/app/pages/discover/pages/spaces/spaces.page.ts + 28,27 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 38,37 + + All + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 78,79 + + No Contribution Yet. + + + Latest Badges + + src/app/components/member/components/member-about/member-about.component.html + 84,85 + + Latest Badges + + + No badges + + src/app/components/member/components/member-about/member-about.component.html + 93,94 + + No badges + + + See all + + src/app/components/member/components/member-about/member-about.component.html + 97,98 + + See all + + + Connections + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 5 + + + src/app/pages/member/pages/activity/activity.page.html + 68 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 50,51 + + Connections + + + Awards + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 6 + + + src/app/pages/discover/pages/discover/discover.page.ts + 23 + + + src/app/pages/member/pages/member/member.page.ts + 27 + + + src/app/pages/space/pages/space/space.page.ts + 33 + + Awards + + + XP + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 7 + + + src/app/components/member/components/member-card/member-card.component.html + 31,32 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 16,17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 25,26 + + XP + + + Total reputation + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 29 + + Total reputation + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 38,39 + + awards + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 6,7 + + Display Name + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 7,8 + + Set a display name. This does not change your username. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 11 + + Display name (optional) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 18,19 + + About + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19,20 + + A brief description of yourself shown on your profile. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 22 + + Your description (optional) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 29,30 + + + src/app/pages/space/pages/upsert/upsert.page.html + 154 + + Avatar + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 30,31 + + Customise your Soonaverse identity. + + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 34,37 + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 43,44 + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 49,50 + + + src/app/pages/space/pages/upsert/upsert.page.html + 52,53 + + Networking + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 51,52 + + + src/app/pages/space/pages/upsert/upsert.page.html + 60,61 + + Invalid Github username. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 53,54 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67,68 + + Type your Github account username + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 63,64 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 206,207 + + + src/app/pages/space/pages/upsert/upsert.page.html + 80,81 + + Invalid Twitter username. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 65,66 + + + src/app/pages/space/pages/upsert/upsert.page.html + 87,88 + + Type your Twitter account username + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,76 + + Only username#1234 format supported. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 77,78 + + Type your Discord account username + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 89,90 + + Settings + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 91,92 + + Save changes + + + reputation + + src/app/components/member/components/member-reputation-drawer/member-reputation-drawer.component.html + 15 + + + src/app/components/member/components/member-reputation-modal/member-reputation-modal.component.html + 17 + + reputation + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 15,16 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 29,30 + + Make a bid + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 44,45 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 9,10 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 44,45 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46,47 + + NFT image + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 61 + + Ends + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 66 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 63 + + Royalties + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 72,73 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 116,117 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 66,67 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 69,70 + + Royalties are automatically deducted and paid to artists. + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 91 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 94 + + Current highest bid + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 92 + + + src/app/pages/nft/pages/nft/nft.page.html + 59 + + Min bid + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 95 + + + src/app/pages/nft/pages/nft/nft.page.html + 61 + + Your bid is the highest + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Current price is refreshing in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 152,153 + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 156,157 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 196,197 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 277,278 + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + + By checking this box, you agree with + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 162,163 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 108,109 + + By checking this box, you agree with + + + Terms and Conditions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 165,166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 111,112 + + Terms and Conditions + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 171 + + Make a bid + + + Send IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 180,181 + + Send IOTA to following address (please restake after!): + + + Copied + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 189 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 240 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150 + + + src/app/components/share/share.component.html + 11 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 139 + + + src/app/components/wallet-address/wallet-address.component.html + 24 + + Copied + + + Copy + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 190 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 241 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 151 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 140 + + + src/app/components/wallet-address/wallet-address.component.html + 25 + + Copy + + + Do not send funds from an exchange, always use wallets you fully control. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 201 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + Do not send funds from an exchange, always use wallets you fully control. + + + Firefly + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 210 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 166 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 151 + + Firefly + + + Tanglepay + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 219 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 300 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 175 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 160 + + Tanglepay + + + Send + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130 + + Send + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231,232 + + IOTA to following address (please restake after!): + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 247 + + Your transactions + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 253,254 + + Sent Date + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 254,255 + + Time + + + Action + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,256 + + Action + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 256,257 + + + src/app/pages/nft/pages/nft/nft.page.html + 170,171 + + + src/app/pages/nft/pages/nft/nft.page.html + 204,205 + + Amount + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 258,259 + + Detail + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 270,271 + + + src/app/pages/nft/pages/nft/nft.page.html + 171,172 + + + src/app/pages/nft/pages/nft/nft.page.html + 190,191 + + + src/app/pages/nft/pages/nft/nft.page.html + 205,206 + + + src/app/pages/nft/pages/nft/nft.page.html + 219,220 + + Link + + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 282 + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 314,315 + + Congratulations you won the NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 320 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 238 + + Close checkout + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 325 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 243 + + Show my NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 337,338 + + Bidding is expired. Good luck next time :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 227 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 368 + + Generated NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 229 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 370 + + SFT + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 47,48 + + day + + + Price + + src/app/components/nft/components/nft-card/nft-card.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 12 + + + src/app/pages/collection/pages/collection/collection.page.html + 190 + + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 65 + + + src/app/pages/market/pages/collections/collections.page.html + 162 + + + src/app/pages/market/pages/nfts/nfts.page.html + 50 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 71,72 + + + src/app/pages/nft/pages/new/single/single.page.html + 62 + + Price + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 73 + + Current bid + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 88,89 + + Owned by + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 100,101 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 155,154 + + New NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 15,16 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 29,30 + + Checkout + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 71,72 + + Total price + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 117 + + Confirm and Lock + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121 + + Your NFT will be locked for purchase for + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121,122 + + minutes + + + remaining to make the transfer. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 132,133 + + remaining to make the transfer. + + + Expired + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 133,134 + + Expired + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 137 + + We received invalid amount. Try again. + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141,142 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130,131 + + IOTA to following address (please restake after!): + + + Transaction history + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 214 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 177 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 204 + + Transaction history + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 204 + + Validating your transaction... + + + Transaction complete. Congratulations. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 232,233 + + Transaction complete. Congratulations. + + + + + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 10,11 + + + src/app/pages/collection/pages/collection/collection.page.html + 55,56 + + + src/app/pages/collection/pages/collection/collection.page.html + 70,71 + + + + + d + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26 + + d + + + h + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34 + + h + + + hours + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34,35 + + hours + + + m + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42 + + m + + + min + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42,43 + + min + + + s + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50 + + s + + + sec + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50,51 + + sec + + + Sale Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 34 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 50,51 + + Sale Starts + + + Auction Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 37 + + Auction Starts + + + Auction Ends + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 40 + + Auction Ends + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 16,17 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 31,32 + + Preview + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 59,60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 74,75 + + + src/app/pages/nft/pages/nft/nft.page.html + 43,44 + + Current price + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68,69 + + Author + + + Migrate + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100,101 + + + src/app/pages/nft/pages/nft/nft.page.html + 291,292 + + Migrate + + + Shimmer/Mainnet (Tokenization)...SOON. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 102,104 + + + src/app/pages/nft/pages/nft/nft.page.html + 293,295 + + Shimmer/Mainnet (Tokenization)...SOON. + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 108,109 + + + src/app/pages/nft/pages/nft/nft.page.html + 299,300 + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 114,115 + + + src/app/pages/nft/pages/nft/nft.page.html + 305,306 + + IPFS Metadata + + + Preparing... + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 116 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 122 + + Preparing... + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 120,121 + + + src/app/pages/nft/pages/nft/nft.page.html + 312,313 + + IPFS Image + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149,150 + + + src/app/pages/nft/pages/new/single/single.page.html + 297,298 + + + src/app/pages/nft/pages/nft/nft.page.html + 15 + + NFT Image + + + Trade info + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 3,5 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 3,4 + + Trade info + + + Floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 12 + + Floor price + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 41 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 40,41 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 101,102 + + + src/app/pages/nft/pages/new/single/single.page.html + 90,91 + + Available On is required. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 50 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 49,50 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 112,113 + + + src/app/pages/nft/pages/new/single/single.page.html + 100,101 + + Available on + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 57 + + Various auction length coming next sprint once community have a vote! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + Duration of auction is 3 days + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 158 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 91,92 + + Once your listing is complete, you will get a confirmation message. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 159 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Confirm listing + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 62,63 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 532,533 + + Open Sale + + + Specific member(s) only (Transfer) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Specific member(s) only (Transfer) + + + Reserve for specific buyer + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 82,83 + + Reserve for specific buyer + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2,4 + + Trade history + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 6,8 + + Item is yours and yours only + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 11 + + This will make your item unavailable for sale. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 12 + + Stop sale! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 16,17 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 31,32 + + List Item for sale + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 86,87 + + Not for sale + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 90,91 + + Fixed price + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 94,95 + + Auction + + + Donut graph coming SOON. + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 40,41 + + Donut graph coming SOON. + + + Commencing + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 5,6 + + Commencing + + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 7,8 + + In-Progress + + + Completed + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 9,10 + + Completed + + + + Share + + src/app/components/share/share.component.html + 5,6 + + + src/app/components/share/share.component.html + 18,19 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 14,15 + + Share + + + Copy to clipboard + + src/app/components/share/share.component.html + 12 + + Copy to clipboard + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 2,3 + + + src/app/pages/award/pages/new/new.page.html + 109,110 + + + src/app/pages/proposal/pages/new/new.page.html + 248,249 + + Space is required. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 11,12 + + Select Space + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 65,67 + + + src/app/pages/award/pages/new/new.page.html + 138,139 + + + src/app/pages/proposal/pages/new/new.page.html + 277,278 + + Select a space + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 14,13 + + All Spaces + + + No Connections + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 2,3 + + No Connections + + + Rep. weight + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 7,8 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 68,69 + + Rep. weight + + + Status + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 8,9 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 72,73 + + Status + + + Established + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 33 + + Established + + + Recognised + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 34 + + Recognised + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 11,12 + + + src/app/pages/member/pages/member/member.page.html + 30 + + Joined + + + members + + src/app/components/space/components/space-card/space-card.component.html + 28 + + + src/app/pages/discover/pages/members/members.page.html + 55,56 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 10,11 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 35,36 + + members + + + Value range is 0-1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 8 + + Value range is 0-1000 + + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 30,31 + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + + Equal + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 39 + + Equal + + + Half + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 40 + + Half + + + Double + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 41 + + Double + + + Earned Badge + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + Earned Badge + + + with + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + with + + + Show less + + src/app/components/timeline-badges/timeline-badges.component.html + 38 + + + src/app/components/timeline-nft/timeline-nft.component.html + 114 + + Show less + + + Show more + + src/app/components/timeline-badges/timeline-badges.component.html + 39 + + + src/app/components/timeline-nft/timeline-nft.component.html + 115 + + Show more + + + Timeline + + src/app/components/timeline-nft/timeline-nft.component.html + 1 + + Timeline + + + Listed by + + src/app/components/timeline-nft/timeline-nft.component.html + 20 + + Listed by + + + Made available for auction by + + src/app/components/timeline-nft/timeline-nft.component.html + 23 + + Made available for auction by + + + Purchased by + + src/app/components/timeline-nft/timeline-nft.component.html + 59 + + Purchased by + + + details + + src/app/components/timeline-nft/timeline-nft.component.html + 61 + + details + + + Invalid + + src/app/components/timeline-nft/timeline-nft.component.html + 73,74 + + Invalid + + + Listed by space + + src/app/components/timeline-nft/timeline-nft.component.html + 104 + + Listed by space + + + Bill (owner) + + src/app/components/timeline-nft/timeline-nft.component.ts + 46 + + Bill (owner) + + + Bill (royalty) + + src/app/components/timeline-nft/timeline-nft.component.ts + 48 + + Bill (royalty) + + + Credit + + src/app/components/timeline-nft/timeline-nft.component.ts + 51 + + Credit + + + Payment + + src/app/components/timeline-nft/timeline-nft.component.ts + 53 + + Payment + + + Order + + src/app/components/timeline-nft/timeline-nft.component.ts + 55 + + Order + + + Generate address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 12,13 + + Generate address + + + Make transaction + + src/app/components/wallet-address/iota-address/iota-address.component.html + 33,34 + + Make transaction + + + Wait for confirmation + + src/app/components/wallet-address/iota-address/iota-address.component.html + 55,56 + + Wait for confirmation + + + Confirmed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 78,79 + + Confirmed + + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/iota-address/iota-address.component.html + 104,105 + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/iota-address/iota-address.component.html + 105 + + space + + + profile + + src/app/components/wallet-address/iota-address/iota-address.component.html + 106 + + profile + + + for future transactions. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 107,108 + + for future transactions. + + + Generate new address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 111 + + Generate new address + + + Send a small + + src/app/components/wallet-address/iota-address/iota-address.component.html + 120 + + Send a small + + + amount to validate your address. This expires in + + src/app/components/wallet-address/iota-address/iota-address.component.html + 121 + + amount to validate your address. This expires in + + + Expired. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 123,124 + + Expired. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 172 + + Wait for transaction to be validated. We will send back your transaction once completed + + + Validating address... + + src/app/components/wallet-address/iota-address/iota-address.component.html + 194 + + Validating address... + + + Now you can deal with NFT`s + + src/app/components/wallet-address/iota-address/iota-address.component.html + 221,222 + + Now you can deal with NFT`s + + + Finish Verification + + src/app/components/wallet-address/iota-address/iota-address.component.html + 225 + + Finish Verification + + + Not verified + + src/app/components/wallet-address/wallet-address.component.html + 4,5 + + Not verified + + + Verify wallet + + src/app/components/wallet-address/wallet-address.component.html + 9,10 + + Verify wallet + + + Verified + + src/app/components/wallet-address/wallet-address.component.html + 18,19 + + Verified + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 43 + + Verify your + + + address + + src/app/components/wallet-address/wallet-address.component.html + 43 + + + src/app/components/wallet-address/wallet-address.component.html + 59 + + address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 59 + + Verify your + + + Detailed Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Detailed Info + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.html + 3,4 + + Badges used / available + + + End Date + + src/app/pages/award/pages/award/award-info/award-info.component.html + 9,10 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 50 + + End Date + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 16 + + Owner + + + Award info + + src/app/pages/award/pages/award/award.page.html + 5,6 + + + src/app/pages/award/pages/new/new.page.html + 17,18 + + Award info + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 81,82 + + + src/app/pages/award/pages/award/award.page.html + 176,177 + + Check out award + + + Approve Award + + src/app/pages/award/pages/award/award.page.html + 91,92 + + Approve Award + + + Approve + + src/app/pages/award/pages/award/award.page.html + 103 + + Approve + + + Decline + + src/app/pages/award/pages/award/award.page.html + 114 + + Decline + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 128,129 + + Confirm your participation + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 136,137 + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 142,143 + + Provide description or link to your work. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 151 + + Submit + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 35 + + + src/app/pages/space/pages/space/space.page.ts + 30 + + Overview + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 94 + + Participants + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2,4 + + New Award + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14,15 + + + src/app/pages/proposal/pages/new/new.page.html + 23,24 + + Title is required. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19,20 + + Title and description will be included on the Award. End date determines the duration of the Award. + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 23,24 + + You must enter name. + + + Title + + src/app/pages/award/pages/new/new.page.html + 28 + + + src/app/pages/proposal/pages/new/new.page.html + 28 + + + src/app/pages/space/pages/upsert/upsert.page.html + 29 + + Title + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 35,36 + + + src/app/pages/proposal/pages/new/new.page.html + 51,52 + + End Date is required. + + + End + + src/app/pages/award/pages/new/new.page.html + 45 + + + src/app/pages/proposal/pages/new/new.page.html + 62 + + End + + + Award description + + src/app/pages/award/pages/new/new.page.html + 55,56 + + Award description + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 66,67 + + Badge definition + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 68,69 + + Title and description will be included on the badge. + + + Badge Title is required. + + src/app/pages/award/pages/new/new.page.html + 73,74 + + Badge Title is required. + + + Badge Title + + src/app/pages/award/pages/new/new.page.html + 78,79 + + Badge Title + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 89,90 + + Badge description + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 103,104 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 363,364 + + + src/app/pages/proposal/pages/new/new.page.html + 242,243 + + Space Info + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 105,106 + + This is the space that will list the award. + + + Reward Info + + src/app/pages/award/pages/new/new.page.html + 155,156 + + Reward Info + + + Defines the amount of XP for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 157,158 + + Defines the amount of XP for each badge and the number of badges available. + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 162,163 + + + src/app/pages/award/pages/new/new.page.html + 182,183 + + Minimum 1 and maximum 10000. + + + Total XP (Max 10000) + + src/app/pages/award/pages/new/new.page.html + 167,168 + + Total XP (Max 10000) + + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + src/app/pages/award/pages/new/new.page.html + 177,178 + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + + Number of Badges + + src/app/pages/award/pages/new/new.page.html + 187,188 + + Number of Badges + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 197,198 + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + + Badge + + src/app/pages/award/pages/new/new.page.html + 206 + + Badge + + + What the badge looks like. + + src/app/pages/award/pages/new/new.page.html + 207,208 + + What the badge looks like. + + + Mint an unique NTT badge. + + src/app/pages/award/pages/new/new.page.html + 216,217 + + Mint an unique NTT badge. + + + Mint Avatar + + src/app/pages/award/pages/new/new.page.html + 225 + + Mint Avatar + + + WOW! Now reward your members with it! + + src/app/pages/award/pages/new/new.page.html + 238,239 + + WOW! Now reward your members with it! + + + Award Setup + + src/app/pages/award/pages/new/new.page.html + 245,246 + + Award Setup + + + Defines who and how can get a badge. + + src/app/pages/award/pages/new/new.page.html + 247,248 + + Defines who and how can get a badge. + + + Guardian approval + + src/app/pages/award/pages/new/new.page.html + 254,255 + + Guardian approval + + + The award must be approved by the guardians of the space before it's active or distributed + + src/app/pages/award/pages/new/new.page.html + 260,261 + + The award must be approved by the guardians of the space before it's active or distributed + + + Discord Activity + + src/app/pages/award/pages/new/new.page.html + 265,266 + + Discord Activity + + + Github Activity + + src/app/pages/award/pages/new/new.page.html + 275,276 + + Github Activity + + + Custom and more + + src/app/pages/award/pages/new/new.page.html + 285,286 + + Custom and more + + + Create award + + src/app/pages/award/pages/new/new.page.html + 310,311 + + Create award + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2,3 + + Award Description + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 39 + + + src/app/pages/award/pages/participants/participants.page.html + 46,47 + + + src/app/pages/proposal/pages/participants/participants.page.html + 24 + + + src/app/pages/proposal/pages/participants/participants.page.html + 31,32 + + Find Participant + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 51 + + + src/app/pages/proposal/pages/participants/participants.page.html + 36 + + + src/app/pages/space/pages/members/members.page.html + 49,50 + + Showing only few top records... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 59 + + + src/app/pages/proposal/pages/participants/participants.page.html + 44 + + No Participants + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 71 + + Reward + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 82 + + Reward again + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 39 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 131 + + + src/app/pages/space/pages/awards/awards.page.ts + 23 + + + src/app/pages/space/pages/collections/collections.page.ts + 23 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 23 + + Pending + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 40 + + Issued + + + Visit website + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 7,8 + + Visit website + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 18,19 + + Who can buy? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 22,23 + + Open sale + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 28,29 + + Space Members Only + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 34,35 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 40,41 + + Space Members with Badge Only + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 46,47 + + Must hold at least one NFT from each selected Collections + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51,52 + + (One NFT per member) + + + The badges you need + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 78 + + The badges you need + + + Resources + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89 + + Resources + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 114 + + Member discounts + + + Discount for members with XP + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 119 + + Discount for members with XP + + + Guardians of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 47 + + Guardians of Space Only + + + Members of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 49 + + Members of Space Only + + + Members With Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 51 + + Members With Badge Only + + + Check out collection + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 72 + + Check out collection + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 3 + + About collection + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 11 + + Limited edition + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 26 + + + src/app/pages/collection/pages/collection/collection.page.html + 118 + + Publish Collection + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 30 + + + src/app/pages/collection/pages/collection/collection.page.html + 122 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 36 + + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Cancel Collection + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 132 + + Edit Collection + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 69,70 + + Royalties goes to + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 79,80 + + Starts at + + + Items + + src/app/pages/collection/pages/collection/collection.page.html + 86,87 + + Items + + + Price starts at + + src/app/pages/collection/pages/collection/collection.page.html + 96,97 + + Price starts at + + + Sale in progress + + src/app/pages/collection/pages/collection/collection.page.html + 104,105 + + Sale in progress + + + remaining + + src/app/pages/collection/pages/collection/collection.page.html + 106,107 + + + src/app/pages/nft/pages/nft/nft.page.html + 86,87 + + remaining + + + Find item + + src/app/pages/collection/pages/collection/collection.page.html + 156 + + + src/app/pages/member/pages/nfts/nfts.page.html + 12 + + Find item + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 166,167 + + + src/app/pages/nft/pages/new/new.page.html + 2,3 + + Create NFT + + + Recent + + src/app/pages/collection/pages/collection/collection.page.html + 192 + + + src/app/pages/collection/pages/collection/collection.page.html + 209 + + + src/app/pages/discover/pages/awards/awards.page.html + 20 + + + src/app/pages/discover/pages/awards/awards.page.html + 31 + + + src/app/pages/discover/pages/collections/collections.page.html + 40 + + + src/app/pages/discover/pages/collections/collections.page.html + 51 + + + src/app/pages/discover/pages/members/members.page.html + 31 + + + src/app/pages/discover/pages/members/members.page.html + 42 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 20 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 31 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 20 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 33 + + + src/app/pages/market/pages/collections/collections.page.html + 154 + + + src/app/pages/market/pages/collections/collections.page.html + 171 + + + src/app/pages/market/pages/nfts/nfts.page.html + 42 + + + src/app/pages/market/pages/nfts/nfts.page.html + 59 + + Recent + + + Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 193 + + + src/app/pages/market/pages/collections/collections.page.html + 155 + + + src/app/pages/market/pages/nfts/nfts.page.html + 43 + + + src/app/pages/market/pages/nfts/nfts.page.html + 60 + + Low to High + + + High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 194 + + + src/app/pages/market/pages/collections/collections.page.html + 156 + + + src/app/pages/market/pages/nfts/nfts.page.html + 44 + + + src/app/pages/market/pages/nfts/nfts.page.html + 61 + + High to Low + + + Sort by + + src/app/pages/collection/pages/collection/collection.page.html + 199 + + + src/app/pages/discover/pages/awards/awards.page.html + 18 + + + src/app/pages/discover/pages/awards/awards.page.html + 24,25 + + + src/app/pages/discover/pages/collections/collections.page.html + 37,38 + + + src/app/pages/discover/pages/collections/collections.page.html + 44,45 + + + src/app/pages/discover/pages/members/members.page.html + 29 + + + src/app/pages/discover/pages/members/members.page.html + 35,36 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 18 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 24,25 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 18 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 24,25 + + + src/app/pages/market/pages/collections/collections.page.html + 152 + + + src/app/pages/market/pages/collections/collections.page.html + 161 + + + src/app/pages/market/pages/nfts/nfts.page.html + 40 + + + src/app/pages/market/pages/nfts/nfts.page.html + 49 + + Sort by + + + Price: Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 210 + + + src/app/pages/market/pages/collections/collections.page.html + 172 + + Price: Low to High + + + Price: High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 211 + + + src/app/pages/market/pages/collections/collections.page.html + 173 + + Price: High to Low + + + No NFTs + + src/app/pages/collection/pages/collection/collection.page.html + 233 + + + src/app/pages/market/pages/nfts/nfts.page.html + 84 + + + src/app/pages/member/pages/nfts/nfts.page.html + 32 + + + src/app/pages/nft/pages/nft/nft.page.html + 375 + + No NFTs + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2,3 + + Create new collection + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3,5 + + Edit collection + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18,19 + + Collection info + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20,21 + + Name and description will be included on the Collection. + + + Name + + src/app/pages/collection/pages/upsert/upsert.page.html + 30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 70,71 + + + src/app/pages/nft/pages/new/single/single.page.html + 26 + + Name + + + Description + + src/app/pages/collection/pages/upsert/upsert.page.html + 40,41 + + + src/app/pages/nft/pages/new/single/single.page.html + 36,37 + + Description + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 53,54 + + + src/app/pages/nft/pages/new/single/single.page.html + 49,50 + + Sales info + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 55,56 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 118 + + Royalty + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 120 + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 131,132 + + Royalties - Percentage fee + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 141,142 + + Example: 10 % , 20 % , etc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 150 + + Royalties goes to a different space + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 158,159 + + Royalties goes to a different space + + + Links + + src/app/pages/collection/pages/upsert/upsert.page.html + 181 + + Links + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 182,183 + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 187,188 + + Invalid URL. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 213,214 + + Link to your Twitter account + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 226,227 + + Invalid Discord username. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 233,234 + + Link to your Discord account + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 248,249 + + Discounts + + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + src/app/pages/collection/pages/upsert/upsert.page.html + 250,251 + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 298 + + Discount + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 311 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + Discount Amount + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 350,351 + + Add discount level + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 365,366 + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 383,384 + + Collection Type + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 385,386 + + Each type has different characteristics. This cannot be changed after creation. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 417 + + + src/app/pages/space/pages/upsert/upsert.page.html + 192 + + Banner + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 443 + + Banner is required. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + Placeholder + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 478 + + Placeholder is required. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 488,489 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 501,502 + + + src/app/pages/market/pages/collections/collections.page.html + 132,133 + + + src/app/pages/market/pages/collections/collections.page.html + 137,138 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 116,117 + + Category + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 490,491 + + Category is used when filtering content. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 494,495 + + Category. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 519,520 + + Collection Setup + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 521,522 + + Who has access to a given collection. + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 537,538 + + Everyone has access to this collection. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 547,548 + + Only Space Guardians can access. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 558,559 + + Only Space Members can access. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 569,570 + + Only Space Members with badge can access. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 585,586 + + Collection Options + + + Limited Edition + + src/app/pages/collection/pages/upsert/upsert.page.html + 590 + + Limited Edition + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 606 + + One NFT per Member Only + + + Select Collections + + src/app/pages/collection/pages/upsert/upsert.page.html + 629,630 + + Select Collections + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 677,678 + + Create collection + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 690,691 + + Save collection + + + Member seems to log out during the file upload request. + + src/app/pages/collection/pages/upsert/upsert.page.ts + 317 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 195 + + + src/app/pages/nft/pages/new/single/single.page.ts + 154 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 107 + + Member seems to log out during the file upload request. + + + My Overview + + src/app/pages/dashboard/dashboard.page.html + 2,3 + + My Overview + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 6,7 + + Pending Membership Requests + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 14,15 + + Your spaces + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 23 + + No Spaces yet + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 25,26 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 36,37 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 48,49 + + Active proposals + + + Oldest + + src/app/pages/discover/pages/awards/awards.page.html + 21 + + + src/app/pages/discover/pages/awards/awards.page.html + 32 + + + src/app/pages/discover/pages/collections/collections.page.html + 41 + + + src/app/pages/discover/pages/collections/collections.page.html + 52 + + + src/app/pages/discover/pages/members/members.page.html + 32 + + + src/app/pages/discover/pages/members/members.page.html + 43 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 21 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 32 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 21 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 34 + + Oldest + + + No Awards + + src/app/pages/discover/pages/awards/awards.page.html + 54 + + + src/app/pages/member/pages/awards/awards.page.html + 19 + + + src/app/pages/space/pages/awards/awards.page.html + 35 + + No Awards + + + collections + + src/app/pages/discover/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 185,186 + + collections + + + No Collections + + src/app/pages/discover/pages/collections/collections.page.html + 75 + + + src/app/pages/space/pages/collections/collections.page.html + 38 + + No Collections + + + Discover Soonaverse + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Discover Soonaverse + + + Enter the first few letters to search... + + src/app/pages/discover/pages/discover/discover.page.html + 7 + + Enter the first few letters to search... + + + Spaces + + src/app/pages/discover/pages/discover/discover.page.ts + 21 + + + src/app/pages/member/pages/member/member.page.ts + 29 + + Spaces + + + Collections + + src/app/pages/discover/pages/discover/discover.page.ts + 22 + + + src/app/pages/market/pages/market/market.page.ts + 23 + + + src/app/pages/space/pages/space/space.page.ts + 31 + + Collections + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 24 + + + src/app/pages/space/pages/space/space.page.ts + 32 + + Proposals + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 25 + + + src/app/pages/space/pages/space/space.page.ts + 34 + + Members + + + Include connections + + src/app/pages/discover/pages/members/members.page.html + 23,24 + + + src/app/pages/member/pages/activity/activity.page.html + 28,29 + + + src/app/pages/member/pages/spaces/member-spaces.component.html + 5,6 + + Include connections + + + (Select some space) + + src/app/pages/discover/pages/members/members.page.html + 24 + + + src/app/pages/member/pages/activity/activity.page.html + 29 + + (Select some space) + + + No Members + + src/app/pages/discover/pages/members/members.page.html + 66 + + + src/app/pages/space/pages/members/members.page.html + 58 + + No Members + + + proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 43,44 + + proposals + + + No Proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 55 + + + src/app/pages/space/pages/proposals/proposals.page.html + 35 + + No Proposals + + + No Spaces + + src/app/pages/discover/pages/spaces/spaces.page.html + 56 + + No Spaces + + + Open + + src/app/pages/discover/pages/spaces/spaces.page.ts + 29 + + Open + + + Welcome to The Soonaverse + + src/app/pages/home/home.page.html + 5,6 + + Welcome to The Soonaverse + + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + src/app/pages/home/home.page.html + 8,9 + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + + Join Us + + src/app/pages/home/home.page.html + 19,20 + + Join Us + + + Marketplace + + src/app/pages/home/home.page.html + 31 + + Marketplace + + + See Docs + + src/app/pages/home/home.page.html + 43,44 + + See Docs + + + Get started with the Soonaverse + + src/app/pages/home/home.page.html + 52,53 + + Get started with the Soonaverse + + + Not sure where to start? Find featured spaces and NFT Collections below. + + src/app/pages/home/home.page.html + 54 + + Not sure where to start? Find featured spaces and NFT Collections below. + + + Trending Collections + + src/app/pages/home/home.page.html + 60,61 + + Trending Collections + + + Go to Marketplace + + src/app/pages/home/home.page.html + 70 + + Go to Marketplace + + + Discover more + + src/app/pages/home/home.page.html + 86 + + + src/app/pages/home/home.page.html + 102 + + + src/app/pages/home/home.page.html + 122 + + Discover more + + + Popular spaces + + src/app/pages/home/home.page.html + 92,93 + + Popular spaces + + + Creating your community is easy as 1-2-3 + + src/app/pages/home/home.page.html + 130,131 + + Creating your community is easy as 1-2-3 + + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + src/app/pages/home/home.page.html + 132,133 + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + + StepArticle image + + src/app/pages/home/home.page.html + 143,144 + + StepArticle image + + + Voting is essential and it needs to be on-chain and FREE. + + src/app/pages/home/home.page.html + 162 + + Voting is essential and it needs to be on-chain and FREE. + + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + src/app/pages/home/home.page.html + 165,167 + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + + Go there now + + src/app/pages/home/home.page.html + 177 + + Go there now + + + Want to learn more about SoonLabs? + + src/app/pages/home/home.page.html + 202,203 + + Want to learn more about SoonLabs? + + + Visit YouTube + + src/app/pages/home/home.page.html + 213 + + Visit YouTube + + + Who’s using the Soonaverse? + + src/app/pages/home/home.page.html + 222,224 + + Who’s using the Soonaverse? + + + Investors + + src/app/pages/home/home.page.html + 275,276 + + Investors + + + Privacy + + src/app/pages/home/home.page.html + 285,286 + + Privacy + + + Terms + + src/app/pages/home/home.page.html + 295,296 + + Terms + + + Powered by SoonLabs + + src/app/pages/home/home.page.html + 306,307 + + + src/app/pages/home/home.page.html + 318,319 + + Powered by SoonLabs + + + Create your community + + src/app/pages/home/home.page.ts + 33,31 + + Create your community + + + Feeless, secure, on-chain voting, and “one click” creation tools. + + src/app/pages/home/home.page.ts + 34 + + Feeless, secure, on-chain voting, and “one click” creation tools. + + + Build reputation and rewards + + src/app/pages/home/home.page.ts + 38,36 + + Build reputation and rewards + + + Create incentives and build reputation, trust and community engagement. + + src/app/pages/home/home.page.ts + 39 + + Create incentives and build reputation, trust and community engagement. + + + Manage, Maintain, Grow + + src/app/pages/home/home.page.ts + 43,41 + + Manage, Maintain, Grow + + + Governance, voting, for both public and private communities. + + src/app/pages/home/home.page.ts + 44 + + Governance, voting, for both public and private communities. + + + NFTs + + src/app/pages/market/pages/collections/collections.page.html + 12,13 + + + src/app/pages/market/pages/nfts/nfts.page.html + 13,14 + + + src/app/pages/member/pages/member/member.page.ts + 30 + + NFTs + + + Select Access type + + src/app/pages/market/pages/collections/collections.page.html + 20,21 + + Select Access type + + + All accesses + + src/app/pages/market/pages/collections/collections.page.html + 25,26 + + + src/app/pages/market/pages/collections/collections.page.html + 32,33 + + + src/app/pages/market/pages/collections/collections.page.html + 111 + + All accesses + + + Open sale + + src/app/pages/market/pages/collections/collections.page.html + 38,39 + + + src/app/pages/market/pages/collections/collections.page.html + 45,46 + + + src/app/pages/market/pages/collections/collections.page.html + 112 + + Open sale + + + Space members only + + src/app/pages/market/pages/collections/collections.page.html + 51,52 + + + src/app/pages/market/pages/collections/collections.page.html + 58,59 + + + src/app/pages/market/pages/collections/collections.page.html + 113 + + Space members only + + + Space guardians only + + src/app/pages/market/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 71,72 + + + src/app/pages/market/pages/collections/collections.page.html + 114 + + Space guardians only + + + Space members with badge only + + src/app/pages/market/pages/collections/collections.page.html + 77,78 + + + src/app/pages/market/pages/collections/collections.page.html + 84,85 + + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Space members with badge only + + + At least one NFT from collections + + src/app/pages/market/pages/collections/collections.page.html + 90,91 + + + src/app/pages/market/pages/collections/collections.page.html + 97,98 + + + src/app/pages/market/pages/collections/collections.page.html + 116 + + At least one NFT from collections + + + No collections + + src/app/pages/market/pages/collections/collections.page.html + 196 + + No collections + + + Marketplace + + src/app/pages/market/pages/market/market.page.html + 2,4 + + Marketplace + + + Spaces, awards, proposals or members... + + src/app/pages/market/pages/market/market.page.html + 7 + + Spaces, awards, proposals or members... + + + NFT's + + src/app/pages/market/pages/market/market.page.ts + 24 + + NFT's + + + On Auction + + src/app/pages/market/pages/nfts/nfts.page.ts + 40,37 + + On Auction + + + Owned + + src/app/pages/market/pages/nfts/nfts.page.ts + 41 + + + src/app/pages/nft/pages/nft/nft.page.html + 6,7 + + Owned + + + View space + + src/app/pages/member/pages/activity/activity.page.html + 20,21 + + View space + + + Awards Completed + + src/app/pages/member/pages/activity/activity.page.html + 37 + + Awards Completed + + + Total Reputation + + src/app/pages/member/pages/activity/activity.page.html + 39 + + Total Reputation + + + Earned badges + + src/app/pages/member/pages/activity/activity.page.html + 47 + + Earned badges + + + More + + src/app/pages/member/pages/activity/activity.page.html + 51,52 + + More + + + Reputation + + src/app/pages/member/pages/activity/activity.page.html + 72,73 + + Reputation + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 6,7 + + Pending + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + Issued + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 21,22 + + Discover Awards + + + No Badges yet + + src/app/pages/member/pages/badges/badges.page.html + 19,20 + + No Badges yet + + + Discover Badges + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Discover Badges + + + My profile + + src/app/pages/member/pages/member/member.page.html + 9 + + My profile + + + Profile + + src/app/pages/member/pages/member/member.page.html + 10 + + Profile + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 15,16 + + Profile info + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 26 + + Activity + + + Badges + + src/app/pages/member/pages/member/member.page.ts + 28 + + Badges + + + (Join space with alliance) + + src/app/pages/member/pages/spaces/member-spaces.component.html + 6 + + (Join space with alliance) + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 44,45 + + Some files have not been uploaded + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 48,49 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 57 + + Uploaded CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 69,70 + + Filename + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 92,93 + + Error + + + Select collection + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 123,124 + + + src/app/pages/nft/pages/new/single/single.page.html + 349,350 + + Select collection + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136,137 + + Upload existing CSV + + + Upload back once you generate bellow + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138,139 + + Upload back once you generate bellow + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 166 + + You have to upload images first. + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 191,192 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Single + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Multiple + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14,15 + + NFT info + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16,17 + + Name and description will be included on the NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 21,22 + + Name is required. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 32,33 + + Description is required. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 51,52 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + + Properties + + src/app/pages/nft/pages/new/single/single.page.html + 111,112 + + Properties + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 113,114 + + Properties show up underneath your item. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 120,121 + + Property name (E.g. Character) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 121,122 + + Value (E.g. Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 133,134 + + + src/app/pages/nft/pages/new/single/single.page.html + 166,168 + + + src/app/pages/nft/pages/new/single/single.page.html + 173,174 + + Property name + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 144 + + + src/app/pages/nft/pages/new/single/single.page.html + 178,180 + + + src/app/pages/nft/pages/new/single/single.page.html + 186 + + + src/app/pages/nft/pages/new/single/single.page.html + 236 + + + src/app/pages/nft/pages/new/single/single.page.html + 270,272 + + + src/app/pages/nft/pages/new/single/single.page.html + 276 + + Value + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 159 + + Property + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 196,197 + + Add property + + + Stats + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Stats + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 205,206 + + Stats show up underneath your item. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 212,213 + + Stats name (E.g. Stamina) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 213,214 + + Value (E.g. 10, 1/10 , etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 225,226 + + + src/app/pages/nft/pages/new/single/single.page.html + 258,260 + + + src/app/pages/nft/pages/new/single/single.page.html + 265,266 + + Stat name + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 251 + + Stat + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287,288 + + Add stat + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 299,300 + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 324 + + Media is required + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 338,339 + + Select one of your collections to display this NFT. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 371,372 + + Create NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 381,382 + + Preview NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 142 + + File name is not valid + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 4,5 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 248,249 + + Check out nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 58 + + Current highest bid + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 94 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 102 + + Sale hasn't started yet + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 110 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 118 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 123,124 + + Sell NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 124,125 + + Change Fixed Price + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 125,126 + + Change Auction + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + Place bid + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 138 + + Buy now + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 151,152 + + Current Bids + + + My Bids + + src/app/pages/nft/pages/nft/nft.page.html + 155,156 + + My Bids + + + My Transactions + + src/app/pages/nft/pages/nft/nft.page.html + 159,160 + + My Transactions + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 168,169 + + Member + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 169,170 + + Bidded on + + + Date + + src/app/pages/nft/pages/nft/nft.page.html + 202,203 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 8,9 + + Date + + + Type + + src/app/pages/nft/pages/nft/nft.page.html + 203,204 + + Type + + + On-Chain Record + + src/app/pages/nft/pages/nft/nft.page.html + 276,277 + + On-Chain Record + + + Preparing... + + src/app/pages/nft/pages/nft/nft.page.html + 277,278 + + Preparing... + + + View + + src/app/pages/nft/pages/nft/nft.page.html + 280,281 + + + src/app/pages/nft/pages/nft/nft.page.html + 308,309 + + + src/app/pages/nft/pages/nft/nft.page.html + 315,316 + + View + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 285,286 + + View all of the transaction details of this NFT on the Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 340,341 + + About the collection + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 343,344 + + Show + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 344 + + collection + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 353,355 + + by + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2,4 + + New Proposal + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17,18 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 5,6 + + Proposal info + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19,20 + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 35,36 + + Start Date is required. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 45 + + Start + + + Commencing milestone. + + src/app/pages/proposal/pages/new/new.page.html + 69,70 + + Commencing milestone. + + + Commencing milestone + + src/app/pages/proposal/pages/new/new.page.html + 76,77 + + Commencing milestone + + + Start milestone. + + src/app/pages/proposal/pages/new/new.page.html + 83,84 + + Start milestone. + + + Start milestone + + src/app/pages/proposal/pages/new/new.page.html + 90,91 + + Start milestone + + + End milestone. + + src/app/pages/proposal/pages/new/new.page.html + 97,98 + + End milestone. + + + End milestone + + src/app/pages/proposal/pages/new/new.page.html + 104,105 + + End milestone + + + Proposal description is required. + + src/app/pages/proposal/pages/new/new.page.html + 112,113 + + Proposal description is required. + + + Proposal description + + src/app/pages/proposal/pages/new/new.page.html + 117,118 + + Proposal description + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 127,128 + + Question Info + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 129,130 + + Title and description will only be displayed for this question. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 136,137 + + Question Title is required. + + + Question Title + + src/app/pages/proposal/pages/new/new.page.html + 140,141 + + Question Title + + + Question description + + src/app/pages/proposal/pages/new/new.page.html + 152,153 + + Question description + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 178,179 + + Text and description for each individual answer. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 183,184 + + Answer Text is required. + + + Answer Text + + src/app/pages/proposal/pages/new/new.page.html + 187,188 + + Answer Text + + + Answer description + + src/app/pages/proposal/pages/new/new.page.html + 198,199 + + Answer description + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 233,234 + + Add Choice + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 244,245 + + This is the space that will list the proposal. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 292,293 + + Proposal Setup + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 294,295 + + Defines who has access to the proposal and what is the voting method. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 299 + + Target Participants + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 306,307 + + All Guardians + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 312,313 + + Only guardians can vote on this proposal + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 316,317 + + All Members + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 322,323 + + All members can vote on this proposal + + + IOTA Token Holders + + src/app/pages/proposal/pages/new/new.page.html + 327,328 + + IOTA Token Holders + + + All IOTA token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 333,334 + + All IOTA token holders can vote. + + + Voting Type + + src/app/pages/proposal/pages/new/new.page.html + 341 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 55 + + Voting Type + + + Member - One Vote + + src/app/pages/proposal/pages/new/new.page.html + 348,349 + + Member - One Vote + + + Each member of the space gets one vote + + src/app/pages/proposal/pages/new/new.page.html + 354,355 + + Each member of the space gets one vote + + + XP Reputation - Space + + src/app/pages/proposal/pages/new/new.page.html + 362,363 + + XP Reputation - Space + + + Votes are weighted based on total amount of XP a member has in the space + + src/app/pages/proposal/pages/new/new.page.html + 368,369 + + Votes are weighted based on total amount of XP a member has in the space + + + XP Reputation - Space + Connection + + src/app/pages/proposal/pages/new/new.page.html + 378,379 + + XP Reputation - Space + Connection + + + Votes are weighted based on total amount of XP a member has in the space & connections + + src/app/pages/proposal/pages/new/new.page.html + 384,385 + + Votes are weighted based on total amount of XP a member has in the space & connections + + + XP Reputation - Selected Badges + + src/app/pages/proposal/pages/new/new.page.html + 394,395 + + XP Reputation - Selected Badges + + + Votes are weighted based on total amount of XP a member has for selected badges + + src/app/pages/proposal/pages/new/new.page.html + 400,401 + + Votes are weighted based on total amount of XP a member has for selected badges + + + Reputation Options + + src/app/pages/proposal/pages/new/new.page.html + 412,413 + + Reputation Options + + + Set Minimum Weight + + src/app/pages/proposal/pages/new/new.page.html + 423,424 + + Set Minimum Weight + + + Select Badge + + src/app/pages/proposal/pages/new/new.page.html + 438,439 + + Select Badge + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 465,466 + + Create Proposal + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 322 + + Choice + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + badge + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 2,3 + + Final Results + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 58,59 + + Proposal Description + + + Voted + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 3,4 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 38 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 129 + + Voted + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 4,5 + + Vote Now + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 5 + + Voting starts + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 9 + + You are not part of the vote + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 12 + + In order to vote, you must be part of the space before proposal was created. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 18 + + Log in to vote + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 21 + + In order to vote, you must login first. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 27 + + Pending Guardian Approval + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 30 + + This proposal has not been approved by any Guardian yet. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 52 + + Weight + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 37 + + Pending Vote + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 124 + + joined soonaverse on + + + Voter + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 7,8 + + Voter + + + Option + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 9,10 + + Option + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 26 + + Approve + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 28 + + Decline + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 34,35 + + Current Milestone + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 39 + + Commence Date + + + Start Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 45 + + Start Date + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 56 + + Voting Type of this proposal. + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 60 + + Total Weight + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 61 + + Total weight within this proposal for all participants. + + + Export to JSON + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 65,67 + + Export to JSON + + + Cast your vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 50,51 + + Cast your vote + + + Open Firefly to Vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 53 + + Open Firefly to Vote + + + Voting instructions + + src/app/pages/proposal/pages/proposal/proposal.page.html + 55 + + Voting instructions + + + You will select your options and execute the vote within Firefly. + + src/app/pages/proposal/pages/proposal/proposal.page.html + 57,58 + + You will select your options and execute the vote within Firefly. + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 64,65 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 117,118 + + Check out proposal + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 70,71 + + Current Results + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 91 + + Selected Badges + + + New + + src/app/pages/space/pages/awards/awards.page.html + 23,24 + + + src/app/pages/space/pages/collections/collections.page.html + 25,26 + + + src/app/pages/space/pages/proposals/proposals.page.html + 23,24 + + New + + + award + + src/app/pages/space/pages/awards/awards.page.html + 24 + + award + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 24 + + + src/app/pages/space/pages/members/members.page.html + 24 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 24 + + Active + + + Active + + src/app/pages/space/pages/members/members.page.html + 9 + + Active + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 18 + + Blocked + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 28 + + Blocked + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 35 + + + src/app/pages/space/pages/members/members.page.html + 43,44 + + Find Member + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 63 + + joined space on + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 78,79 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 81,82 + + Make Guardian + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 84,86 + + Accept Member + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 89,91 + + Block Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 91,93 + + Unblock Member + + + Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 3,5 + + Active Proposals + + + No Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 11 + + No Active Proposals + + + Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 24,26 + + Active Awards + + + No Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 32 + + No Active Awards + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 24 + + proposal + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 21,22 + + Check out space + + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 53,54 + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + + Show All + + src/app/pages/space/pages/space/space-about/space-about.component.html + 59,60 + + Show All + + + Connected spaces that you recognize + + src/app/pages/space/pages/space/space-about/space-about.component.html + 65,66 + + Connected spaces that you recognize + + + New connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 76,77 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 88 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 117 + + New connection + + + connections + + src/app/pages/space/pages/space/space-about/space-about.component.html + 104 + + connections + + + Close + + src/app/pages/space/pages/space/space-about/space-about.component.html + 120 + + Close + + + New + + src/app/pages/space/pages/space/space-about/space-about.component.html + 132 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 169 + + New + + + Edit + + src/app/pages/space/pages/space/space-about/space-about.component.html + 133 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 170 + + Edit + + + connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 134,135 + + connection + + + Form a connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 148 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Form a connection + + + Save + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 181 + + Save + + + Terminate alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 159,160 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 190,191 + + Terminate alliance + + + alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 171,172 + + alliance + + + Space's Wallet Address + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201,202 + + Space's Wallet Address + + + Wallet to hold funds for the Space. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 203,204 + + Wallet to hold funds for the Space. + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 252,253 + + Leave Space + + + About space + + src/app/pages/space/pages/space/space.page.html + 5,6 + + About space + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 53 + + + src/app/pages/space/pages/space/space.page.html + 113,114 + + Join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 77 + + + src/app/pages/space/pages/space/space.page.html + 139 + + Edit Space + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2,3 + + Add new space + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3,4 + + Edit space + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17,18 + + Space info + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19,20 + + Title and description will be included on the Space. + + + Space description + + src/app/pages/space/pages/upsert/upsert.page.html + 39,40 + + Space description + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 54,55 + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 100,101 + + Only discord invite code supported (i.e. RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 107,108 + + Type your Discord invite code + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 128,129 + + Space Type + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 130,131 + + Each type has different characteristics. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 139,140 + + Open for anyone to join instantly + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 143,144 + + Requires a member approval + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 163,164 + + Avatar is mandatory + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 236,237 + + Create space + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 249,250 + + Save space + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Upload new to replace existing. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + Your brand is key. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Make it personal. + + + + diff --git a/src/locale/messages.sv-SE.xlf b/src/locale/messages.sv-SE.xlf new file mode 100644 index 0000000..e50aa5f --- /dev/null +++ b/src/locale/messages.sv-SE.xlf @@ -0,0 +1,13270 @@ + + + + + + Top Members + + src/app/@core/services/filter-storage/filter-storage.service.ts + 96 + + Top Members + + + Recent + + src/app/@core/services/filter-storage/filter-storage.service.ts + 97 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 115 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 132 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 146 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 164 + + Senaste + + + Oldest + + src/app/@core/services/filter-storage/filter-storage.service.ts + 98 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 116 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 133 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 147 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 165 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 187 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 206 + + Äldsta + + + Ending Soon + + src/app/@core/services/filter-storage/filter-storage.service.ts + 114 + + Ending Soon + + + Ending SOON + + src/app/@core/services/filter-storage/filter-storage.service.ts + 163 + + Ending SOON + + + Available Date + + src/app/@core/services/filter-storage/filter-storage.service.ts + 181 + + Available Date + + + Recently Created + + src/app/@core/services/filter-storage/filter-storage.service.ts + 182 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 205 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 57 + + Recently Created + + + Price: Low to High + + src/app/@core/services/filter-storage/filter-storage.service.ts + 183 + + Price: Low to High + + + Price: High to Low + + src/app/@core/services/filter-storage/filter-storage.service.ts + 184 + + Price: High to Low + + + Top Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 185 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 203 + + Top Traded + + + Recently Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 186 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 204 + + Recently Traded + + + Public Vote + + src/app/@core/services/filter-storage/filter-storage.service.ts + 199 + + Public Vote + + + Community Rank + + src/app/@core/services/filter-storage/filter-storage.service.ts + 200 + + Community Rank + + + SOON on Sale + + src/app/@core/services/filter-storage/filter-storage.service.ts + 201 + + SOON on Sale + + + Recently Minted + + src/app/@core/services/filter-storage/filter-storage.service.ts + 202 + + Recently Minted + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 74 + + Bakåt + + + Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products. + + src/app/@core/services/seo/seo.service.ts + 7 + + Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products. + + + Bill Payment + + src/app/@core/services/transaction/transaction.service.ts + 18 + + Bill Payment + + + Bill (royalty) + + src/app/@core/services/transaction/transaction.service.ts + 20 + + Bill (royalty) + + + Credit + + src/app/@core/services/transaction/transaction.service.ts + 26 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 336 + + Kredit + + + Payment + + src/app/@core/services/transaction/transaction.service.ts + 28 + + Betalning + + + Credit NFT + + src/app/@core/services/transaction/transaction.service.ts + 30 + + Credit NFT + + + Mint Collection + + src/app/@core/services/transaction/transaction.service.ts + 32 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 36 + + Mint Collection + + + Mint Token + + src/app/@core/services/transaction/transaction.service.ts + 34 + + + src/app/pages/space/pages/manage/manage.page.html + 116 + + Mint Token + + + Withdraw Asset + + src/app/@core/services/transaction/transaction.service.ts + 36 + + Withdraw Asset + + + Unlock + + src/app/@core/services/transaction/transaction.service.ts + 38 + + Unlock + + + Vote + + src/app/@core/services/transaction/transaction.service.ts + 40 + + Vote + + + Order + + src/app/@core/services/transaction/transaction.service.ts + 42 + + Beställning + + + (Mint Alias) + + src/app/@core/services/transaction/transaction.service.ts + 49 + + (Mint Alias) + + + (Mint NFTs) + + src/app/@core/services/transaction/transaction.service.ts + 51 + + (Mint NFTs) + + + (Mint Foundry) + + src/app/@core/services/transaction/transaction.service.ts + 53 + + (Mint Foundry) + + + (Send Alias to Guardian) + + src/app/@core/services/transaction/transaction.service.ts + 55 + + (Send Alias to Guardian) + + + (Lock Collection) + + src/app/@core/services/transaction/transaction.service.ts + 57 + + (Lock Collection) + + + Discover + + src/app/@shell/ui/header/header.component.html + 76 + + + src/app/components/auth/services/auth.service.ts + 83 + + Upptäck + + + Create new + + src/app/@shell/ui/header/header.component.html + 91 + + Skapa ny + + + Space + + src/app/@shell/ui/header/header.component.html + 97 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100 + + + src/app/pages/collection/pages/collection/collection.page.html + 110 + + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 206,205 + + + src/app/pages/token/pages/new/summary/summary.component.html + 242,241 + + Space + + + Proposal + + src/app/@shell/ui/header/header.component.html + 103 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 29 + + Förslag + + + Award + + src/app/@shell/ui/header/header.component.html + 106 + + + src/app/pages/award/pages/award/award.page.html + 29 + + + src/app/pages/award/pages/award/award.page.ts + 98 + + Utmärkelser + + + Collection + + src/app/@shell/ui/header/header.component.html + 110 + + + src/app/@shell/ui/header/header.component.html + 129 + + + src/app/pages/collection/pages/collection/collection.page.html + 37 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136 + + + src/app/pages/nft/pages/new/single/single.page.html + 346 + + + src/app/pages/space/pages/collections/collections.page.html + 50 + + Samling + + + Token + + src/app/@shell/ui/header/header.component.html + 113 + + + src/app/@shell/ui/header/header.component.html + 132 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 321 + + + src/app/pages/token/pages/token/token.page.html + 29 + + + src/app/pages/token/pages/token/token.page.ts + 99 + + + src/app/pages/token/pages/trade/trade.page.ts + 274 + + Token + + + To unlock more features you have to stake SOON token. + + src/app/@shell/ui/header/header.component.html + 124,126 + + To unlock more features you have to stake SOON token. + + + VIP LEVEL + + src/app/@shell/ui/header/header.component.html + 197,198 + + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 37,38 + + + src/app/pages/member/pages/activity/activity.page.html + 146,147 + + VIP LEVEL + + + None. + + src/app/@shell/ui/header/header.component.html + 232 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 77 + + None. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 240 + + + src/app/components/auth/services/auth.service.ts + 551 + + Min profil + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 265,266 + + Purchase has not been completed + + + You have + + src/app/@shell/ui/header/header.component.html + 270 + + Du har + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 272 + + för att slutföra din transaktion + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 282,283 + + Open Checkout + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 334 + + Du vann denna NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 335 + + Du är stolt ägare till en ny NFT. Grattis! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 342 + + Du förlorade ditt bud! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 343 + + Ditt bud på + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 344 + + blev överbjudet. Försök igen! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 351 + + just erbjudit + + + for + + src/app/@shell/ui/header/header.component.ts + 352 + + + src/app/components/timeline/timeline.component.html + 171 + + för + + + Your + + src/app/@shell/ui/header/header.component.ts + 353 + + Din + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 354 + + har fått ett nytt bud på + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 377 + + Stöds ej + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 378 + + Denna avisering stöds ännu inte på ditt språk + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27,28 + + Space + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 38,39 + + Förslag + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 49,50 + + Utmärkelser + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 60,61 + + Kollektion + + + Token + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 70,71 + + Token + + + Stake more SOON to create tokens and collections. + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 81,84 + + Stake more SOON to create tokens and collections. + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 57,58 + + Connect to your MetaMask wallet + + + Connect via TanglePay + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 73 + + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 47 + + Connect via TanglePay + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 97 + + Logga ut + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 103 + + Drivs av + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8 + + The page you were looking for was not found + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 9,11 + + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Utforska Soonaverse + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 19 + + Network status + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 30,31 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 84,85 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 140,141 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 197,198 + + Nätverksstatus + + + Operational + + src/app/@shell/ui/sider/network-status/network-status.component.html + 36 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 90 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 146 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 203 + + Operational + + + Degraded Performance + + src/app/@shell/ui/sider/network-status/network-status.component.html + 43 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 97 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 153 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 210 + + Degraded Performance + + + Down + + src/app/@shell/ui/sider/network-status/network-status.component.html + 50 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 104 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 160 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 217 + + Down + + + Last milestone + + src/app/@shell/ui/sider/network-status/network-status.component.html + 57,58 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 111,112 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 170,171 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 224,225 + + Last milestone + + + Devnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 78,79 + + + src/app/components/network/components/select-network/select-network.component.html + 61,63 + + Devnet + + + Shimmer Mainnet Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 132,133 + + Shimmer Mainnet Coming SOON + + + Testnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 191,192 + + + src/app/components/network/components/select-network/select-network.component.html + 33,35 + + Testnet + + + Assembly + + src/app/@shell/ui/sider/network-status/network-status.component.html + 237 + + Assembly + + + Assembly Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 244,245 + + Assembly Coming SOON + + + Shimmer EVM Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 266,267 + + Shimmer EVM Coming SOON + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 48 + + Se Dokument + + + Show more + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 47 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 27 + + + src/app/components/timeline/timeline.component.html + 304 + + Show more + + + Show less + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 48 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 28 + + + src/app/components/timeline/timeline.component.html + 303 + + Show less + + + Search here... + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 50 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 30 + + Search here... + + + Reset + + + src/app/components/algolia/algolia-clear/algolia-clear.component.html + 5,7 + + Reset + + + + Search + + src/app/components/algolia/search/search.component.html + 20,19 + + + src/app/components/collection/components/select-collection/select-collection.component.html + 95,94 + + + src/app/components/space/components/select-space/select-space.component.html + 95,94 + + Sök + + + Start typing... + + src/app/components/algolia/search/search.component.html + 36 + + Start typing... + + + Open + + src/app/components/algolia/services/algolia.service.ts + 28 + + Open + + + Guardians of Space Only + + src/app/components/algolia/services/algolia.service.ts + 30 + + Guardians of Space Only + + + Members of Space Only + + src/app/components/algolia/services/algolia.service.ts + 32 + + Members of Space Only + + + Members With Badge Only + + src/app/components/algolia/services/algolia.service.ts + 34 + + Members With Badge Only + + + Members With NFT only + + src/app/components/algolia/services/algolia.service.ts + 36 + + Members With NFT only + + + Unavailable for sale + + src/app/components/algolia/services/algolia.service.ts + 49 + + Unavailable for sale + + + On Auction + + src/app/components/algolia/services/algolia.service.ts + 51 + + On Auction + + + Available + + src/app/components/algolia/services/algolia.service.ts + 53 + + + src/app/components/award/components/award-status/award-status.component.html + 23 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 61 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 162 + + + src/app/pages/space/pages/collections/collections.page.ts + 31 + + + src/app/pages/token/pages/token/token.page.ts + 256 + + Tillgängliga + + + On Sale + + src/app/components/algolia/services/algolia.service.ts + 55 + + On Sale + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 19 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23 + + Anslut till din Metamask-plånbok + + + TanglePay + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 43 + + TanglePay + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 67 + + Kontrollera att du väljer IOTA EVM Chain i Metamask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 69 + + Nätverksnamn: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 70 + + RPC URL: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 71 + + Kedje-ID: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 89,90 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 120,121 + + Avbryt + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 8,10 + + Anslut + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Koppla från + + + Staking + + src/app/components/auth/services/auth.service.ts + 90 + + Staking + + + Tokens + + src/app/components/auth/services/auth.service.ts + 97 + + + src/app/pages/discover/pages/awards/awards.page.html + 145,144 + + + src/app/pages/member/pages/member/member.page.ts + 66 + + + src/app/pages/member/pages/tokens/tokens.page.html + 49 + + + src/app/pages/member/pages/tokens/tokens.page.html + 235 + + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 41 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 2 + + Tokens + + + Swap + + src/app/components/auth/services/auth.service.ts + 104 + + Swap + + + Pool + + src/app/components/auth/services/auth.service.ts + 111 + + Pool + + + Marketplace + + src/app/components/auth/services/auth.service.ts + 118 + + Marketplace + + + My Overview + + src/app/components/auth/services/auth.service.ts + 125 + + + src/app/pages/dashboard/dashboard.page.html + 2 + + My Overview + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 232 + + Det gick inte att signera transaktionen. Försök att ladda om sidan. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 278 + + Du måste låsa upp din Metamask först! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 290 + + Du måste aktivera åtkomst för att läsa din kontoadress. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 298 + + Vänligen kontrollera att du väljer adress i Metamask! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 307 + + + src/app/components/auth/services/auth.service.ts + 378 + + Det går inte att hämta nonce för att autentisera! + + + Unable to connect your TanglePay wallet. + + src/app/components/auth/services/auth.service.ts + 343 + + + src/app/components/auth/services/auth.service.ts + 482 + + Unable to connect your TanglePay wallet. + + + Unable to detect address in TanglePay! + + src/app/components/auth/services/auth.service.ts + 349 + + Unable to detect address in TanglePay! + + + You have to open Soonaverse in wallet app. + + src/app/components/auth/services/auth.service.ts + 443 + + You have to open Soonaverse in wallet app. + + + Failed to initialize wallet, try to reload page. + + src/app/components/auth/services/auth.service.ts + 445 + + Failed to initialize wallet, try to reload page. + + + Give badges + + src/app/components/award/components/award-awards/award-awards.component.html + 11 + + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 16 + + Give badges + + + Once issued, this badge is sent to the rewarded participant's wallet. + + src/app/components/award/components/award-awards/award-awards.component.html + 34 + + Once issued, this badge is sent to the rewarded participant's wallet. + + + Upload CSV + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 31,32 + + Upload CSV + + + Download CSV template + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 34 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 85 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 10 + + Download CSV template + + + You can create badge airdrops for any user. You can upload CSV with users ETH addresses and they will be properly reward. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 42,44 + + You can create badge airdrops for any user. You can upload CSV with users ETH addresses and they will be properly reward. + + + If you don’t know how to prepare CSV file, you can download our template made for you. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 50,51 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 101,102 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 25,26 + + If you don’t know how to prepare CSV file, you can download our template made for you. + + + Confirm schedule + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 77 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 128 + + Confirm schedule + + + ETH Address + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 97 + + ETH Address + + + Action + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 98 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 288 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 153 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 22 + + + src/app/pages/token/pages/trade/trade.page.html + 214 + + + src/app/pages/token/pages/trade/trade.page.html + 288 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 24 + + Åtgärd + + + Badge + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 104 + + + src/app/pages/award/pages/new/new.page.html + 298,297 + + Badge + + + Submitted. + + src/app/components/award/components/award-give-badges/award-give-badges.component.ts + 103 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 137 + + Submitted. + + + Fund Award & Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 3 + + Fund Award & Mint + + + Reward Token + + src/app/components/award/components/award-mint/award-mint.component.html + 21 + + Reward Token + + + Reward to be funded + + src/app/components/award/components/award-mint/award-mint.component.html + 43 + + Reward to be funded + + + Confirm & Start + + src/app/components/award/components/award-mint/award-mint.component.html + 98,99 + + Confirm & Start + + + Once you agree with the terms, the generated address will remain active during the whole process. + + src/app/components/award/components/award-mint/award-mint.component.html + 105,107 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 181,183 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 93,95 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 146,148 + + Once you agree with the terms, the generated address will remain active during the whole process. + + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + src/app/components/award/components/award-mint/award-mint.component.html + 120,121 + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + + Transaction history + + src/app/components/award/components/award-mint/award-mint.component.html + 159 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 252 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 246 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 134 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 176 + + + src/app/components/space/components/space-claim/space-claim.component.html + 113 + + + src/app/components/space/components/space-claim/space-claim.component.html + 135 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 122 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 144 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 207 + + + src/app/components/token/components/token-bid/token-bid.component.html + 212 + + + src/app/components/token/components/token-bid/token-bid.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 256 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 249 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 254 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 276 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 209 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 269 + + + src/app/components/token/components/token-stake/token-stake.component.html + 319 + + + src/app/components/token/components/token-stake/token-stake.component.html + 341 + + + src/app/components/token/components/token-vote/token-vote.component.html + 271 + + + src/app/components/token/components/token-vote/token-vote.component.html + 293 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 110 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 146 + + Transaction history + + + Transaction complete. Congratulations. + + src/app/components/award/components/award-mint/award-mint.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 271 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 235 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 277 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 294 + + Transaction complete. Congratulations. + + + Finish Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 191,192 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 289,290 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 281,282 + + Finish Mint + + + Funding info + + src/app/components/award/components/award-mint/award-mint.component.ts + 83 + + Funding info + + + Make transaction + + src/app/components/award/components/award-mint/award-mint.component.ts + 84 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 92 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 87 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 101 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 77 + + Make transaction + + + Wait for confirmation + + src/app/components/award/components/award-mint/award-mint.component.ts + 85 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 93 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 87 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 108 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 88 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 102 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 78 + + Wait for confirmation + + + Confirmed + + src/app/components/award/components/award-mint/award-mint.component.ts + 86 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 94 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 88 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 109 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 89 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 103 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 79 + + Confirmed + + + Payment received. + + src/app/components/award/components/award-mint/award-mint.component.ts + 141 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 150 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 196 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 136 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 136 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 145 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 155 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 140 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 159 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 157 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 131 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 224 + + Payment received. + + + Confirming transaction. + + src/app/components/award/components/award-mint/award-mint.component.ts + 158 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 167 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 213 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 164 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 185 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 153 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 153 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 162 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 172 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 157 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 176 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 174 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 148 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 241 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 208 + + Confirming transaction. + + + Transaction confirmed. + + src/app/components/award/components/award-mint/award-mint.component.ts + 167 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 176 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 222 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 173 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 194 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 162 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 162 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 171 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 181 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 166 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 185 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 183 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 157 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 250 + + Transaction confirmed. + + + Invalid amount received. Refunding transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 186 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 203 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 258 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 182 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 190 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 210 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 186 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 204 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 212 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 190 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 270 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 247 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 159 + + Invalid amount received. Refunding transaction... + + + Invalid transaction.You must gift storage deposit. + + src/app/components/award/components/award-mint/award-mint.component.ts + 209 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 218 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 281 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 206 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 205 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 213 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 225 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 209 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 227 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 227 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 206 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 293 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 262 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 175 + + Invalid transaction.You must gift storage deposit. + + + Invalid payment refunded. + + src/app/components/award/components/award-mint/award-mint.component.ts + 224 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 233 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 296 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 220 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 228 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 241 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 224 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 242 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 243 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 221 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 308 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 279 + + Invalid payment refunded. + + + Waiting for transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 300 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 321 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 442 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 290 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 313 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 311 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 316 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 306 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 348 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 327 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 319 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 350 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 336 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 415 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 398 + + Waiting for transaction... + + + Pending Funding + + + src/app/components/award/components/award-status/award-status.component.html + 5,6 + + Pending Funding + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 11,12 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 11,12 + + Avvisade + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 17 + + + src/app/pages/space/pages/awards/awards.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 32 + + Slutförda + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 571 + + Endast Space-medlemmar + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 558 + + Endast Space-väktare + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 29 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 584 + + Endast Space-medlemmar med utmärkelse + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 39 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 596 + + Minst en NFT från Samlingar + + + Specific members only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 53 + + Specific members only + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 28 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 95 + + + src/app/components/token/components/token-card/token-card.component.html + 70 + + Startar om + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 30 + + + src/app/components/countdown/countdown.component.html + 56 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 109 + + dagar + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 33 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 122 + + Startar idag + + + Collection is not yet migrated to the decentralized network. + + src/app/components/collection/components/collection-card/collection-card.component.html + 59 + + Collection is not yet migrated to the decentralized network. + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 76 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 612 + + Begränsad utgåva + + + Floor Price + + src/app/components/collection/components/collection-card/collection-card.component.html + 104 + + + src/app/pages/collection/pages/collection/collection.page.html + 203 + + Floor Price + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 56 + + Väntar på godkännande + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 66 + + + src/app/pages/space/pages/awards/awards.page.ts + 33 + + + src/app/pages/space/pages/collections/collections.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 33 + + Avvisad + + + Remaining + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 42 + + Remaining + + + NFTs + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 49 + + + src/app/pages/market/pages/market/market.page.ts + 14 + + + src/app/pages/market/pages/market/market.page.ts + 35 + + + src/app/pages/member/pages/member/member.page.ts + 67 + + NFTs + + + Mint collection on network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 3 + + Mint collection on network + + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 43,45 + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + + Unsold NFT's + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 60,61 + + Unsold NFT's + + + Decide what should happen with all NFTs that were not sold yet. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 67 + + Decide what should happen with all NFTs that were not sold yet. + + + Keep the same price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 76 + + Keep the same price + + + Take Ownership + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 86 + + Take Ownership + + + Set new price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 96 + + Set new price + + + Burn all unsold + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 103 + + Burn all unsold + + + Note that the collection ownership will be granted only to your profile. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 130,131 + + Note that the collection ownership will be granted only to your profile. + + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 141,143 + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 150 + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + + Confirm & Start minting + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 174,175 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 139,140 + + Confirm & Start minting + + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 196,198 + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + + remaining to make the transfer. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 171 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 90 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 132 + + + src/app/components/space/components/space-claim/space-claim.component.html + 78 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 87 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 140 + + + src/app/components/token/components/token-bid/token-bid.component.html + 170 + + + src/app/components/token/components/token-claim/token-claim.component.html + 199 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 194 + + + src/app/components/token/components/token-stake/token-stake.component.html + 279 + + + src/app/components/token/components/token-vote/token-vote.component.html + 209 + + remaining to make the transfer. + + + Expired + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 213 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 174 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 93 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 135 + + + src/app/components/space/components/space-claim/space-claim.component.html + 81 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 90 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 143 + + + src/app/components/token/components/token-bid/token-bid.component.html + 173 + + + src/app/components/token/components/token-claim/token-claim.component.html + 202 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 197 + + + src/app/components/token/components/token-stake/token-stake.component.html + 282 + + + src/app/components/token/components/token-vote/token-vote.component.html + 212 + + + src/app/pages/token/services/helper.service.ts + 204 + + Expired + + + NFT's from this collection are now being migrated. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 284,285 + + NFT's from this collection are now being migrated. + + + NFT's in collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 308,309 + + NFT's in collection + + + Total Storage Fee + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 318 + + Total Storage Fee + + + (NFTs Storage Fee + Collection Storage Fee) + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 319 + + (NFTs Storage Fee + Collection Storage Fee) + + + Select network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 91 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 86 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 100 + + Select network + + + Pending + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5,6 + + Väntande + + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 4 + + + src/app/pages/nft/pages/new/single/single.page.html + 352 + + Samling krävs. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 13 + + Välj Samling + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 83 + + Välj en Samling + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 114 + + + src/app/components/space/components/select-space/select-space.component.html + 114 + + Inga resultat för + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 20 + + Alla Samlingar + + + + + + + src/app/components/confirm-modal/confirm-modal.component.html + 48,50 + + + src/app/components/confirm-modal/confirm-modal.component.html + 51,53 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 246,251 + + + src/app/components/token/components/token-vote/token-vote.component.html + 46,47 + + + src/app/pages/collection/pages/collection/collection.page.html + 130,131 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 55,56 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 71,72 + + + + + Are you sure? + + src/app/components/confirm-modal/confirm-modal.component.ts + 30 + + Are you sure? + + + Close + + src/app/components/confirm-modal/confirm-modal.component.ts + 33 + + Close + + + Confirm + + src/app/components/confirm-modal/confirm-modal.component.ts + 34 + + + src/app/components/token/components/token-bid/token-bid.component.html + 146 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 170 + + + src/app/components/token/components/token-vote/token-vote.component.html + 181 + + Confirm + + + Connect wallet + + src/app/components/connect-wallet/connect-wallet.component.html + 7 + + Connect wallet + + + d + + src/app/components/countdown/countdown.component.html + 55 + + d + + + h + + src/app/components/countdown/countdown.component.html + 68 + + h + + + hours + + src/app/components/countdown/countdown.component.html + 69 + + hours + + + m + + src/app/components/countdown/countdown.component.html + 81 + + m + + + min + + src/app/components/countdown/countdown.component.html + 82 + + min + + + s + + src/app/components/countdown/countdown.component.html + 94 + + s + + + sec + + src/app/components/countdown/countdown.component.html + 95 + + sec + + + Ends + + src/app/components/date-tag/date-tag.component.ts + 11 + + Ends + + + Price + + src/app/components/iota-input/iota-input.component.html + 3 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 139 + + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 81 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 19 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 124 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 49 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 75 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 37 + + + src/app/pages/token/pages/trade/trade.page.html + 209 + + + src/app/pages/token/pages/trade/trade.page.html + 283 + + + src/app/pages/token/pages/trade/trade.page.html + 372 + + + src/app/pages/token/pages/trade/trade.page.html + 659 + + + src/app/pages/token/pages/trade/trade.page.html + 846 + + Pris + + + Verified addresses + + src/app/components/member/components/member-about/member-about.component.html + 90 + + Verified addresses + + + Manage + + src/app/components/member/components/member-about/member-about.component.html + 96 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 297 + + + src/app/pages/space/pages/space/space.page.ts + 53 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 18 + + Manage + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 119 + + Nyligen anslutna Spaces + + + All + + src/app/components/member/components/member-about/member-about.component.html + 124 + + Alla + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 155 + + Inget bidrag ännu. + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 74 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 22 + + belöningar + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 14 + + Visningsnamn + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19 + + Ange ett visningsnamn. Detta ändrar inte ditt användarnamn. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 26 + + Visningsnamn (valfritt) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 36 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 208 + + + src/app/pages/space/pages/space/space.page.ts + 44 + + Om + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 41 + + En kort beskrivning av dig själv som visas på din profil. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 48 + + Din beskrivning (valfritt) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 57 + + + src/app/pages/space/pages/upsert/upsert.page.html + 166 + + Profilbild + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 62 + + Anpassa din Soonaverse identitet. + + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,78 + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 92 + + WOW! Ser ut som din är den vackraste avataren av alla. Grattis. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 97 + + + src/app/pages/space/pages/upsert/upsert.page.html + 54 + + Nätverkar + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 99 + + + src/app/pages/space/pages/upsert/upsert.page.html + 61 + + Felaktigt användarnamn på Github. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 105 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67 + + Ange ditt användarnamn på Github + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 117 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 177 + + + src/app/pages/space/pages/upsert/upsert.page.html + 78 + + Felaktigt användarnamn på Twitter. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 123 + + + src/app/pages/space/pages/upsert/upsert.page.html + 84 + + Ange ditt användarnamn på Twitter + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 135 + + Endast användarnamn#1234 format stöds. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 141 + + Ange ditt användarnamn på Discord + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 155 + + Inställningar + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 157,158 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 123,124 + + Spara ändringar + + + + + + + src/app/components/network/components/select-network/select-network.component.html + 4,6 + + + + + + Shimmer + + src/app/components/network/components/select-network/select-network.component.html + 17 + + + src/app/components/network/components/select-network/select-network.component.html + 28 + + + src/app/components/network/components/selected-network/selected-network.component.html + 11 + + + src/app/pages/award/pages/award/award.page.html + 44 + + + src/app/pages/collection/pages/collection/collection.page.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 575 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 169 + + Shimmer + + + IOTA + + src/app/components/network/components/select-network/select-network.component.html + 45 + + + src/app/components/network/components/select-network/select-network.component.html + 56 + + + src/app/components/network/components/selected-network/selected-network.component.html + 19 + + + src/app/pages/award/pages/award/award.page.html + 52 + + + src/app/pages/collection/pages/collection/collection.page.html + 59 + + + src/app/pages/nft/pages/nft/nft.page.html + 583 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 177 + + IOTA + + + Selected Network + + src/app/components/network/components/selected-network/selected-network.component.html + 4,6 + + Selected Network + + + Shimmer Testnet + + src/app/components/network/components/selected-network/selected-network.component.html + 15 + + + src/app/pages/award/pages/award/award.page.html + 48 + + + src/app/pages/collection/pages/collection/collection.page.html + 55 + + + src/app/pages/nft/pages/nft/nft.page.html + 579 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 173 + + Shimmer Testnet + + + IOTA Devnet + + src/app/components/network/components/selected-network/selected-network.component.html + 23 + + + src/app/pages/award/pages/award/award.page.html + 56 + + + src/app/pages/collection/pages/collection/collection.page.html + 63 + + + src/app/pages/nft/pages/nft/nft.page.html + 587 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 181 + + IOTA Devnet + + + Send + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + Skicka + + + to following address: + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + to following address: + + + Copied + + src/app/components/network/components/send-funds/send-funds.component.html + 25 + + + src/app/components/share/share.component.html + 27 + + + src/app/components/wallet-address/wallet-address.component.html + 29 + + Kopierad + + + Copy + + src/app/components/network/components/send-funds/send-funds.component.html + 26 + + Kopiera + + + Do not send funds from an exchange, always use wallets you fully control. + + + src/app/components/network/components/send-funds/send-funds.component.html + 34,36 + + Do not send funds from an exchange, always use wallets you fully control. + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 3 + + Lämna ett bud + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 15 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 16 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 25 + + NFT-bild + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 38 + + Slutar + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 48 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 36 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46 + + Royalties + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 55 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 43 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 53 + + Royalties dras automatiskt av och betalas ut till konstnären. + + + Royalties goes to + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 73,74 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 61,62 + + Royalties goes to + + + + + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 75,76 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 63,64 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 262,263 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 188,189 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 264,265 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 306,307 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 344,345 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 45 + + + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 109 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Nuvarande högsta bud + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 111 + + + src/app/pages/nft/pages/nft/nft.page.html + 111 + + Lägsta bud + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 127 + + + src/app/pages/nft/pages/nft/nft.page.html + 116 + + Ditt bud är det högsta + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 172,173 + + Current price is refreshing in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 208,209 + + Addres för din önskade NFT kommer låsas för dig under hela auktionen. Efter betalning kommer ditt bud att vara låst, men om det finns ett högre bud kommer du att återbetalas omedelbart. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 216,218 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,257 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 321,323 + + Om det finns ett högre bud kommer du att återbetalas omedelbart. Om du vill lägga ett annat bud, skicka ett högre belopp direkt till samma address. + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 237,238 + + Lämna ett bud + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 278 + + Your transactions + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 286 + + Sändningsdatum + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 287 + + + src/app/pages/token/pages/trade/trade.page.html + 854 + + Tid + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 289 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 33 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 110 + + + src/app/pages/member/pages/tokens/tokens.page.html + 328 + + + src/app/pages/member/pages/transactions/transactions.page.html + 25 + + + src/app/pages/nft/pages/nft/nft.page.html + 323 + + + src/app/pages/nft/pages/nft/nft.page.html + 385 + + + src/app/pages/nft/pages/nft/nft.page.html + 435 + + + src/app/pages/token/pages/trade/trade.page.html + 200 + + + src/app/pages/token/pages/trade/trade.page.html + 274 + + + src/app/pages/token/pages/trade/trade.page.html + 363 + + + src/app/pages/token/pages/trade/trade.page.html + 664 + + + src/app/pages/token/pages/trade/trade.page.html + 851 + + Summa + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 55 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 96 + + Detaljer + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 311,310 + + + src/app/pages/nft/pages/nft/nft.page.html + 324 + + + src/app/pages/nft/pages/nft/nft.page.html + 360,359 + + + src/app/pages/nft/pages/nft/nft.page.html + 386 + + + src/app/pages/nft/pages/nft/nft.page.html + 410,409 + + + src/app/pages/nft/pages/nft/nft.page.html + 436 + + + src/app/pages/nft/pages/nft/nft.page.html + 460,459 + + Länk + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 345 + + Gratulerar! Du vann denna NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 357,358 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 283,284 + + + src/app/components/token/components/token-bid/token-bid.component.html + 271,272 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 313,314 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 306,307 + + + src/app/components/token/components/token-vote/token-vote.component.html + 330,331 + + Stäng kassan + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 368,369 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 294,295 + + Visa min NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 384 + + Bidding is expired. Good luck next time :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 272 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 459 + + Genererad NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 274 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 461 + + SFT + + + NFT is not yet migrated to the decentralized network. + + src/app/components/nft/components/nft-card/nft-card.component.html + 65 + + NFT is not yet migrated to the decentralized network. + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 118 + + dag + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 156 + + Aktuellt bud + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 191 + + + src/app/pages/nft/pages/nft/nft.page.html + 594 + + Ägs av + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 229,231 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 167 + + New NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 3 + + Checkout + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 74,75 + + Total price + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150,151 + + Confirm and Lock + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 156 + + Your NFT will be locked for purchase for + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + minutes + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 185 + + We received invalid amount. Try again. + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 237,238 + + Validating your transaction... + + + Order created. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 437 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 332 + + Order created. + + + Deposit NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 215 + + Deposit NFT + + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 46,48 + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + + Confirm & Start deposit + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 76,77 + + Confirm & Start deposit + + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 113,115 + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + + NFT has been deposited. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 165 + + NFT has been deposited. + + + See NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 169,170 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 211,212 + + See NFT + + + Terms & Conditions + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 85 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 106 + + Terms & Conditions + + + Send NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 86 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 107 + + Send NFT + + + NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 147 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 168 + + NFT received. + + + Invalid NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 191 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 212 + + Invalid NFT received. + + + Invalid NFT refunded. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 205 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 226 + + Invalid NFT refunded. + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 19 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 37 + + Preview + + + Sale Starts + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 57 + + + src/app/pages/nft/services/helper.service.ts + 142 + + Sale Starts + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 60 + + + src/app/pages/nft/pages/nft/nft.page.html + 70 + + Current price + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 80 + + Author + + + System info + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 119 + + + src/app/pages/nft/pages/nft/nft.page.html + 634 + + System info + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 130 + + + src/app/pages/nft/pages/nft/nft.page.html + 654 + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + + Properties + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 135 + + + src/app/pages/nft/pages/new/single/single.page.html + 90 + + Properties + + + Stats + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 139 + + + src/app/pages/nft/pages/new/single/single.page.html + 193,192 + + Stats + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149 + + + src/app/pages/nft/pages/new/single/single.page.html + 301 + + + src/app/pages/nft/pages/nft/nft.page.html + 27 + + NFT Image + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + IPFS Metadata + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + IPFS Image + + + Available once minted... + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 64 + + + src/app/pages/nft/pages/nft/nft.page.ts + 81 + + Available once minted... + + + Set your floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 6,7 + + Set your floor price + + + Available time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 42,43 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 42,43 + + Available time + + + NOW + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 54,55 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 54,55 + + NOW + + + Select Date/Time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Select Date/Time + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 71 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 71 + + + src/app/pages/nft/pages/new/single/single.page.html + 69 + + Available On is required. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 80 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 80 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 70 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 81 + + + src/app/pages/nft/pages/new/single/single.page.html + 68 + + + src/app/pages/nft/pages/new/single/single.page.html + 79 + + Available on + + + Auction length + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 91,92 + + Auction length + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 98 + + Various auction length coming next sprint once community have a vote! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 115 + + Duration of auction is 3 days + + + Auction can't be canceled after start date + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 125 + + Auction can't be canceled after start date + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 129 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 145 + + Once your listing is complete, you will get a confirmation message. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 138,139 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 154,155 + + Confirm listing + + + Set your price + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 6,7 + + Set your price + + + Sale type + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Sale type + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 103,104 + + Open Sale + + + Specific member(s) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 113,114 + + Specific member(s) + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2 + + + src/app/pages/token/pages/trade/trade.page.html + 110 + + Trade history + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 8,10 + + Item is yours and yours only + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 16 + + This will make your item unavailable for sale. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 17 + + Stoppa försäljning! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 15 + + Lista objekt till försäljning + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 80 + + Ej till salu + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 88 + + + src/app/pages/token/services/new.service.ts + 29 + + Fast pris + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 96 + + Auktion + + + Stake NFT + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 221 + + Stake NFT + + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 46,48 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 147,149 + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + + For how long you want to stake? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 56,57 + + + src/app/components/token/components/token-stake/token-stake.component.html + 174,175 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 57,58 + + For how long you want to stake? + + + Stake type? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 77,78 + + Stake type? + + + Confirm & Start Stake + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 118,119 + + Confirm & Start Stake + + + NFT has been staked. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 207 + + NFT has been staked. + + + Dynamic + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 76 + + Dynamic + + + Static + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 80 + + Static + + + More + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 97,98 + + More + + + Pending + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 6,7 + + + src/app/pages/token/pages/token/token.page.html + 36 + + + src/app/pages/token/pages/trade/trade.page.html + 524 + + Pending + + + Rejected + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 12,13 + + + src/app/pages/token/pages/token/token.page.html + 42 + + Rejected + + + Commencing + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 18,19 + + Commencing + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 24,25 + + Pågående + + + Completed + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 31,32 + + Completed + + + Share + + src/app/components/share/share.component.html + 16 + + + src/app/components/share/share.component.html + 39 + + + src/app/pages/token/pages/trade/trade.page.html + 64 + + + src/app/pages/token/pages/trade/trade.page.html + 635,634 + + Dela + + + Copy to clipboard + + src/app/components/share/share.component.html + 28 + + Kopiera till urklipp + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 4 + + + src/app/pages/award/pages/new/new.page.html + 121 + + + src/app/pages/proposal/pages/new/new.page.html + 211 + + Space krävs. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 13 + + Välj Space + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 83 + + + src/app/pages/award/pages/new/new.page.html + 152 + + + src/app/pages/proposal/pages/new/new.page.html + 242 + + Välj ett space + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 20 + + Alla Spaces + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 19,20 + + Joined + + + members + + src/app/components/space/components/space-card/space-card.component.html + 44 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 23 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + medlemmar + + + Space Claim + + src/app/components/space/components/space-claim/space-claim.component.html + 3 + + Space Claim + + + Confirm and generate address + + src/app/components/space/components/space-claim/space-claim.component.html + 54,55 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 52,53 + + + src/app/components/token/components/token-claim/token-claim.component.html + 138,139 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 96,97 + + + src/app/components/token/components/token-stake/token-stake.component.html + 251,252 + + Confirm and generate address + + + Claim complete. Congratulations. + + src/app/components/space/components/space-claim/space-claim.component.html + 160 + + + src/app/components/token/components/token-claim/token-claim.component.html + 281 + + Claim complete. Congratulations. + + + Close + + src/app/components/space/components/space-claim/space-claim.component.html + 172,173 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 181,182 + + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 29,30 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 79,80 + + + src/app/components/token/components/token-claim/token-claim.component.html + 293,294 + + + src/app/components/token/components/token-stake/token-stake.component.html + 378,379 + + Close + + + Invalid amount or invalid senders address. Refunding transaction... + + src/app/components/space/components/space-claim/space-claim.component.ts + 183 + + Invalid amount or invalid senders address. Refunding transaction... + + + Funds refunded. + + src/app/components/space/components/space-claim/space-claim.component.ts + 222 + + Funds refunded. + + + Space claim submitted. + + src/app/components/space/components/space-claim/space-claim.component.ts + 306 + + Space claim submitted. + + + Token Reward Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 16 + + Token Reward Schedule + + + Existing Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 29 + + Existing Schedule + + + Upload New + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 37 + + Upload New + + + Vault address: + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 55,64 + + Vault address: + + + Schedule a new Reward + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 82,83 + + Schedule a new Reward + + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 93,95 + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + + Start Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 148 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 24 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 24 + + Start Date + + + End Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 149 + + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 14 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 25 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 25 + + End Date + + + Vesting Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 150 + + Vesting Date + + + Tokens to Distribute + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 151 + + Tokens to Distribute + + + Status + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 152 + + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 110,109 + + + src/app/pages/token/pages/trade/trade.page.html + 376 + + Status + + + Proposal created to remove the reward. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 154 + + Proposal created to remove the reward. + + + By checking this box, you agree with + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 12 + + Genom att markera den här rutan godkänner du + + + Terms and Conditions + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 13 + + Användarvillkor + + + Timeline + + src/app/components/timeline/timeline.component.html + 2 + + + src/app/components/timeline/timeline.component.html + 8 + + Timeline + + + Earned Badge + + src/app/components/timeline/timeline.component.html + 66 + + Earned Badge + + + with + + src/app/components/timeline/timeline.component.html + 66 + + with + + + Listed by + + src/app/components/timeline/timeline.component.html + 109 + + Listed by + + + Made available for auction by + + src/app/components/timeline/timeline.component.html + 112 + + Made available for auction by + + + Purchased by + + src/app/components/timeline/timeline.component.html + 170 + + Purchased by + + + See + + src/app/components/timeline/timeline.component.html + 181 + + See + + + Hide + + src/app/components/timeline/timeline.component.html + 182 + + Hide + + + Listed by space + + src/app/components/timeline/timeline.component.html + 287 + + Listed by space + + + Refund blocked funds + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 3 + + Refund blocked funds + + + Total available tokens to refund + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 29 + + Total available tokens to refund + + + Refund complete. Congratulations. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 169 + + Refund complete. Congratulations. + + + Credit refund submitted. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 309 + + Credit refund submitted. + + + Airdrop tokens on the network + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 3 + + Airdrop tokens on the network + + + Tokens to airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 56,57 + + Tokens to airdrop + + + Confirm & Start Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 86,87 + + Confirm & Start Airdrop + + + Tokens to Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 120,121 + + Tokens to Airdrop + + + Finish Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 239,240 + + Finish Airdrop + + + Detail + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 60,61 + + Detail + + + Trade + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 70,71 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 201,202 + + Trade + + + Price (USD) + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 101 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 145 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 86 + + Price (USD) + + + 24h Change + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 126,127 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 115,116 + + 24h Change + + + 24h Volume + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 154 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 146 + + 24h Volume + + + M. Cap + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 172 + + M. Cap + + + Open buy order + + src/app/components/token/components/token-bid/token-bid.component.html + 3 + + Open buy order + + + Summary + + src/app/components/token/components/token-bid/token-bid.component.html + 29,30 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 39,40 + + + src/app/components/token/components/token-offer/token-offer.component.html + 46,47 + + Summary + + + Token amount to buy + + src/app/components/token/components/token-bid/token-bid.component.html + 34,35 + + Token amount to buy + + + Offered price per token + + src/app/components/token/components/token-bid/token-bid.component.html + 44,45 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 44,45 + + + src/app/components/token/components/token-offer/token-offer.component.html + 51,52 + + Offered price per token + + + Token amount to send + + src/app/components/token/components/token-bid/token-bid.component.html + 73,74 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 117,118 + + Token amount to send + + + ~ + + src/app/components/token/components/token-bid/token-bid.component.html + 89,98 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 60,69 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 90,99 + + + src/app/pages/token/pages/trade/trade.page.html + 553,556 + + ~ + + + I agree with + + src/app/components/token/components/token-bid/token-bid.component.html + 129 + + + src/app/components/token/components/token-claim/token-claim.component.html + 115 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 153 + + + src/app/components/token/components/token-offer/token-offer.component.html + 133 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 78 + + + src/app/components/token/components/token-refund/token-refund.component.html + 65 + + I agree with + + + Token terms and Conditions + + src/app/components/token/components/token-bid/token-bid.component.html + 131 + + + src/app/components/token/components/token-claim/token-claim.component.html + 117 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 155 + + + src/app/components/token/components/token-offer/token-offer.component.html + 135 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 80 + + + src/app/components/token/components/token-refund/token-refund.component.html + 67 + + Token terms and Conditions + + + and generate address + + src/app/components/token/components/token-bid/token-bid.component.html + 147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 171 + + + src/app/components/token/components/token-vote/token-vote.component.html + 182 + + and generate address + + + Once you agree with the terms, the generated address will remain active during the whole sale. + + src/app/components/token/components/token-bid/token-bid.component.html + 154,155 + + + src/app/components/token/components/token-claim/token-claim.component.html + 146,147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 178,179 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 103,104 + + Once you agree with the terms, the generated address will remain active during the whole sale. + + + Buy complete. Congratulations. + + src/app/components/token/components/token-bid/token-bid.component.html + 259 + + Buy complete. Congratulations. + + + Bid created. + + src/app/components/token/components/token-bid/token-bid.component.ts + 344 + + Bid created. + + + Are you sure you want to cancel the sale? + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 17 + + Are you sure you want to cancel the sale? + + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 23,25 + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + + Cancel sale + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 32,33 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 74,75 + + Cancel sale + + + Canceled public sale. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts + 56 + + Canceled public sale. + + + Total () + + src/app/components/token/components/token-cancel/token-cancel.component.html + 51,52 + + Total () + + + Are you sure you want to cancel your buy order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 66 + + Are you sure you want to cancel your buy order? + + + Are you sure you want to cancel your sell order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 69 + + Are you sure you want to cancel your sell order? + + + Confirm + + src/app/components/token/components/token-cancel/token-cancel.component.html + 76,77 + + Confirm + + + Cancelled. + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 48 + + + src/app/pages/token/pages/trade/trade.page.ts + 589 + + Cancelled. + + + Cancel your buy + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 80 + + Cancel your buy + + + Cancel your sell + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 81 + + Cancel your sell + + + Ongoing sale + + src/app/components/token/components/token-card/token-card.component.html + 22 + + Ongoing sale + + + Sale ends soon + + src/app/components/token/components/token-card/token-card.component.html + 23 + + Sale ends soon + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 24 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 21 + + Cooldown ends + + + Sale starts + + src/app/components/token/components/token-card/token-card.component.html + 55,57 + + Sale starts + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 115,117 + + + src/app/components/token/components/token-card/token-card.component.html + 175,177 + + Sale ends + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 130 + + + src/app/components/token/components/token-card/token-card.component.html + 190 + + + src/app/components/token/components/token-card/token-card.component.html + 250 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 176 + + + src/app/components/token/components/token-row/token-row.component.html + 79 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 20 + + Sale ends + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 235,237 + + Cooldown ends + + + Token Claim + + src/app/components/token/components/token-claim/token-claim.component.html + 3 + + Token Claim + + + Total available tokens to claim as of today + + src/app/components/token/components/token-claim/token-claim.component.html + 42 + + + src/app/components/token/components/token-claim/token-claim.component.html + 56 + + Total available tokens to claim as of today + + + Tokens available from + + src/app/components/token/components/token-claim/token-claim.component.html + 76 + + Tokens available from + + + Total tokens to claim + + src/app/components/token/components/token-claim/token-claim.component.html + 84 + + Total tokens to claim + + + Token claim submitted. + + src/app/components/token/components/token-claim/token-claim.component.ts + 320 + + Token claim submitted. + + + Guardian's of the space will be able to decide where this token will be minted. + + src/app/components/token/components/token-info/token-info-description.component.html + 41 + + Guardian's of the space will be able to decide where this token will be minted. + + + Icon + + src/app/components/token/components/token-info/token-info-description.component.ts + 25 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 24 + + Icon + + + Name + + src/app/components/token/components/token-info/token-info-description.component.ts + 26 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 25 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 31,30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 74 + + + src/app/pages/nft/pages/new/single/single.page.html + 21 + + + src/app/pages/nft/pages/new/single/single.page.html + 27,26 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 15 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 21,20 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 25 + + Name + + + Symbol + + src/app/components/token/components/token-info/token-info-description.component.ts + 27 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 30 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 39,38 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 26 + + Symbol + + + Launchpad Price + + src/app/components/token/components/token-info/token-info-description.component.ts + 28 + + Launchpad Price + + + Network + + src/app/components/token/components/token-info/token-info-description.component.ts + 29 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 20 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 5,4 + + + src/app/pages/nft/pages/nft/nft.page.html + 542 + + + src/app/pages/nft/pages/nft/nft.page.html + 564 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 119 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 160 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 28 + + Network + + + Total supply + + src/app/components/token/components/token-info/token-info-description.component.ts + 30 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 29 + + Total supply + + + Current distribution + + src/app/components/token/components/token-info/token-info-description.component.ts + 31 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 30 + + Current distribution + + + Type + + src/app/components/token/components/token-info/token-info-description.component.ts + 32 + + + src/app/pages/member/pages/tokens/tokens.page.html + 58 + + + src/app/pages/member/pages/tokens/tokens.page.html + 325 + + + src/app/pages/member/pages/transactions/transactions.page.html + 24 + + + src/app/pages/nft/pages/nft/nft.page.html + 384 + + + src/app/pages/nft/pages/nft/nft.page.html + 434 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 31 + + + src/app/pages/token/pages/trade/trade.page.html + 361 + + Type + + + Coming soon + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 91,92 + + Coming soon + + + In Cooldown + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 98,99 + + + src/app/components/token/components/token-row/token-row.component.html + 245,246 + + In Cooldown + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 108,109 + + + src/app/components/token/components/token-row/token-row.component.html + 256,257 + + + src/app/pages/token/pages/trade/trade.page.html + 456 + + + src/app/pages/token/pages/trade/trade.page.html + 467 + + + src/app/pages/token/pages/trade/trade.page.html + 909,910 + + Buy + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 116 + + + src/app/pages/token/pages/trade/trade.page.html + 387 + + + src/app/pages/token/pages/trade/trade.page.html + 1210 + + Buy + + + Sale starts + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 167 + + + src/app/components/token/components/token-row/token-row.component.html + 70 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 19 + + Sale starts + + + Cooldown period ends + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 187,188 + + + src/app/components/token/components/token-row/token-row.component.html + 90,91 + + Cooldown period ends + + + Mint token on network + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 3 + + Mint token on network + + + Public sale will no longer be available after bringing token to a network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 45,46 + + Public sale will no longer be available after bringing token to a network. + + + Once minted all owners will have the option to migrate their tokens to the selected network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 56,58 + + Once minted all owners will have the option to migrate their tokens to the selected network. + + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 68,70 + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + + Tokens to migrate + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 92,93 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 173,174 + + Tokens to migrate + + + Locked public tokens + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 107,108 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 189,190 + + Locked public tokens + + + Open sale order + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 3 + + Open sale order + + + Token ID + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 30,31 + + + src/app/components/token/components/token-offer/token-offer.component.html + 27,28 + + Token ID + + + You will receive + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 74,75 + + + src/app/components/token/components/token-offer/token-offer.component.html + 73,74 + + + src/app/pages/token/pages/trade/trade.page.html + 1132,1133 + + You will receive + + + Fee + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 103 + + + src/app/components/token/components/token-offer/token-offer.component.html + 101 + + + src/app/pages/token/pages/trade/trade.page.html + 1172 + + Fee + + + No FEES! + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 110,111 + + + src/app/components/token/components/token-offer/token-offer.component.html + 108,109 + + + src/app/pages/token/pages/trade/trade.page.html + 1188,1189 + + No FEES! + + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 232,234 + + + src/app/components/token/components/token-vote/token-vote.component.html + 249,251 + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + + Sell complete. Congratulations. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 301 + + + src/app/components/token/components/token-vote/token-vote.component.html + 318 + + Sell complete. Congratulations. + + + Offer order created. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 346 + + Offer order created. + + + Open Token Sell + + src/app/components/token/components/token-offer/token-offer.component.html + 3 + + Open Token Sell + + + Your Balance + + src/app/components/token/components/token-offer/token-offer.component.html + 35,36 + + Your Balance + + + Offered amount of tokens + + src/app/components/token/components/token-offer/token-offer.component.html + 64,65 + + Offered amount of tokens + + + Create a Sell Order + + src/app/components/token/components/token-offer/token-offer.component.html + 151,152 + + Create a Sell Order + + + Offer created. + + src/app/components/token/components/token-offer/token-offer.component.ts + 102 + + Offer created. + + + Public sale info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 4 + + Public sale info + + + Start date is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 7 + + Start date is required. + + + Start date for the token offering + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 16 + + Start date for the token offering + + + Offering length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 23 + + Offering length is required. + + + Select token offering length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 48 + + Select token offering length (Default 2 days) + + + Token allocation info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 63 + + Token allocation info + + + Sale Setup + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 81 + + Sale Setup + + + Enable Cooldown period + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 87,88 + + Enable Cooldown period + + + Enable Cooldown with refund option. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 98,99 + + Enable Cooldown with refund option. + + + Cooldown period length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 103 + + Cooldown period length is required. + + + Select token cooldown length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 129 + + Select token cooldown length (Default 2 days) + + + No Cooldown. Participants can’t refund. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 149,150 + + No Cooldown. Participants can’t refund. + + + Enable Oversale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 160,161 + + Enable Oversale + + + No Oversale. Sale ends with 100% reached. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 171,172 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 54,55 + + No Oversale. Sale ends with 100% reached. + + + Sale continues after 100% reached + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 179,180 + + Sale continues after 100% reached + + + Confirm and schedule sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 195,196 + + Confirm and schedule sale + + + Price per token + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 106 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 34 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 42 + + Price per token + + + Public sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 135 + + + src/app/pages/token/pages/new/summary/summary.component.html + 214 + + Public sale + + + Purchase token + + src/app/components/token/components/token-purchase/token-purchase.component.html + 3 + + Purchase token + + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 113 + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + + Enter how much you want to spend. Amount of tokens will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 116 + + Enter how much you want to spend. Amount of tokens will be calculated. + + + Purchased tokens + + src/app/components/token/components/token-purchase/token-purchase.component.html + 243,244 + + Purchased tokens + + + Price + + src/app/components/token/components/token-purchase/token-purchase.component.html + 260,261 + + Price + + + Cooldown period ends + + src/app/components/token/components/token-refund/token-refund.component.html + 23 + + Cooldown period ends + + + Confirm and refund + + src/app/components/token/components/token-refund/token-refund.component.html + 82,83 + + Confirm and refund + + + Refund token + + src/app/components/token/components/token-refund/token-refund.component.ts + 61 + + Refund token + + + Initial Price + + src/app/components/token/components/token-row/token-row.component.html + 39 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 27 + + Initial Price + + + Avg. Price + + src/app/components/token/components/token-row/token-row.component.html + 47 + + Avg. Price + + + Change (24h) + + src/app/components/token/components/token-row/token-row.component.html + 107,108 + + Change (24h) + + + Volume 24h + + src/app/components/token/components/token-row/token-row.component.html + 150 + + Volume 24h + + + Market Cap + + src/app/components/token/components/token-row/token-row.component.html + 166 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 169 + + + src/app/pages/token/pages/trade/trade.page.html + 582 + + Market Cap + + + Claim + + src/app/components/token/components/token-row/token-row.component.html + 210,211 + + Claim + + + Refund + + src/app/components/token/components/token-row/token-row.component.html + 222,223 + + Refund + + + Launching soon + + src/app/components/token/components/token-row/token-row.component.html + 238,239 + + Launching soon + + + Buy / Sell + + src/app/components/token/components/token-row/token-row.component.html + 259,260 + + Buy / Sell + + + Stake your token + + src/app/components/token/components/token-stake/token-stake.component.html + 3 + + Stake your token + + + Select or define the amount you want to stake and the period for how long you want to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 13,15 + + Select or define the amount you want to stake and the period for how long you want to lock it. + + + Since you are a guardian you can also + + src/app/components/token/components/token-stake/token-stake.component.html + 17 + + Since you are a guardian you can also + + + - Choose an amount and for how long you’d like to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 50 + + - Choose an amount and for how long you’d like to lock it. + + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + src/app/components/token/components/token-stake/token-stake.component.html + 52,54 + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + + - You will get staked points based on your input. + + src/app/components/token/components/token-stake/token-stake.component.html + 56,57 + + - You will get staked points based on your input. + + + See Staking reward page for more info + + src/app/components/token/components/token-stake/token-stake.component.html + 62 + + See Staking reward page for more info + + + here. + + src/app/components/token/components/token-stake/token-stake.component.html + 63 + + here. + + + How it works + + src/app/components/token/components/token-stake/token-stake.component.html + 71 + + How it works + + + How much you want to stake? + + src/app/components/token/components/token-stake/token-stake.component.html + 87,88 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 21,22 + + How much you want to stake? + + + Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 192 + + Rewards Multiplier + + + Staking Value + + src/app/components/token/components/token-stake/token-stake.component.html + 210,219 + + Staking Value + + + Staked amount * Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 216 + + + src/app/pages/member/pages/activity/activity.page.html + 36 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 107 + + Staked amount * Rewards Multiplier + + + You will earn + + src/app/components/token/components/token-stake/token-stake.component.html + 230 + + You will earn + + + Stake complete. Congratulations. + + src/app/components/token/components/token-stake/token-stake.component.html + 366 + + Stake complete. Congratulations. + + + Token stake submitted. + + src/app/components/token/components/token-stake/token-stake.component.ts + 410 + + Token stake submitted. + + + Trade details + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 3 + + Trade details + + + Traded amount + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 29,30 + + Traded amount + + + Price per token + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 48,49 + + + src/app/pages/token/pages/new/summary/summary.component.html + 69,70 + + Price per token + + + Date and Time + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 79,80 + + Date and Time + + + Fullfilled + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 94,95 + + Fullfilled + + + Date + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 109 + + + src/app/pages/member/pages/transactions/transactions.page.html + 22 + + + src/app/pages/nft/pages/nft/nft.page.html + 383 + + + src/app/pages/nft/pages/nft/nft.page.html + 433 + + + src/app/pages/proposal/pages/votes/votes.page.html + 15 + + + src/app/pages/token/pages/trade/trade.page.html + 198 + + + src/app/pages/token/pages/trade/trade.page.html + 272 + + + src/app/pages/token/pages/trade/trade.page.html + 360 + + Date + + + State + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 111 + + State + + + Storage deposit fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 144 + + Storage deposit fee + + + Fullfilment + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 171 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 252 + + Fullfilment + + + Seller + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 176 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 247 + + Seller + + + Transaction + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 204 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 280 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 314 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 358 + + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 41 + + + src/app/pages/member/pages/transactions/transactions.page.html + 74 + + Transaction + + + Non Transferable + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 153 + + + src/app/pages/member/pages/transactions/transactions.page.html + 77 + + Non Transferable + + + Processing... + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 155 + + + src/app/pages/member/pages/transactions/transactions.page.html + 87 + + Processing... + + + Soonaverse Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 170 + + Soonaverse Fee + + + Exchange Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 172 + + Exchange Fee + + + 24h change/Price + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 46 + + 24h change/Price + + + Markets + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 6 + + + src/app/pages/token/pages/trade/trade.page.html + 1242 + + Markets + + + No Tokens + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 38,39 + + + src/app/pages/tokens/pages/favourites/favourites.page.html + 25,26 + + No Tokens + + + Cast Vote + + src/app/components/token/components/token-vote/token-vote.component.html + 3 + + Cast Vote + + + Question + + src/app/components/token/components/token-vote/token-vote.component.html + 16,17 + + Question + + + Selected option + + src/app/components/token/components/token-vote/token-vote.component.html + 23,24 + + Selected option + + + How do you set your votes? + + src/app/components/token/components/token-vote/token-vote.component.html + 33,34 + + How do you set your votes? + + + Total native tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 88,89 + + Total native tokens + + + Total staked tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 105,106 + + Total staked tokens + + + Voting is active on + + src/app/components/token/components/token-vote/token-vote.component.html + 119,120 + + Voting is active on + + + Your total voting weight + + src/app/components/token/components/token-vote/token-vote.component.html + 131,132 + + Your total voting weight + + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + src/app/components/token/components/token-vote/token-vote.component.html + 151,153 + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + + Cast Votes + + src/app/components/token/components/token-vote/token-vote.component.html + 193 + + Cast Votes + + + Send Native Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 124 + + Send Native Tokens + + + Use Staked Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 128 + + Use Staked Tokens + + + Vote received. + + src/app/components/token/components/token-vote/token-vote.component.ts + 191 + + Vote received. + + + Transaction confirmed and funds refunded. + + src/app/components/token/components/token-vote/token-vote.component.ts + 217 + + Transaction confirmed and funds refunded. + + + Token vote executed. + + src/app/components/token/components/token-vote/token-vote.component.ts + 375 + + Token vote executed. + + + Token vote order created. + + src/app/components/token/components/token-vote/token-vote.component.ts + 392 + + Token vote order created. + + + Type + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 13,14 + + Type + + + Date + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 22,23 + + Date + + + Manage addresses + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 3 + + Manage addresses + + + Address + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 21 + + Address + + + Not yet verified + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 59 + + Not yet verified + + + Change + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 66 + + Change + + + Verify + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 67 + + Verify + + + You will be asked to send funds to the new + + src/app/components/wallet-address/verify-address/verify-address.component.html + 33 + + You will be asked to send funds to the new + + + address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/verify-address/verify-address.component.html + 36,37 + + address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/verify-address/verify-address.component.html + 41 + + space + + + profile + + src/app/components/wallet-address/verify-address/verify-address.component.html + 43 + + profile + + + for future transactions. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 44 + + for future transactions. + + + Generate new address + + src/app/components/wallet-address/verify-address/verify-address.component.html + 55,56 + + Generate new address + + + Send a small + + src/app/components/wallet-address/verify-address/verify-address.component.html + 66 + + Send a small + + + amount to validate your address. This expires in + + src/app/components/wallet-address/verify-address/verify-address.component.html + 67 + + amount to validate your address. This expires in + + + Expired. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 70 + + Expired. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/verify-address/verify-address.component.html + 106,107 + + Wait for transaction to be validated. We will send back your transaction once completed + + + Validating address... + + src/app/components/wallet-address/verify-address/verify-address.component.html + 136 + + Validating address... + + + Now you can deal with NFTs and participate in token trading. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 174 + + Now you can deal with NFTs and participate in token trading. + + + Your new address has been verified! + + src/app/components/wallet-address/verify-address/verify-address.component.html + 176 + + Your new address has been verified! + + + Finish Verification + + src/app/components/wallet-address/verify-address/verify-address.component.html + 181,182 + + Finish Verification + + + Generate address + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 76 + + Generate address + + + Refunding your payment... + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 192 + + Refunding your payment... + + + Address is not verified + + src/app/components/wallet-address/wallet-address.component.html + 4 + + Address is not verified + + + wallet + + src/app/components/wallet-address/wallet-address.component.html + 25 + + wallet + + + Copy address + + src/app/components/wallet-address/wallet-address.component.html + 30 + + Copy address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + Verify your + + + address + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + address + + + This network is currently not enabled. + + src/app/components/wallet-address/wallet-address.component.ts + 82 + + This network is currently not enabled. + + + Award Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Award Info + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 20 + + Owner + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 13 + + Badges used / available + + + Badge lock period (months) + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 15 + + Badge lock period (months) + + + Award info + + src/app/pages/award/pages/award/award.page.html + 3 + + + src/app/pages/award/pages/new/new.page.html + 17 + + Award info + + + Minted on: + + src/app/pages/award/pages/award/award.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 47 + + Minted on: + + + Fund Award + + src/app/pages/award/pages/award/award.page.html + 121,122 + + Fund Award + + + Minting in Progress + + src/app/pages/award/pages/award/award.page.html + 129,130 + + Minting in Progress + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 136 + + + src/app/pages/award/pages/award/award.page.html + 210 + + Check out award + + + Reject Award + + src/app/pages/award/pages/award/award.page.html + 157 + + Reject Award + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 166 + + Confirm your participation + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 174,176 + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 180 + + Provide description or link to your work. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 188 + + Submit + + + Cancel + + src/app/pages/award/pages/award/award.page.html + 189 + + + src/app/pages/token/pages/trade/trade.page.html + 245 + + + src/app/pages/token/pages/trade/trade.page.html + 333 + + Cancel + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 35 + + + src/app/pages/token/pages/new/new.page.ts + 34 + + + src/app/pages/token/pages/token/token.page.ts + 36 + + Overview + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 99 + + Participants + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2 + + New Award + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14 + + + src/app/pages/award/pages/new/new.page.html + 77 + + + src/app/pages/proposal/pages/new/new.page.html + 24 + + Title is required. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19 + + Title and description will be included on the Award. End date determines the duration of the Award. + + + Title + + src/app/pages/award/pages/new/new.page.html + 23 + + + src/app/pages/award/pages/new/new.page.html + 29,28 + + + src/app/pages/award/pages/new/new.page.html + 76 + + + src/app/pages/award/pages/new/new.page.html + 83,82 + + + src/app/pages/proposal/pages/new/new.page.html + 23 + + + src/app/pages/proposal/pages/new/new.page.html + 29,28 + + + src/app/pages/proposal/pages/new/new.page.html + 103 + + + src/app/pages/proposal/pages/new/new.page.html + 109,108 + + + src/app/pages/proposal/pages/new/new.page.html + 156 + + + src/app/pages/proposal/pages/new/new.page.html + 162,161 + + + src/app/pages/space/pages/upsert/upsert.page.html + 24 + + + src/app/pages/space/pages/upsert/upsert.page.html + 30,29 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 106 + + + src/app/pages/token/pages/new/overview/overview.component.html + 22 + + + src/app/pages/token/pages/new/overview/overview.component.html + 29,28 + + + src/app/pages/token/pages/new/overview/overview.component.html + 65 + + + src/app/pages/token/pages/new/overview/overview.component.html + 72,71 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 9 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 16,15 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 55 + + Title + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 24 + + You must enter name. + + + End + + src/app/pages/award/pages/new/new.page.html + 36 + + + src/app/pages/award/pages/new/new.page.html + 47,46 + + + src/app/pages/proposal/pages/new/new.page.html + 56 + + + src/app/pages/proposal/pages/new/new.page.html + 68,67 + + End + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 37 + + + src/app/pages/proposal/pages/new/new.page.html + 57 + + End Date is required. + + + Description + + src/app/pages/award/pages/new/new.page.html + 52 + + + src/app/pages/award/pages/new/new.page.html + 58 + + + src/app/pages/award/pages/new/new.page.html + 91 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 40 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 45 + + + src/app/pages/nft/pages/new/single/single.page.html + 33 + + + src/app/pages/nft/pages/new/single/single.page.html + 38 + + + src/app/pages/proposal/pages/new/new.page.html + 76 + + + src/app/pages/proposal/pages/new/new.page.html + 82 + + + src/app/pages/proposal/pages/new/new.page.html + 119 + + + src/app/pages/proposal/pages/new/new.page.html + 124 + + + src/app/pages/proposal/pages/new/new.page.html + 171 + + + src/app/pages/proposal/pages/new/new.page.html + 176 + + + src/app/pages/space/pages/upsert/upsert.page.html + 36 + + + src/app/pages/space/pages/upsert/upsert.page.html + 41 + + + src/app/pages/token/pages/new/overview/overview.component.html + 37 + + + src/app/pages/token/pages/new/overview/overview.component.html + 43 + + + src/app/pages/token/pages/new/overview/overview.component.html + 80 + + + src/app/pages/token/pages/new/overview/overview.component.html + 86 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 21 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 67 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 21 + + Description + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 69 + + Badge definition + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 71 + + Title and description will be included on the badge. + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 97 + + Badge description + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 115 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 370 + + + src/app/pages/proposal/pages/new/new.page.html + 205 + + Space Info + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 117 + + This is the space that will list the award. + + + Reward info + + src/app/pages/award/pages/new/new.page.html + 170 + + Reward info + + + You need to fund this award with native token. Select which token will be used as reward. + + src/app/pages/award/pages/new/new.page.html + 172 + + You need to fund this award with native token. Select which token will be used as reward. + + + Token is required. + + src/app/pages/award/pages/new/new.page.html + 176 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 247 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 325 + + Token is required. + + + Select a token + + src/app/pages/award/pages/new/new.page.html + 207 + + Select a token + + + Defines the amount of tokens for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 222,223 + + Defines the amount of tokens for each badge and the number of badges available. + + + Invalid token amount per badge + + src/app/pages/award/pages/new/new.page.html + 226 + + Invalid token amount per badge + + + Tokens per badge + + src/app/pages/award/pages/new/new.page.html + 234 + + Tokens per badge + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 251 + + + src/app/pages/award/pages/new/new.page.html + 338 + + Minimum 1 and maximum 10000. + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 273 + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + + Total to be funded + + src/app/pages/award/pages/new/new.page.html + 284,285 + + Total to be funded + + + Upload image that will be used as a Reward Badge. + + src/app/pages/award/pages/new/new.page.html + 299 + + Upload image that will be used as a Reward Badge. + + + Badge is required. + + src/app/pages/award/pages/new/new.page.html + 328,329 + + Badge is required. + + + Set the duration for which the badge will be locked in the Firefly wallet. + + src/app/pages/award/pages/new/new.page.html + 334,335 + + Set the duration for which the badge will be locked in the Firefly wallet. + + + Create award + + src/app/pages/award/pages/new/new.page.html + 369,370 + + Create award + + + Award - New + + src/app/pages/award/pages/new/new.page.ts + 119 + + + src/app/pages/award/pages/new/new.page.ts + 134 + + Award - New + + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/award/pages/new/new.page.ts + 120 + + + src/app/pages/award/pages/new/new.page.ts + 135 + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + + Member seems to log out during the file upload request. + + src/app/pages/award/pages/new/new.page.ts + 184 + + + src/app/pages/collection/pages/upsert/upsert.page.ts + 361 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 240 + + + src/app/pages/nft/pages/new/single/single.page.ts + 180 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 131 + + + src/app/pages/token/services/new.service.ts + 204 + + Member seems to log out during the file upload request. + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2 + + Award Description + + + Award - + + src/app/pages/award/pages/overview/overview.page.ts + 17 + + + src/app/pages/award/pages/participants/participants.page.ts + 83 + + Award - + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 49 + + + src/app/pages/award/pages/participants/participants.page.html + 63 + + + src/app/pages/proposal/pages/participants/participants.page.html + 49 + + + src/app/pages/proposal/pages/participants/participants.page.html + 63 + + Find Participant + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 72 + + + src/app/pages/proposal/pages/participants/participants.page.html + 72 + + + src/app/pages/space/pages/members/members.page.html + 92 + + Showing only few top records... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 90,91 + + + src/app/pages/proposal/pages/participants/participants.page.html + 90,91 + + No Participants + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 118,119 + + Reward + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 138,139 + + Reward again + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 50 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 158 + + + src/app/pages/space/pages/awards/awards.page.ts + 30 + + + src/app/pages/space/pages/collections/collections.page.ts + 30 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 30 + + Pending + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 51 + + Issued + + + See all participants within the award. + + src/app/pages/award/pages/participants/participants.page.ts + 84 + + + src/app/pages/proposal/pages/overview/overview.page.ts + 60 + + See all participants within the award. + + + applied on + + src/app/pages/award/pages/participants/participants.page.ts + 257 + + applied on + + + Make NFT’s from this collection available on decentralised network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 12,13 + + Make NFT’s from this collection available on decentralised network. + + + Minting + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 29 + + Minting + + + NFTs left + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 32 + + NFTs left + + + Collection is not yet migrated to the decentralized network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 47,48 + + Collection is not yet migrated to the decentralized network. + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 611 + + Who can buy? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 63,64 + + Open sale + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 76,77 + + Space Members Only + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89,90 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 102,103 + + Space Members with Badge Only + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 118,119 + + Must hold at least one NFT from each selected Collections + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 126,127 + + (One NFT per member) + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 175 + + Member discounts + + + discount for members with rewards from this space in total value of + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 190 + + discount for members with rewards from this space in total value of + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 5 + + About collection + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 22,23 + + Limited edition + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 81,82 + + + src/app/pages/collection/pages/collection/collection.page.html + 309,310 + + Publish Collection + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 93,94 + + + src/app/pages/collection/pages/collection/collection.page.html + 321,322 + + Edit Collection + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Royalties goes to + + + Rank + + src/app/pages/collection/pages/collection/collection.page.html + 166,167 + + + src/app/pages/token/pages/token/token.page.html + 69,70 + + Rank + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 185 + + Starts at + + + Deposited + + src/app/pages/collection/pages/collection/collection.page.html + 196 + + Deposited + + + Staked + + src/app/pages/collection/pages/collection/collection.page.html + 214 + + Staked + + + Links + + src/app/pages/collection/pages/collection/collection.page.html + 223 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 154,153 + + + src/app/pages/token/pages/new/overview/overview.component.html + 160,159 + + + src/app/pages/token/pages/new/summary/summary.component.html + 307,306 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 79 + + Links + + + Sale in progress + + src/app/pages/collection/pages/collection/collection.page.html + 269 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 64 + + Sale in progress + + + remaining + + src/app/pages/collection/pages/collection/collection.page.html + 271 + + + src/app/pages/nft/pages/nft/nft.page.html + 155 + + remaining + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 338 + + + src/app/pages/collection/pages/collection/collection.page.html + 384 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 354 + + + src/app/pages/collection/pages/collection/collection.page.html + 400 + + Cancel Collection + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 421 + + + src/app/pages/nft/pages/new/new.page.html + 2 + + Create NFT + + + Rank amount must be between + + src/app/pages/collection/pages/collection/collection.page.ts + 277 + + + src/app/pages/token/pages/token/token.page.ts + 195 + + Rank amount must be between + + + records + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 13 + + + src/app/pages/discover/pages/awards/awards.page.html + 13 + + + src/app/pages/discover/pages/members/members.page.html + 13 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 13 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 13 + + + src/app/pages/market/pages/collections/collections.page.html + 13 + + + src/app/pages/member/pages/nfts/nfts.page.html + 13 + + records + + + Filters&Sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 30 + + + src/app/pages/discover/pages/awards/awards.page.html + 30 + + + src/app/pages/discover/pages/members/members.page.html + 30 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 30 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 30 + + + src/app/pages/market/pages/collections/collections.page.html + 30 + + Filters&Sort + + + Filters&sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 71 + + + src/app/pages/discover/pages/awards/awards.page.html + 78 + + + src/app/pages/discover/pages/members/members.page.html + 78 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 78 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 79 + + + src/app/pages/market/pages/collections/collections.page.html + 79 + + Filters&sort + + + Sort by + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 93,92 + + + src/app/pages/discover/pages/awards/awards.page.html + 94,93 + + + src/app/pages/discover/pages/members/members.page.html + 94,93 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 94,93 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 95,94 + + + src/app/pages/market/pages/collections/collections.page.html + 95,94 + + Sort by + + + Price range + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 131 + + Price range + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2 + + Create new collection + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3 + + Edit collection + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18 + + Collection info + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20 + + Name and description will be included on the Collection. + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 58 + + + src/app/pages/nft/pages/new/single/single.page.html + 51 + + Sales info + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 60 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 90 + + Royalty + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 93,95 + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 106 + + Royalties - Percentage fee + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 116 + + Example: 10 % , 20 % , etc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 124 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 131 + + Royalties goes to a different space + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 155 + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 160 + + Invalid URL. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 167,166 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 312,311 + + + src/app/pages/token/pages/new/overview/overview.component.html + 175,174 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 91,90 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 183 + + Link to your Twitter account + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + Invalid Discord username. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 200 + + Link to your Discord account + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 215 + + Discounts + + + The discount applies only to members who have earned tokens from awards issued by this space. + + src/app/pages/collection/pages/upsert/upsert.page.html + 217 + + The discount applies only to members who have earned tokens from awards issued by this space. + + + Token amount higher than + + src/app/pages/collection/pages/upsert/upsert.page.html + 231 + + Token amount higher than + + + Select awarded token + + src/app/pages/collection/pages/upsert/upsert.page.html + 257 + + Select awarded token + + + Discount % + + src/app/pages/collection/pages/upsert/upsert.page.html + 271 + + Discount % + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 299 + + Discount + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 310 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 331,332 + + Discount Amount + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 357 + + Add discount level + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 372 + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 390 + + Collection Type + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 392 + + Each type has different characteristics. This cannot be changed after creation. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 424,423 + + + src/app/pages/space/pages/upsert/upsert.page.html + 200 + + Banner + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 454,455 + + Banner is required. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 464 + + Placeholder + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 494,495 + + Placeholder is required. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 504 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 517 + + + src/app/pages/market/pages/collections/collections.page.html + 177 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138 + + Category + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 506 + + Category is used when filtering content. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 510 + + Category. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 535 + + Collection Setup + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 537 + + Who has access to a given collection. + + + Open Sale + + src/app/pages/collection/pages/upsert/upsert.page.html + 546 + + Open Sale + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 552 + + Everyone has access to this collection. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 564 + + Only Space Guardians can access. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 577 + + Only Space Members can access. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 590 + + Only Space Members with badge can access. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 608 + + Collection Options + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 626 + + One NFT per Member Only + + + Select collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 651 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 147 + + + src/app/pages/nft/pages/new/single/single.page.html + 361 + + Select collection + + + Select award + + src/app/pages/collection/pages/upsert/upsert.page.html + 670 + + Select award + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 692,693 + + Create collection + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 705,706 + + Save collection + + + Check out collection + + src/app/pages/collection/services/helper.service.ts + 68 + + Check out collection + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 5 + + Pending Membership Requests + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 16 + + Your spaces + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 32,33 + + No Spaces yet + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 41,42 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 56 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 68 + + Active proposals + + + Spaces + + src/app/pages/discover/pages/awards/awards.page.html + 115,114 + + + src/app/pages/discover/pages/discover/discover.page.ts + 9 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 115,114 + + + src/app/pages/market/pages/collections/collections.page.html + 146,145 + + + src/app/pages/member/pages/member/member.page.ts + 65 + + Spaces + + + Discover - Awards + + src/app/pages/discover/pages/awards/awards.page.ts + 58 + + Discover - Awards + + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/discover/pages/awards/awards.page.ts + 59 + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + + Awards + + src/app/pages/discover/pages/discover/discover.page.ts + 10 + + + src/app/pages/member/pages/member/member.page.ts + 64 + + + src/app/pages/space/pages/space/space.page.ts + 47 + + Belöningar + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 11 + + + src/app/pages/space/pages/space/space.page.ts + 46 + + Proposals + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 12 + + + src/app/pages/space/pages/space/space.page.ts + 48 + + Members + + + Discover - Members + + src/app/pages/discover/pages/members/members.page.ts + 51 + + Discover - Members + + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + src/app/pages/discover/pages/members/members.page.ts + 52 + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + + Discover - Proposals + + src/app/pages/discover/pages/proposals/proposals.page.ts + 57 + + Discover - Proposals + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + src/app/pages/discover/pages/proposals/proposals.page.ts + 58 + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + + Discover - Spaces + + src/app/pages/discover/pages/spaces/spaces.page.ts + 54 + + Discover - Spaces + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/discover/pages/spaces/spaces.page.ts + 55 + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + + Sale type + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Sale type + + + Collections - NFT + + src/app/pages/market/pages/collections/collections.page.ts + 68 + + Collections - NFT + + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + src/app/pages/market/pages/collections/collections.page.ts + 69 + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + + NFT Collections + + src/app/pages/market/pages/market/market.page.html + 2 + + NFT Collections + + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/market/pages/market/market.page.html + 11,13 + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + + I understand + + src/app/pages/market/pages/market/market.page.html + 22,23 + + + src/app/pages/member/pages/tokens/tokens.page.html + 43,44 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 22,23 + + I understand + + + Collections + + src/app/pages/market/pages/market/market.page.ts + 13 + + + src/app/pages/market/pages/market/market.page.ts + 34 + + + src/app/pages/space/pages/space/space.page.ts + 45 + + Collections + + + Total staked + + src/app/pages/member/pages/activity/activity.page.html + 17,18 + + Total staked + + + Staking Value: + + src/app/pages/member/pages/activity/activity.page.html + 29,39 + + Staking Value: + + + Claimable Reward + + src/app/pages/member/pages/activity/activity.page.html + 47,48 + + Claimable Reward + + + Stake more + + src/app/pages/member/pages/activity/activity.page.html + 104,105 + + Stake more + + + Stake + + src/app/pages/member/pages/activity/activity.page.html + 107,108 + + Stake + + + My Staking + + src/app/pages/member/pages/activity/activity.page.html + 133 + + My Staking + + + until + + src/app/pages/member/pages/activity/activity.page.html + 138 + + until + + + My Favourites + + src/app/pages/member/pages/activity/activity.page.html + 152 + + My Favourites + + + View All + + src/app/pages/member/pages/activity/activity.page.html + 155 + + View All + + + Profile Options + + src/app/pages/member/pages/activity/activity.page.html + 172 + + Profile Options + + + Edit Profile + + src/app/pages/member/pages/activity/activity.page.html + 185 + + Edit Profile + + + Manage Addresses + + src/app/pages/member/pages/activity/activity.page.html + 191 + + + src/app/pages/space/pages/manage/manage.page.html + 27 + + Manage Addresses + + + Export All Transactions + + src/app/pages/member/pages/activity/activity.page.html + 202 + + Export All Transactions + + + Request Verification + + src/app/pages/member/pages/activity/activity.page.html + 227 + + + src/app/pages/space/pages/manage/manage.page.html + 85 + + Request Verification + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + Pending + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 18,19 + + Issued + + + No Awards + + src/app/pages/member/pages/awards/awards.page.html + 34,35 + + + src/app/pages/space/pages/awards/awards.page.html + 63,64 + + No Awards + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 44,45 + + Discover Awards + + + Reputation + + src/app/pages/member/pages/badges/badges.page.html + 2 + + + src/app/pages/member/pages/member/member.page.ts + 63 + + Reputation + + + Spaces + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Spaces + + + Awards + + src/app/pages/member/pages/badges/badges.page.html + 27,28 + + Awards + + + Total Rewards + + src/app/pages/member/pages/badges/badges.page.html + 33,34 + + Total Rewards + + + My profile + + src/app/pages/member/pages/member/member.page.html + 13 + + My profile + + + Profile + + src/app/pages/member/pages/member/member.page.html + 15 + + Profile + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 27,28 + + Profile info + + + Joined + + src/app/pages/member/pages/member/member.page.html + 49 + + Gick med + + + Member - + + src/app/pages/member/pages/member/member.page.ts + 83 + + Member - + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 145 + + Activity + + + Transactions + + src/app/pages/member/pages/member/member.page.ts + 147 + + + src/app/pages/member/pages/transactions/transactions.page.html + 18 + + Transactions + + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + src/app/pages/member/pages/nfts/nfts.page.html + 25,26 + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + + Deposit NFT + + src/app/pages/member/pages/nfts/nfts.page.html + 29,30 + + Deposit NFT + + + No NFTs + + src/app/pages/member/pages/nfts/nfts.page.html + 59,60 + + + src/app/pages/nft/pages/nft/nft.page.html + 744,745 + + No NFTs + + + Tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 11,12 + + Tokens + + + Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 20,21 + + Staking + + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + src/app/pages/member/pages/tokens/tokens.page.html + 32,34 + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + + Item + + src/app/pages/member/pages/tokens/tokens.page.html + 57 + + + src/app/pages/member/pages/tokens/tokens.page.html + 324 + + + src/app/pages/member/pages/transactions/transactions.page.html + 23 + + Item + + + Total + + src/app/pages/member/pages/tokens/tokens.page.html + 59 + + + src/app/pages/token/pages/trade/trade.page.html + 204 + + + src/app/pages/token/pages/trade/trade.page.html + 278 + + + src/app/pages/token/pages/trade/trade.page.html + 367 + + + src/app/pages/token/pages/trade/trade.page.html + 668 + + Total + + + Owned + + src/app/pages/member/pages/tokens/tokens.page.html + 87 + + + src/app/pages/member/pages/tokens/tokens.page.html + 170 + + + src/app/pages/nft/pages/nft/nft.page.html + 17 + + Owned + + + Airdropped + + src/app/pages/member/pages/tokens/tokens.page.html + 118 + + + src/app/pages/member/pages/tokens/tokens.page.html + 172 + + Airdropped + + + from + + src/app/pages/member/pages/tokens/tokens.page.html + 120 + + from + + + Deposit for purchase + + src/app/pages/member/pages/tokens/tokens.page.html + 215 + + Deposit for purchase + + + No tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 258,259 + + No tokens + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 297 + + Active Staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 300 + + Expired Staking + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 307,308 + + Active Staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 310,311 + + Expired Staking + + + Staked From + + src/app/pages/member/pages/tokens/tokens.page.html + 326 + + Staked From + + + Staked Until + + src/app/pages/member/pages/tokens/tokens.page.html + 327 + + Staked Until + + + Multiplier + + src/app/pages/member/pages/tokens/tokens.page.html + 329 + + Multiplier + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 330 + + Staked Value + + + Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 380 + + Stakes + + + No Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 403,404 + + No Stakes + + + Staked from - to + + src/app/pages/member/pages/tokens/tokens.page.html + 432,433 + + Staked from - to + + + Amount (Multiplier) + + src/app/pages/member/pages/tokens/tokens.page.html + 445,446 + + Amount (Multiplier) + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 457,458 + + Staked Value + + + Claim + + src/app/pages/member/pages/tokens/tokens.page.ts + 57 + + Claim + + + Refund + + src/app/pages/member/pages/tokens/tokens.page.ts + 58 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 19 + + Refund + + + Export CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 9 + + Export CSV + + + Exporting CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 13 + + Exporting CSV + + + No transactions + + src/app/pages/member/pages/transactions/transactions.page.html + 120,121 + + No transactions + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 40 + + Some files have not been uploaded + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 51,52 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + Uploaded CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 67 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 73 + + Filename + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 101 + + Error + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 160 + + Upload existing CSV + + + Upload back once you generate below + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 162 + + Upload back once you generate below + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 193,194 + + You have to upload images first. + + + Generate CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 211 + + Generate CSV + + + Publish NFTs + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 212 + + Publish NFTs + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 224,225 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Single + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Multiple + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14 + + NFT info + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16 + + Name and description will be included on the NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 22 + + Name is required. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 34 + + + src/app/pages/proposal/pages/new/new.page.html + 77 + + Description is required. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 53 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 92 + + Properties show up underneath your item. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 102 + + Property name (E.g. Character) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 103 + + Value (E.g. Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 115 + + + src/app/pages/nft/pages/new/single/single.page.html + 151 + + + src/app/pages/nft/pages/new/single/single.page.html + 158 + + Property name + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 126,125 + + + src/app/pages/nft/pages/new/single/single.page.html + 163 + + + src/app/pages/nft/pages/new/single/single.page.html + 171,170 + + + src/app/pages/nft/pages/new/single/single.page.html + 228,227 + + + src/app/pages/nft/pages/new/single/single.page.html + 266 + + + src/app/pages/nft/pages/new/single/single.page.html + 272,271 + + Value + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 142 + + Property + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 185 + + Add property + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 194 + + Stats show up underneath your item. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Stats name (E.g. Stamina) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 205 + + Value (E.g. 10, 1/10 , etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 217 + + + src/app/pages/nft/pages/new/single/single.page.html + 254 + + + src/app/pages/nft/pages/new/single/single.page.html + 261 + + Stat name + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 245 + + Stat + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287 + + Add stat + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 303 + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 333 + + Media is required + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 348 + + Select one of your collections to display this NFT. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 383,384 + + Create NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 393,394 + + Preview NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 168 + + File name is not valid + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 7 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 48 + + + src/app/pages/nft/pages/nft/nft.page.html + 516 + + Check out nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 109 + + Current highest bid + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 165 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 173 + + Sale hasn't started yet + + + NFT is pending other member's transaction + + src/app/pages/nft/pages/nft/nft.page.html + 181 + + NFT is pending other member's transaction + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 190 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 198 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 213 + + Sell NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 218 + + Change Fixed Price + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 223 + + Change Auction + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 240,241 + + Place bid + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 263,264 + + Buy now + + + Bidding + + src/app/pages/nft/pages/nft/nft.page.html + 281 + + Bidding + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 290 + + Current Bids + + + Past bids + + src/app/pages/nft/pages/nft/nft.page.html + 298 + + Past bids + + + My biddings + + src/app/pages/nft/pages/nft/nft.page.html + 307 + + My biddings + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 321 + + Member + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 322 + + Bidded on + + + There are no current bids + + src/app/pages/nft/pages/nft/nft.page.html + 369,370 + + There are no current bids + + + There are no past bids + + src/app/pages/nft/pages/nft/nft.page.html + 419,420 + + There are no past bids + + + There are no records. + + src/app/pages/nft/pages/nft/nft.page.html + 469,470 + + There are no records. + + + Withdraw NFT + + src/app/pages/nft/pages/nft/nft.page.html + 509,510 + + Withdraw NFT + + + History + + src/app/pages/nft/pages/nft/nft.page.html + 522 + + History + + + Minting in Progress + + src/app/pages/nft/pages/nft/nft.page.html + 556 + + Minting in Progress + + + Available for specific Member Only + + src/app/pages/nft/pages/nft/nft.page.html + 619 + + Available for specific Member Only + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 647 + + View all of the transaction details of this NFT on the Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 685 + + About the collection + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 694 + + Show + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 695 + + collection + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 707,706 + + by + + + Firefly does not support NFTs yet! + + src/app/pages/nft/pages/nft/nft.page.html + 799 + + Firefly does not support NFTs yet! + + + Are you sure you want to withdraw NFT from Soonaverse? + + src/app/pages/nft/pages/nft/nft.page.html + 802 + + Are you sure you want to withdraw NFT from Soonaverse? + + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + src/app/pages/nft/pages/nft/nft.page.html + 804 + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + + Confirm with Metamask + + src/app/pages/nft/pages/nft/nft.page.html + 806 + + Confirm with Metamask + + + View + + src/app/pages/nft/pages/nft/nft.page.ts + 82 + + View + + + NFT Withdrawn. + + src/app/pages/nft/pages/nft/nft.page.ts + 686 + + NFT Withdrawn. + + + Oops, it's in another universe + + src/app/pages/nft/pages/not-found/not-found.page.html + 8 + + Oops, it's in another universe + + + NFT you are looking for no longer exists on Soonaverse. + + src/app/pages/nft/pages/not-found/not-found.page.html + 12,14 + + NFT you are looking for no longer exists on Soonaverse. + + + Back to Marketplace + + src/app/pages/nft/pages/not-found/not-found.page.html + 22,24 + + Back to Marketplace + + + Auction Starts + + src/app/pages/nft/services/helper.service.ts + 145 + + Auction Starts + + + Auction Ends + + src/app/pages/nft/services/helper.service.ts + 148 + + Auction Ends + + + Pool by + + src/app/pages/pool/pages/market/pool.page.html + 3,12 + + Pool by + + + What is Pool? + + src/app/pages/pool/pages/market/pool.page.html + 20,21 + + What is Pool? + + + See Pool on iotabee + + src/app/pages/pool/pages/market/pool.page.html + 37,39 + + See Pool on iotabee + + + What is iotabee? + + src/app/pages/pool/pages/market/pool.page.html + 49 + + + src/app/pages/swap/pages/market/swap.page.html + 49 + + What is iotabee? + + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + src/app/pages/pool/pages/market/pool.page.html + 51,54 + + + src/app/pages/swap/pages/market/swap.page.html + 51,54 + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + + iotabee.com + + src/app/pages/pool/pages/market/pool.page.html + 61,62 + + + src/app/pages/swap/pages/market/swap.page.html + 61,62 + + iotabee.com + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2 + + New Proposal + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 3 + + Proposal info + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19 + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 39 + + + src/app/pages/proposal/pages/new/new.page.html + 50,49 + + Start + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 40 + + Start Date is required. + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 93 + + Question Info + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 95 + + Title and description will only be displayed for this question. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 104 + + Question Title is required. + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 143 + + Text and description for each individual answer. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 157 + + Answer Text is required. + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 192 + + Add Choice + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 207 + + This is the space that will list the proposal. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 259 + + Proposal Setup + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 261 + + Defines who has access to the proposal and what is the voting method. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 269 + + Target Participants + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 276 + + All Guardians + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 283 + + Only guardians can vote on this proposal + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 289 + + All Members + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 296 + + All members can vote on this proposal + + + Space's Native Token + + src/app/pages/proposal/pages/new/new.page.html + 302 + + + src/app/pages/proposal/services/helper.service.ts + 23 + + Space's Native Token + + + You must have minted token linked to your space first! + + src/app/pages/proposal/pages/new/new.page.html + 313 + + You must have minted token linked to your space first! + + + All token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 321 + + All token holders can vote. + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 343,344 + + Create Proposal + + + Proposal - New + + src/app/pages/proposal/pages/new/new.page.ts + 136 + + + src/app/pages/proposal/pages/new/new.page.ts + 151 + + Proposal - New + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + src/app/pages/proposal/pages/new/new.page.ts + 137 + + + src/app/pages/proposal/pages/new/new.page.ts + 152 + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 321 + + Choice + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 328 + + badge + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 332 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 5 + + Final Results + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 74 + + Proposal Description + + + Proposal - + + src/app/pages/proposal/pages/overview/overview.page.ts + 59 + + Proposal - + + + Voted + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 21 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 49 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 156 + + Voted + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 32 + + Vote Now + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 43 + + Voting starts + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 56 + + You are not part of the vote + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 60 + + In order to vote, you must be part of the space before proposal was created. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 69 + + Log in to vote + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 73 + + In order to vote, you must login first. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 84 + + Pending Guardian Approval + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 88 + + This proposal has not been approved by any Guardian yet. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 102 + + Weight + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 48 + + Pending Vote + + + Proposal - Participants + + src/app/pages/proposal/pages/participants/participants.page.ts + 83 + + Proposal - Participants + + + See all participants within the proposal + + src/app/pages/proposal/pages/participants/participants.page.ts + 84 + + See all participants within the proposal + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 151 + + joined soonaverse on + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 12,13 + + Approve + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 23,24 + + Decline + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 67 + + Voting Type of this proposal. + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 75 + + Total weight within this proposal for all participants. + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 22 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 22 + + Current Milestone + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 23 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 23 + + Commence Date + + + Voting Type + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 26 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 26 + + Voting Type + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 27 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 27 + + Total Weight + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 79 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 148 + + Check out proposal + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 87 + + Current Results + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 120 + + Selected Badges + + + Votes + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 36 + + Votes + + + Voter + + src/app/pages/proposal/pages/votes/votes.page.html + 14 + + Voter + + + Option (Weight) + + src/app/pages/proposal/pages/votes/votes.page.html + 16 + + Option (Weight) + + + Expired On + + src/app/pages/proposal/pages/votes/votes.page.html + 18 + + Expired On + + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + src/app/pages/proposal/pages/votes/votes.page.html + 24 + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + + One Member One Vote + + src/app/pages/proposal/services/helper.service.ts + 25 + + One Member One Vote + + + XP Reputation - Space + + src/app/pages/proposal/services/helper.service.ts + 27 + + XP Reputation - Space + + + XP Reputation - Selected Badges + + src/app/pages/proposal/services/helper.service.ts + 29 + + XP Reputation - Selected Badges + + + Staking + + src/app/pages/soon-staking/pages/staking/staking.page.html + 3,4 + + Staking + + + How much I earn? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 13 + + How much I earn? + + + How it works? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 135 + + How it works? + + + Stake your tokens to earn rewards and unlock new features. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 137,139 + + Stake your tokens to earn rewards and unlock new features. + + + Unique Perks for stakers + + src/app/pages/soon-staking/pages/staking/staking.page.html + 160 + + Unique Perks for stakers + + + Rewards + + src/app/pages/soon-staking/pages/staking/staking.page.html + 167,168 + + Rewards + + + Trading Bonuses + + src/app/pages/soon-staking/pages/staking/staking.page.html + 180 + + Trading Bonuses + + + Unique Features + + src/app/pages/soon-staking/pages/staking/staking.page.html + 193 + + Unique Features + + + Earn more er than you think + + src/app/pages/soon-staking/pages/staking/staking.page.html + 209 + + Earn more er than you think + + + The more you hold, the more rewards you get. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 214,215 + + The more you hold, the more rewards you get. + + + New + + src/app/pages/space/pages/awards/awards.page.html + 43 + + + src/app/pages/space/pages/collections/collections.page.html + 49 + + + src/app/pages/space/pages/proposals/proposals.page.html + 42 + + New + + + award + + src/app/pages/space/pages/awards/awards.page.html + 44 + + award + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 31 + + + src/app/pages/space/pages/members/members.page.html + 45 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 31 + + Active + + + Space - Awards + + src/app/pages/space/pages/awards/awards.page.ts + 54 + + Space - Awards + + + Space's awards + + src/app/pages/space/pages/awards/awards.page.ts + 55 + + Space's awards + + + No Collections + + src/app/pages/space/pages/collections/collections.page.html + 70,71 + + No Collections + + + Space - Collections + + src/app/pages/space/pages/collections/collections.page.ts + 65 + + Space - Collections + + + Space's collections + + src/app/pages/space/pages/collections/collections.page.ts + 66 + + Space's collections + + + Space Options + + src/app/pages/space/pages/manage/manage.page.html + 2 + + Space Options + + + Token Options + + src/app/pages/space/pages/manage/manage.page.html + 6 + + Token Options + + + Edit Space + + src/app/pages/space/pages/manage/manage.page.html + 21 + + Edit Space + + + Manage Guardians + + src/app/pages/space/pages/manage/manage.page.html + 38 + + Manage Guardians + + + Export Current Members + + src/app/pages/space/pages/manage/manage.page.html + 44 + + Export Current Members + + + Create New Award + + src/app/pages/space/pages/manage/manage.page.html + 57 + + Create New Award + + + Create New Proposal + + src/app/pages/space/pages/manage/manage.page.html + 68 + + Create New Proposal + + + Create New Collection + + src/app/pages/space/pages/manage/manage.page.html + 79 + + Create New Collection + + + Edit Token + + src/app/pages/space/pages/manage/manage.page.html + 105 + + Edit Token + + + Create Airdrop + + src/app/pages/space/pages/manage/manage.page.html + 127 + + Create Airdrop + + + Staking Reward Schedule + + src/app/pages/space/pages/manage/manage.page.html + 135 + + Staking Reward Schedule + + + Export Current Stakers + + src/app/pages/space/pages/manage/manage.page.html + 141 + + Export Current Stakers + + + Active + + src/app/pages/space/pages/members/members.page.html + 18,19 + + Active + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 35,36 + + Blocked + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 52 + + Blocked + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 67 + + + src/app/pages/space/pages/members/members.page.html + 82 + + Find Member + + + No Members + + src/app/pages/space/pages/members/members.page.html + 110,111 + + No Members + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 118 + + joined space on + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 161,162 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 174,175 + + Make Guardian + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 184,185 + + Block Member + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 187,188 + + Accept Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 190,191 + + Unblock Member + + + Space - Members + + src/app/pages/space/pages/members/members.page.ts + 76 + + Space - Members + + + Space's members + + src/app/pages/space/pages/members/members.page.ts + 77 + + Space's members + + + Upcoming Sale + + src/app/pages/space/pages/overview/overview.page.html + 7 + + Upcoming Sale + + + Live Token Sale + + src/app/pages/space/pages/overview/overview.page.html + 9 + + Live Token Sale + + + Space - + + src/app/pages/space/pages/overview/overview.page.ts + 55 + + Space - + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 43 + + proposal + + + No Proposals + + src/app/pages/space/pages/proposals/proposals.page.html + 62,63 + + No Proposals + + + Space - Proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 54 + + Space - Proposals + + + Space's proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 55 + + Space's proposals + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 34 + + Check out space + + + pending + + src/app/pages/space/pages/space/space-about/space-about.component.html + 153 + + pending + + + Export members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 168 + + Export members + + + Exporting members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 172 + + Exporting members + + + Open to join instantly + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Open to join instantly + + + Requires approval to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 183 + + Requires approval to join + + + Requires + + src/app/pages/space/pages/space/space-about/space-about.component.html + 187 + + Requires + + + staked value to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 193 + + staked value to join + + + Related Links + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 92 + + Related Links + + + Claim ownership + + src/app/pages/space/pages/space/space-about/space-about.component.html + 259,260 + + Claim ownership + + + Space's Wallet Addresses + + src/app/pages/space/pages/space/space-about/space-about.component.html + 290 + + Space's Wallet Addresses + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 321 + + Leave Space + + + About space + + src/app/pages/space/pages/space/space.page.html + 3 + + About space + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 55,56 + + + src/app/pages/space/pages/space/space.page.html + 118,119 + + Join Space + + + Pending Request + + src/app/pages/space/pages/space/space.page.html + 68 + + + src/app/pages/space/pages/space/space.page.html + 131 + + Pending Request + + + Ask to join Space + + src/app/pages/space/pages/space/space.page.html + 70 + + + src/app/pages/space/pages/space/space.page.html + 133 + + Ask to join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 82,83 + + + src/app/pages/space/pages/space/space.page.html + 160,161 + + Edit Space + + + Stake + + src/app/pages/space/pages/space/space.page.html + 144 + + Stake + + + to Join + + src/app/pages/space/pages/space/space.page.html + 147 + + to Join + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2 + + Add new space + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3 + + Edit space + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17 + + Space info + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19 + + Title and description will be included on the Space. + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 56 + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 97 + + Only discord invite code supported (i.e. RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 104 + + Type your Discord invite code + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 125 + + Space Type + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 127 + + Each type has different characteristics. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 137,138 + + Open for anyone to join instantly + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 142 + + Requires a member approval + + + Requires stake value (in space's token) + + src/app/pages/space/pages/upsert/upsert.page.html + 146 + + Requires stake value (in space's token) + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 174 + + Avatar is mandatory + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 243,244 + + Create space + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 256,257 + + Save space + + + Space - New + + src/app/pages/space/pages/upsert/upsert.page.ts + 76 + + Space - New + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/space/pages/upsert/upsert.page.ts + 77 + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 210 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 216 + + Upload new to replace existing. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 211 + + Your brand is key. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 217 + + Make it personal. + + + Swap by + + src/app/pages/swap/pages/market/swap.page.html + 3,12 + + Swap by + + + What is Swap? + + src/app/pages/swap/pages/market/swap.page.html + 20,21 + + What is Swap? + + + See Swap on iotabee + + src/app/pages/swap/pages/market/swap.page.html + 37,39 + + See Swap on iotabee + + + Create airdrop + + src/app/pages/token/pages/airdrops/airdrops.page.html + 8,9 + + Create airdrop + + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/pages/token/pages/airdrops/airdrops.page.html + 17,19 + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + + Some rows have been removed + + src/app/pages/token/pages/airdrops/airdrops.page.html + 92 + + Some rows have been removed + + + Submit airdrop + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 118,119 + + Submit airdrop + + + + row is not valid + + src/app/pages/token/pages/airdrops/airdrops.page.ts + 73 + + row is not valid + + + Breakdown + + src/app/pages/token/pages/metrics/metrics.page.html + 1 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 284 + + Breakdown + + + Token distribution + + src/app/pages/token/pages/metrics/metrics.page.html + 5 + + Token distribution + + + Total token supply + + src/app/pages/token/pages/metrics/metrics.page.ts + 56 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 96 + + Total token supply + + + Launchpad price per token + + src/app/pages/token/pages/metrics/metrics.page.ts + 67 + + Launchpad price per token + + + Initial Cap + + src/app/pages/token/pages/metrics/metrics.page.ts + 74 + + Initial Cap + + + Total melted tokens + + src/app/pages/token/pages/metrics/metrics.page.ts + 82 + + Total melted tokens + + + You can create only ONE token per space and it can never be changed. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 14,15 + + You can create only ONE token per space and it can never be changed. + + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 23,26 + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + + Continue + + src/app/pages/token/pages/new/introduction/introduction.component.html + 38,39 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 191,192 + + + src/app/pages/token/pages/new/overview/overview.component.html + 104,105 + + Continue + + + Token Sale Requirements + + src/app/pages/token/pages/new/introduction/introduction.component.html + 50 + + Token Sale Requirements + + + To create a public sale or use the Token Exchange you must complete our KYC process. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 52 + + To create a public sale or use the Token Exchange you must complete our KYC process. + + + Begin Process + + src/app/pages/token/pages/new/introduction/introduction.component.html + 58 + + Begin Process + + + Continue + + + src/app/pages/token/pages/new/introduction/introduction.component.html + 73,74 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 330,331 + + + src/app/pages/token/pages/new/overview/overview.component.html + 231,232 + + Continue + + + + Token info + + src/app/pages/token/pages/new/metrics/metrics.component.html + 9 + + + src/app/pages/token/pages/new/summary/summary.component.html + 14 + + + src/app/pages/token/pages/token/token.page.html + 3 + + Token info + + + Name is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 16 + + Name is invalid. + + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + src/app/pages/token/pages/new/metrics/metrics.component.html + 33 + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + + Token supply + + src/app/pages/token/pages/new/metrics/metrics.component.html + 47 + + + src/app/pages/token/pages/new/summary/summary.component.html + 53 + + Token supply + + + Price per token (MIOTA) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 53 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 58 + + Price per token (MIOTA) + + + Price is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 54 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 38 + + Price is invalid. + + + Total token supply (up to 6 decimals are supported) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 68 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 74 + + Total token supply (up to 6 decimals are supported) + + + Total supply is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 69 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 107 + + Total supply is invalid. + + + Allocation title + + src/app/pages/token/pages/new/metrics/metrics.component.html + 111 + + Allocation title + + + % of tokens for sale + + src/app/pages/token/pages/new/metrics/metrics.component.html + 121 + + % of tokens for sale + + + Percentage of tokens is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 122 + + Percentage of tokens is invalid. + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 126 + + % of tokens for sale (Default 100%) + + + Only 1 of the allocations can be public + + src/app/pages/token/pages/new/metrics/metrics.component.html + 149 + + Only 1 of the allocations can be public + + + Sum of the percentages must be 100 + + src/app/pages/token/pages/new/metrics/metrics.component.html + 155 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 166 + + Sum of the percentages must be 100 + + + Invalid sum of percentages + + src/app/pages/token/pages/new/metrics/metrics.component.html + 160 + + Invalid sum of percentages + + + Add allocation + + src/app/pages/token/pages/new/metrics/metrics.component.html + 179 + + Add allocation + + + Token icon + + src/app/pages/token/pages/new/metrics/metrics.component.html + 221 + + + src/app/pages/token/pages/new/summary/summary.component.html + 265 + + Token icon + + + (Recomended size: 400 x 400px) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 223 + + (Recomended size: 400 x 400px) + + + Icon is mandatory + + src/app/pages/token/pages/new/metrics/metrics.component.html + 232 + + Icon is mandatory + + + Token price + + src/app/pages/token/pages/new/metrics/metrics.component.html + 264 + + + src/app/pages/token/pages/new/summary/summary.component.html + 283 + + Token price + + + Distribution of the token happens after the token offering end date. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 266 + + + src/app/pages/token/pages/new/summary/summary.component.html + 285 + + Distribution of the token happens after the token offering end date. + + + Configure the token supply first to see breakdown. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 288 + + Configure the token supply first to see breakdown. + + + Token terms and conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 298 + + + src/app/pages/token/pages/new/summary/summary.component.html + 324 + + Token terms and conditions + + + Provide link for Terms and Conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 300 + + Provide link for Terms and Conditions + + + Terms and Conditions link is invalid. (Start with http:// or https://) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 306 + + Terms and Conditions link is invalid. (Start with http:// or https://) + + + Token allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 75 + + + src/app/pages/token/pages/new/summary/summary.component.html + 165 + + Token allocation + + + Allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 76 + + + src/app/pages/token/pages/new/summary/summary.component.ts + 30 + + Allocation + + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 81,82 + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + + Create token + + src/app/pages/token/pages/new/new.page.html + 2 + + Create token + + + Introduction + + src/app/pages/token/pages/new/new.page.ts + 32 + + Introduction + + + Metrics + + src/app/pages/token/pages/new/new.page.ts + 33 + + + src/app/pages/token/pages/token/token.page.ts + 38 + + Metrics + + + Summary + + src/app/pages/token/pages/new/new.page.ts + 35 + + Summary + + + New Token + + src/app/pages/token/pages/new/new.page.ts + 72 + + New Token + + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + src/app/pages/token/pages/new/new.page.ts + 73 + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + + Token description + + src/app/pages/token/pages/new/overview/overview.component.html + 12 + + + src/app/pages/token/pages/new/summary/summary.component.html + 93 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 6 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 27 + + Token description + + + This text will be displayed on the main token page. + + src/app/pages/token/pages/new/overview/overview.component.html + 14 + + This text will be displayed on the main token page. + + + Title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 23 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 10 + + Title is invalid. + + + Description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 38 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 22 + + Description is invalid. + + + Short description + + src/app/pages/token/pages/new/overview/overview.component.html + 55 + + + src/app/pages/token/pages/new/summary/summary.component.html + 129 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 49 + + Short description + + + Short description of the token which will be displayed on the token trading page. + + src/app/pages/token/pages/new/overview/overview.component.html + 57 + + Short description of the token which will be displayed on the token trading page. + + + Short title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 66 + + Short title is invalid. + + + Short description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 81 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 68 + + Short description is invalid. + + + Overview graphics + + src/app/pages/token/pages/new/overview/overview.component.html + 121 + + Overview graphics + + + Token introductory video / image + + src/app/pages/token/pages/new/overview/overview.component.html + 123 + + Token introductory video / image + + + Introductionary media is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 132 + + Introductionary media is invalid. + + + Invalid URL. (Start with http:// or https://) + + src/app/pages/token/pages/new/overview/overview.component.html + 168 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 84 + + Invalid URL. (Start with http:// or https://) + + + Add link + + src/app/pages/token/pages/new/overview/overview.component.html + 191 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 107 + + Add link + + + Trading Options + + src/app/pages/token/pages/new/overview/overview.component.html + 203 + + Trading Options + + + Enable trading + + src/app/pages/token/pages/new/overview/overview.component.html + 207 + + Enable trading + + + Edit + + src/app/pages/token/pages/new/summary/summary.component.html + 22,23 + + + src/app/pages/token/pages/new/summary/summary.component.html + 61,62 + + + src/app/pages/token/pages/new/summary/summary.component.html + 101,102 + + + src/app/pages/token/pages/new/summary/summary.component.html + 137,138 + + + src/app/pages/token/pages/new/summary/summary.component.html + 173,174 + + Edit + + + Name + + src/app/pages/token/pages/new/summary/summary.component.html + 30,31 + + Name + + + Symbol + + src/app/pages/token/pages/new/summary/summary.component.html + 41,42 + + Symbol + + + Total token supply + + src/app/pages/token/pages/new/summary/summary.component.html + 80,81 + + Total token supply + + + Description title + + src/app/pages/token/pages/new/summary/summary.component.html + 109,110 + + Description title + + + Description + + src/app/pages/token/pages/new/summary/summary.component.html + 120,121 + + Description + + + Short description title + + src/app/pages/token/pages/new/summary/summary.component.html + 145,146 + + Short description title + + + Short description + + src/app/pages/token/pages/new/summary/summary.component.html + 156,157 + + Short description + + + Allocation title + + src/app/pages/token/pages/new/summary/summary.component.html + 187,188 + + Allocation title + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/summary/summary.component.html + 198,199 + + % of tokens for sale (Default 100%) + + + Submit token + + src/app/pages/token/pages/new/summary/summary.component.html + 227,228 + + Submit token + + + (Recommended size: 400 x 400px) + + src/app/pages/token/pages/new/summary/summary.component.html + 267 + + (Recommended size: 400 x 400px) + + + Some description + + src/app/pages/token/pages/new/summary/summary.component.html + 326 + + Some description + + + Terms&conditions + + src/app/pages/token/pages/new/summary/summary.component.html + 340 + + Terms&conditions + + + Submit token + + + src/app/pages/token/pages/new/summary/summary.component.html + 356,357 + + Submit token + + + + Trade token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 15,16 + + Trade token + + + Buy Tokens + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 28,29 + + Buy Tokens + + + Schedule public sale + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 42,43 + + Schedule public sale + + + Allow Trading + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 57,58 + + Allow Trading + + + Edit token info + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 86 + + Edit token info + + + Check out token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 100 + + Check out token + + + Mint Token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 132,133 + + Mint Token + + + Minting in progress + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 144,145 + + Minting in progress + + + Token was not made available on decentralised network yet. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 150 + + Token was not made available on decentralised network yet. + + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 153,154 + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + + Trading enabled. + + src/app/pages/token/pages/token/token-buy/token-buy.component.ts + 86 + + Trading enabled. + + + Short description title is invalid. + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 56 + + Short description title is invalid. + + + Short description title + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 61 + + Short description title + + + Short token description + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 73 + + Short token description + + + Sale Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 4 + + Sale Info + + + Sale schedule + + src/app/pages/token/pages/token/token-info/token-info.component.html + 10 + + Sale schedule + + + During cooldown period you are able to trigger refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 41 + + During cooldown period you are able to trigger refund. + + + No Cooldown. Participants can't refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 75,76 + + No Cooldown. Participants can't refund. + + + Token Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 80 + + + src/app/pages/token/pages/trade/trade.page.html + 57 + + + src/app/pages/token/pages/trade/trade.page.html + 624 + + Token Info + + + My purchased tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 4 + + My purchased tokens + + + + + + + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 78,80 + + + + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 90,92 + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + + Your Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 21 + + Your Deposit + + + Potential Tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 22 + + Potential Tokens + + + Token Owned + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 23 + + Token Owned + + + Total Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 24 + + Total Deposit + + + Total Participants + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 25 + + Total Participants + + + Sale ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 45 + + Sale ends in + + + Cooldown in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 62 + + Cooldown in progress + + + Sale starts in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 69 + + Sale starts in + + + Cooldown ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 73 + + Cooldown ends in + + + + + + + src/app/pages/token/pages/token/token.page.html + 47,48 + + + + + Airdrops + + src/app/pages/token/pages/token/token.page.ts + 41 + + Airdrops + + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + src/app/pages/token/pages/token/token.page.ts + 100 + + + src/app/pages/token/pages/trade/trade.page.ts + 275 + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + + Ongoing Sale + + src/app/pages/token/pages/token/token.page.ts + 248 + + Ongoing Sale + + + Scheduled + + src/app/pages/token/pages/token/token.page.ts + 250 + + Scheduled + + + Cooldown + + src/app/pages/token/pages/token/token.page.ts + 252 + + Cooldown + + + Processing + + src/app/pages/token/pages/token/token.page.ts + 254 + + Processing + + + Order book + + src/app/pages/token/pages/trade/trade.page.html + 94 + + + src/app/pages/token/pages/trade/trade.page.html + 644 + + Order book + + + Token chart + + src/app/pages/token/pages/trade/trade.page.html + 102 + + + src/app/pages/token/pages/trade/trade.page.html + 795 + + Token chart + + + My trading + + src/app/pages/token/pages/trade/trade.page.html + 158 + + My trading + + + Open buy orders + + src/app/pages/token/pages/trade/trade.page.html + 166 + + Open buy orders + + + Open sell orders + + src/app/pages/token/pages/trade/trade.page.html + 174 + + Open sell orders + + + Order history + + src/app/pages/token/pages/trade/trade.page.html + 182 + + Order history + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 213 + + + src/app/pages/token/pages/trade/trade.page.html + 287 + + Fulfilled + + + There are no buys + + src/app/pages/token/pages/trade/trade.page.html + 257,258 + + There are no buys + + + Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 321,322 + + + src/app/pages/token/pages/trade/trade.page.html + 416,417 + + Cancelled + + + Expired + + src/app/pages/token/pages/trade/trade.page.html + 324,325 + + + src/app/pages/token/pages/trade/trade.page.html + 422,423 + + Expired + + + There are no sells + + src/app/pages/token/pages/trade/trade.page.html + 345,346 + + There are no sells + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 388 + + + src/app/pages/token/pages/trade/trade.page.html + 1213 + + Sell + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 404,405 + + Fulfilled + + + Partially Fulfilled / Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 410,411 + + Partially Fulfilled / Cancelled + + + Fulfilled / Cancelled (unfulfillable) + + src/app/pages/token/pages/trade/trade.page.html + 419,420 + + Fulfilled / Cancelled (unfulfillable) + + + There is no order history + + src/app/pages/token/pages/trade/trade.page.html + 434,435 + + There is no order history + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 477,478 + + + src/app/pages/token/pages/trade/trade.page.html + 488,489 + + + src/app/pages/token/pages/trade/trade.page.html + 919,920 + + Sell + + + Available + + src/app/pages/token/pages/trade/trade.page.html + 530,531 + + Available + + + Current Price + + src/app/pages/token/pages/trade/trade.page.html + 542 + + Current Price + + + Change 24h + + src/app/pages/token/pages/trade/trade.page.html + 564,565 + + Change 24h + + + ( ~ ) + + src/app/pages/token/pages/trade/trade.page.html + 729,732 + + ( ~ ) + + + current price + + src/app/pages/token/pages/trade/trade.page.html + 737,738 + + current price + + + There is no activity yet + + src/app/pages/token/pages/trade/trade.page.html + 788,789 + + There is no activity yet + + + Trade history + + src/app/pages/token/pages/trade/trade.page.html + 829,830 + + Trade history + + + There is no trade history + + src/app/pages/token/pages/trade/trade.page.html + 894,895 + + There is no trade history + + + You don’t have enough tokens + + src/app/pages/token/pages/trade/trade.page.html + 928 + + You don’t have enough tokens + + + Amount to + + src/app/pages/token/pages/trade/trade.page.html + 935,936 + + Amount to + + + Balance + + src/app/pages/token/pages/trade/trade.page.html + 979 + + Balance + + + Set your price per 1 + + src/app/pages/token/pages/trade/trade.page.html + 998,1000 + + Set your price per 1 + + + LIMIT PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1009,1010 + + LIMIT PRICE + + + MARKET PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1017,1018 + + MARKET PRICE + + + ~ + + src/app/pages/token/pages/trade/trade.page.html + 1038,1041 + + + src/app/pages/token/pages/trade/trade.page.html + 1145,1148 + + ~ + + + Set Current Price + + src/app/pages/token/pages/trade/trade.page.html + 1069 + + Set Current Price + + + Set BID + + src/app/pages/token/pages/trade/trade.page.html + 1093,1104 + + Set BID + + + The bid price is the highest price that a particular buyer is willing to pay. + + src/app/pages/token/pages/trade/trade.page.html + 1100 + + The bid price is the highest price that a particular buyer is willing to pay. + + + Set ASK + + src/app/pages/token/pages/trade/trade.page.html + 1109,1120 + + Set ASK + + + The asking price is the minimum price that an individual would be willing to sell their asset. + + src/app/pages/token/pages/trade/trade.page.html + 1116 + + The asking price is the minimum price that an individual would be willing to sell their asset. + + + You will spend + + src/app/pages/token/pages/trade/trade.page.html + 1129,1130 + + You will spend + + + Minimum total has to be at least + + src/app/pages/token/pages/trade/trade.page.html + 1163 + + Minimum total has to be at least + + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + src/app/pages/token/pages/trade/trade.page.html + 1179 + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + + 1h + + src/app/pages/token/pages/trade/trade.page.ts + 118 + + 1h + + + 4h + + src/app/pages/token/pages/trade/trade.page.ts + 119 + + 4h + + + 1d + + src/app/pages/token/pages/trade/trade.page.ts + 120 + + 1d + + + 1w + + src/app/pages/token/pages/trade/trade.page.ts + 121 + + 1w + + + Bids + + src/app/pages/token/pages/trade/trade.page.ts + 563 + + Bids + + + Asks + + src/app/pages/token/pages/trade/trade.page.ts + 567 + + Asks + + + Cancelled + + src/app/pages/token/services/helper.service.ts + 201 + + Cancelled + + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 42 + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + + Go to trading pairs to add your favourite tokens. + + src/app/pages/tokens/pages/favourites/favourites.page.html + 47,48 + + Go to trading pairs to add your favourite tokens. + + + Add favourites + + src/app/pages/tokens/pages/favourites/favourites.page.html + 56,57 + + Add favourites + + + Tokens - Favourite + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 52 + + Tokens - Favourite + + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 53 + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + + Tokens - Launchpad + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 41 + + Tokens - Launchpad + + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 42 + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/tokens/pages/tokens/tokens.page.html + 11,13 + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + + Highlighted Token + + src/app/pages/tokens/pages/tokens/tokens.page.html + 49 + + Highlighted Token + + + Favorites + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 17 + + Favorites + + + All tokens + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 20 + + All tokens + + + Trading pairs + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 21 + + Trading pairs + + + Launchpad + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 22 + + Launchpad + + + Tokens - Trading Pairs + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 43 + + Tokens - Trading Pairs + + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 44 + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + + AuditOne Validation + + src/app/service-modules/audit-one/components/modal/modal.component.html + 3 + + AuditOne Validation + + + Requested On + + src/app/service-modules/audit-one/components/modal/modal.component.html + 22 + + Requested On + + + Last Update + + src/app/service-modules/audit-one/components/modal/modal.component.html + 23 + + Last Update + + + There are no records. + + src/app/service-modules/audit-one/components/modal/modal.component.html + 52 + + There are no records. + + + AuditOne + + src/app/service-modules/audit-one/components/widget/widget.component.html + 11 + + AuditOne + + + Verified + + src/app/service-modules/audit-one/components/widget/widget.component.html + 47 + + Verified + + + See more + + src/app/service-modules/audit-one/components/widget/widget.component.html + 52 + + See more + + + + diff --git a/src/locale/messages.tr-TR.xlf b/src/locale/messages.tr-TR.xlf new file mode 100644 index 0000000..da551e3 --- /dev/null +++ b/src/locale/messages.tr-TR.xlf @@ -0,0 +1,6844 @@ + + + + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 69 + + Back + + + Discover + + src/app/@shell/ui/header/header.component.html + 56,57 + + + src/app/pages/home/home.page.html + 18,19 + + Discover + + + Create new + + src/app/@shell/ui/header/header.component.html + 62 + + Create new + + + Space + + src/app/@shell/ui/header/header.component.html + 68,69 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 83,84 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 6,7 + + + src/app/pages/collection/pages/collection/collection.page.html + 54,55 + + + src/app/pages/market/pages/collections/collections.page.html + 122,123 + + + src/app/pages/market/pages/nfts/nfts.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 69,70 + + Space + + + Proposal + + src/app/@shell/ui/header/header.component.html + 71,72 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 23,24 + + Proposal + + + Award + + src/app/@shell/ui/header/header.component.html + 74,75 + + + src/app/pages/award/pages/award/award.page.html + 26,27 + + Award + + + Collection + + src/app/@shell/ui/header/header.component.html + 77,78 + + + src/app/pages/collection/pages/collection/collection.page.html + 19,20 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 114,115 + + + src/app/pages/nft/pages/new/single/single.page.html + 336,337 + + + src/app/pages/space/pages/collections/collections.page.html + 26 + + Collection + + + None. + + src/app/@shell/ui/header/header.component.html + 128,129 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 52 + + None. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 137,138 + + + src/app/components/auth/services/auth.service.ts + 315 + + My Profile + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 152,153 + + Purchase has not been completed + + + You have + + src/app/@shell/ui/header/header.component.html + 154 + + You have + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 154,155 + + to finish your transaction + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 156,157 + + Open Checkout + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 272 + + You won the NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 273 + + You are a proud owner of a new NFT. Congratulations! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 280 + + You lost your bid! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 281 + + Your bid on + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 282 + + was outbid. Try again! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 289 + + just offered + + + for + + src/app/@shell/ui/header/header.component.ts + 290 + + + src/app/components/timeline-nft/timeline-nft.component.html + 60 + + for + + + Your + + src/app/@shell/ui/header/header.component.ts + 291 + + Your + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 292 + + has received a new bid for + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 300,299 + + Unsupported + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 301 + + This notification is not yet supported in your language + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 12 + + Space + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 17 + + Proposal + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 22 + + Award + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27 + + Collection + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 34,35 + + Connect to your MetaMask wallet + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 52,53 + + Log out + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 56,57 + + Powered by + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8,10 + + The page you were looking for was not found + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 11,13 + + Discover Soonaverse + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 28,29 + + See Docs + + + Coming SOON + + src/app/@shell/ui/sider/sider.component.html + 35,36 + + + src/app/pages/award/pages/new/new.page.html + 271,272 + + + src/app/pages/award/pages/new/new.page.html + 281,282 + + + src/app/pages/award/pages/new/new.page.html + 291,292 + + Coming SOON + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 8,9 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 9,10 + + Connect to your Metamask wallet + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 20,21 + + Make sure you select public IOTA EVM Chain in MetaMask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 22,23 + + Network Name: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23,24 + + RPC URL: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 24,25 + + Chain ID: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 31,32 + + + src/app/pages/award/pages/award/award.page.html + 154 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 152 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 184 + + Cancel + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 1,3 + + Connect + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Disconnect + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 111 + + Unable to sign transaction. Please try to reload page. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 156 + + You must unlock your MetaMask first! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 167 + + You must enable access to read your account address. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 189 + + Please make sure you select address in MetaMask! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 196 + + Unable to get nonce to authenticate! + + + You have to open Soonaverse in MetaMask app. + + src/app/components/auth/services/auth.service.ts + 239 + + You have to open Soonaverse in MetaMask app. + + + Failed to initialize MetaMask, try to reload page. + + src/app/components/auth/services/auth.service.ts + 241 + + Failed to initialize MetaMask, try to reload page. + + + Pending + + + src/app/components/award/components/award-status/award-status.component.html + 1,2 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 1,2 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 1,2 + + Pending + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 3,4 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 3,4 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 3,4 + + Rejected + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 5 + + + src/app/pages/space/pages/awards/awards.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 25 + + Completed + + + Available + + src/app/components/award/components/award-status/award-status.component.html + 6 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 62 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 150,149 + + + src/app/pages/collection/pages/collection/collection.page.html + 91,92 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 39,37 + + + src/app/pages/space/pages/collections/collections.page.ts + 24 + + Available + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 4 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 553,554 + + Space Members Only + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 542,543 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 14 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 564,565 + + Space Members with Badge Only + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 574,575 + + At least one NFT from Collections + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 19 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 43,44 + + Starts in + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 21 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 46,47 + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26,27 + + days + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 24 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 50,51 + + Starts today + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 42 + + Limited Edition + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 57 + + Pending approval + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 67 + + + src/app/pages/space/pages/awards/awards.page.ts + 26 + + + src/app/pages/space/pages/collections/collections.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 26 + + Rejected + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 2,3 + + + src/app/pages/nft/pages/new/single/single.page.html + 342,343 + + Collection is required. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 11,12 + + Select Collection + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 65,67 + + Select a Collection + + + Search + + src/app/components/collection/components/select-collection/select-collection.component.html + 74 + + + src/app/components/space/components/select-space/select-space.component.html + 74 + + + src/app/pages/discover/pages/discover/discover.page.html + 22,23 + + + src/app/pages/market/pages/market/market.page.html + 22,23 + + Search + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 84 + + + src/app/components/space/components/select-space/select-space.component.html + 84 + + No results for + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 14,13 + + All Collections + + + Wallet details + + src/app/components/member/components/member-about/member-about.component.html + 42,43 + + Wallet details + + + Member's Wallet Address. + + src/app/components/member/components/member-about/member-about.component.html + 44,45 + + Member's Wallet Address. + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 55,56 + + Recently joined spaces + + + All + + src/app/components/member/components/member-about/member-about.component.html + 58,59 + + + src/app/pages/discover/pages/spaces/spaces.page.ts + 28,27 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 38,37 + + All + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 78,79 + + No Contribution Yet. + + + Latest Badges + + src/app/components/member/components/member-about/member-about.component.html + 84,85 + + Latest Badges + + + No badges + + src/app/components/member/components/member-about/member-about.component.html + 93,94 + + No badges + + + See all + + src/app/components/member/components/member-about/member-about.component.html + 97,98 + + See all + + + Connections + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 5 + + + src/app/pages/member/pages/activity/activity.page.html + 68 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 50,51 + + Connections + + + Awards + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 6 + + + src/app/pages/discover/pages/discover/discover.page.ts + 23 + + + src/app/pages/member/pages/member/member.page.ts + 27 + + + src/app/pages/space/pages/space/space.page.ts + 33 + + Awards + + + XP + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 7 + + + src/app/components/member/components/member-card/member-card.component.html + 31,32 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 16,17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 25,26 + + XP + + + Total reputation + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 29 + + Total reputation + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 38,39 + + awards + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 6,7 + + Display Name + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 7,8 + + Set a display name. This does not change your username. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 11 + + Display name (optional) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 18,19 + + About + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19,20 + + A brief description of yourself shown on your profile. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 22 + + Your description (optional) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 29,30 + + + src/app/pages/space/pages/upsert/upsert.page.html + 154 + + Avatar + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 30,31 + + Customise your Soonaverse identity. + + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 34,37 + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 43,44 + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 49,50 + + + src/app/pages/space/pages/upsert/upsert.page.html + 52,53 + + Networking + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 51,52 + + + src/app/pages/space/pages/upsert/upsert.page.html + 60,61 + + Invalid Github username. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 53,54 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67,68 + + Type your Github account username + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 63,64 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 206,207 + + + src/app/pages/space/pages/upsert/upsert.page.html + 80,81 + + Invalid Twitter username. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 65,66 + + + src/app/pages/space/pages/upsert/upsert.page.html + 87,88 + + Type your Twitter account username + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,76 + + Only username#1234 format supported. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 77,78 + + Type your Discord account username + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 89,90 + + Settings + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 91,92 + + Save changes + + + reputation + + src/app/components/member/components/member-reputation-drawer/member-reputation-drawer.component.html + 15 + + + src/app/components/member/components/member-reputation-modal/member-reputation-modal.component.html + 17 + + reputation + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 15,16 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 29,30 + + Make a bid + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 44,45 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 9,10 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 44,45 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46,47 + + NFT image + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 61 + + Ends + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 66 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 63 + + Royalties + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 72,73 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 116,117 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 66,67 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 69,70 + + Royalties are automatically deducted and paid to artists. + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 91 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 94 + + Current highest bid + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 92 + + + src/app/pages/nft/pages/nft/nft.page.html + 59 + + Min bid + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 95 + + + src/app/pages/nft/pages/nft/nft.page.html + 61 + + Your bid is the highest + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Current price is refreshing in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 152,153 + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 156,157 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 196,197 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 277,278 + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + + By checking this box, you agree with + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 162,163 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 108,109 + + By checking this box, you agree with + + + Terms and Conditions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 165,166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 111,112 + + Terms and Conditions + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 171 + + Make a bid + + + Send IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 180,181 + + Send IOTA to following address (please restake after!): + + + Copied + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 189 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 240 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150 + + + src/app/components/share/share.component.html + 11 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 139 + + + src/app/components/wallet-address/wallet-address.component.html + 24 + + Copied + + + Copy + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 190 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 241 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 151 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 140 + + + src/app/components/wallet-address/wallet-address.component.html + 25 + + Copy + + + Do not send funds from an exchange, always use wallets you fully control. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 201 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + Do not send funds from an exchange, always use wallets you fully control. + + + Firefly + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 210 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 166 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 151 + + Firefly + + + Tanglepay + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 219 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 300 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 175 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 160 + + Tanglepay + + + Send + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130 + + Send + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231,232 + + IOTA to following address (please restake after!): + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 247 + + Your transactions + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 253,254 + + Sent Date + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 254,255 + + Time + + + Action + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,256 + + Action + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 256,257 + + + src/app/pages/nft/pages/nft/nft.page.html + 170,171 + + + src/app/pages/nft/pages/nft/nft.page.html + 204,205 + + Amount + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 258,259 + + Detail + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 270,271 + + + src/app/pages/nft/pages/nft/nft.page.html + 171,172 + + + src/app/pages/nft/pages/nft/nft.page.html + 190,191 + + + src/app/pages/nft/pages/nft/nft.page.html + 205,206 + + + src/app/pages/nft/pages/nft/nft.page.html + 219,220 + + Link + + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 282 + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 314,315 + + Congratulations you won the NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 320 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 238 + + Close checkout + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 325 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 243 + + Show my NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 337,338 + + Bidding is expired. Good luck next time :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 227 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 368 + + Generated NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 229 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 370 + + SFT + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 47,48 + + day + + + Price + + src/app/components/nft/components/nft-card/nft-card.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 12 + + + src/app/pages/collection/pages/collection/collection.page.html + 190 + + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 65 + + + src/app/pages/market/pages/collections/collections.page.html + 162 + + + src/app/pages/market/pages/nfts/nfts.page.html + 50 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 71,72 + + + src/app/pages/nft/pages/new/single/single.page.html + 62 + + Price + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 73 + + Current bid + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 88,89 + + Owned by + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 100,101 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 155,154 + + New NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 15,16 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 29,30 + + Checkout + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 71,72 + + Total price + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 117 + + Confirm and Lock + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121 + + Your NFT will be locked for purchase for + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121,122 + + minutes + + + remaining to make the transfer. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 132,133 + + remaining to make the transfer. + + + Expired + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 133,134 + + Expired + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 137 + + We received invalid amount. Try again. + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141,142 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130,131 + + IOTA to following address (please restake after!): + + + Transaction history + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 214 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 177 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 204 + + Transaction history + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 204 + + Validating your transaction... + + + Transaction complete. Congratulations. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 232,233 + + Transaction complete. Congratulations. + + + + + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 10,11 + + + src/app/pages/collection/pages/collection/collection.page.html + 55,56 + + + src/app/pages/collection/pages/collection/collection.page.html + 70,71 + + + + + d + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26 + + d + + + h + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34 + + h + + + hours + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34,35 + + hours + + + m + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42 + + m + + + min + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42,43 + + min + + + s + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50 + + s + + + sec + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50,51 + + sec + + + Sale Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 34 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 50,51 + + Sale Starts + + + Auction Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 37 + + Auction Starts + + + Auction Ends + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 40 + + Auction Ends + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 16,17 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 31,32 + + Preview + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 59,60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 74,75 + + + src/app/pages/nft/pages/nft/nft.page.html + 43,44 + + Current price + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68,69 + + Author + + + Migrate + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100,101 + + + src/app/pages/nft/pages/nft/nft.page.html + 291,292 + + Migrate + + + Shimmer/Mainnet (Tokenization)...SOON. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 102,104 + + + src/app/pages/nft/pages/nft/nft.page.html + 293,295 + + Shimmer/Mainnet (Tokenization)...SOON. + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 108,109 + + + src/app/pages/nft/pages/nft/nft.page.html + 299,300 + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 114,115 + + + src/app/pages/nft/pages/nft/nft.page.html + 305,306 + + IPFS Metadata + + + Preparing... + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 116 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 122 + + Preparing... + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 120,121 + + + src/app/pages/nft/pages/nft/nft.page.html + 312,313 + + IPFS Image + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149,150 + + + src/app/pages/nft/pages/new/single/single.page.html + 297,298 + + + src/app/pages/nft/pages/nft/nft.page.html + 15 + + NFT Image + + + Trade info + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 3,5 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 3,4 + + Trade info + + + Floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 12 + + Floor price + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 41 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 40,41 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 101,102 + + + src/app/pages/nft/pages/new/single/single.page.html + 90,91 + + Available On is required. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 50 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 49,50 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 112,113 + + + src/app/pages/nft/pages/new/single/single.page.html + 100,101 + + Available on + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 57 + + Various auction length coming next sprint once community have a vote! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + Duration of auction is 3 days + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 158 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 91,92 + + Once your listing is complete, you will get a confirmation message. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 159 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Confirm listing + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 62,63 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 532,533 + + Open Sale + + + Specific member(s) only (Transfer) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Specific member(s) only (Transfer) + + + Reserve for specific buyer + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 82,83 + + Reserve for specific buyer + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2,4 + + Trade history + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 6,8 + + Item is yours and yours only + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 11 + + This will make your item unavailable for sale. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 12 + + Stop sale! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 16,17 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 31,32 + + List Item for sale + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 86,87 + + Not for sale + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 90,91 + + Fixed price + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 94,95 + + Auction + + + Donut graph coming SOON. + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 40,41 + + Donut graph coming SOON. + + + Commencing + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 5,6 + + Commencing + + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 7,8 + + In-Progress + + + Completed + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 9,10 + + Completed + + + + Share + + src/app/components/share/share.component.html + 5,6 + + + src/app/components/share/share.component.html + 18,19 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 14,15 + + Share + + + Copy to clipboard + + src/app/components/share/share.component.html + 12 + + Copy to clipboard + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 2,3 + + + src/app/pages/award/pages/new/new.page.html + 109,110 + + + src/app/pages/proposal/pages/new/new.page.html + 248,249 + + Space is required. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 11,12 + + Select Space + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 65,67 + + + src/app/pages/award/pages/new/new.page.html + 138,139 + + + src/app/pages/proposal/pages/new/new.page.html + 277,278 + + Select a space + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 14,13 + + All Spaces + + + No Connections + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 2,3 + + No Connections + + + Rep. weight + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 7,8 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 68,69 + + Rep. weight + + + Status + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 8,9 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 72,73 + + Status + + + Established + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 33 + + Established + + + Recognised + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 34 + + Recognised + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 11,12 + + + src/app/pages/member/pages/member/member.page.html + 30 + + Joined + + + members + + src/app/components/space/components/space-card/space-card.component.html + 28 + + + src/app/pages/discover/pages/members/members.page.html + 55,56 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 10,11 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 35,36 + + members + + + Value range is 0-1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 8 + + Value range is 0-1000 + + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 30,31 + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + + Equal + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 39 + + Equal + + + Half + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 40 + + Half + + + Double + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 41 + + Double + + + Earned Badge + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + Earned Badge + + + with + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + with + + + Show less + + src/app/components/timeline-badges/timeline-badges.component.html + 38 + + + src/app/components/timeline-nft/timeline-nft.component.html + 114 + + Show less + + + Show more + + src/app/components/timeline-badges/timeline-badges.component.html + 39 + + + src/app/components/timeline-nft/timeline-nft.component.html + 115 + + Show more + + + Timeline + + src/app/components/timeline-nft/timeline-nft.component.html + 1 + + Timeline + + + Listed by + + src/app/components/timeline-nft/timeline-nft.component.html + 20 + + Listed by + + + Made available for auction by + + src/app/components/timeline-nft/timeline-nft.component.html + 23 + + Made available for auction by + + + Purchased by + + src/app/components/timeline-nft/timeline-nft.component.html + 59 + + Purchased by + + + details + + src/app/components/timeline-nft/timeline-nft.component.html + 61 + + details + + + Invalid + + src/app/components/timeline-nft/timeline-nft.component.html + 73,74 + + Invalid + + + Listed by space + + src/app/components/timeline-nft/timeline-nft.component.html + 104 + + Listed by space + + + Bill (owner) + + src/app/components/timeline-nft/timeline-nft.component.ts + 46 + + Bill (owner) + + + Bill (royalty) + + src/app/components/timeline-nft/timeline-nft.component.ts + 48 + + Bill (royalty) + + + Credit + + src/app/components/timeline-nft/timeline-nft.component.ts + 51 + + Credit + + + Payment + + src/app/components/timeline-nft/timeline-nft.component.ts + 53 + + Payment + + + Order + + src/app/components/timeline-nft/timeline-nft.component.ts + 55 + + Order + + + Generate address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 12,13 + + Generate address + + + Make transaction + + src/app/components/wallet-address/iota-address/iota-address.component.html + 33,34 + + Make transaction + + + Wait for confirmation + + src/app/components/wallet-address/iota-address/iota-address.component.html + 55,56 + + Wait for confirmation + + + Confirmed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 78,79 + + Confirmed + + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/iota-address/iota-address.component.html + 104,105 + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/iota-address/iota-address.component.html + 105 + + space + + + profile + + src/app/components/wallet-address/iota-address/iota-address.component.html + 106 + + profile + + + for future transactions. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 107,108 + + for future transactions. + + + Generate new address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 111 + + Generate new address + + + Send a small + + src/app/components/wallet-address/iota-address/iota-address.component.html + 120 + + Send a small + + + amount to validate your address. This expires in + + src/app/components/wallet-address/iota-address/iota-address.component.html + 121 + + amount to validate your address. This expires in + + + Expired. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 123,124 + + Expired. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 172 + + Wait for transaction to be validated. We will send back your transaction once completed + + + Validating address... + + src/app/components/wallet-address/iota-address/iota-address.component.html + 194 + + Validating address... + + + Now you can deal with NFT`s + + src/app/components/wallet-address/iota-address/iota-address.component.html + 221,222 + + Now you can deal with NFT`s + + + Finish Verification + + src/app/components/wallet-address/iota-address/iota-address.component.html + 225 + + Finish Verification + + + Not verified + + src/app/components/wallet-address/wallet-address.component.html + 4,5 + + Not verified + + + Verify wallet + + src/app/components/wallet-address/wallet-address.component.html + 9,10 + + Verify wallet + + + Verified + + src/app/components/wallet-address/wallet-address.component.html + 18,19 + + Verified + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 43 + + Verify your + + + address + + src/app/components/wallet-address/wallet-address.component.html + 43 + + + src/app/components/wallet-address/wallet-address.component.html + 59 + + address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 59 + + Verify your + + + Detailed Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Detailed Info + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.html + 3,4 + + Badges used / available + + + End Date + + src/app/pages/award/pages/award/award-info/award-info.component.html + 9,10 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 50 + + End Date + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 16 + + Owner + + + Award info + + src/app/pages/award/pages/award/award.page.html + 5,6 + + + src/app/pages/award/pages/new/new.page.html + 17,18 + + Award info + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 81,82 + + + src/app/pages/award/pages/award/award.page.html + 176,177 + + Check out award + + + Approve Award + + src/app/pages/award/pages/award/award.page.html + 91,92 + + Approve Award + + + Approve + + src/app/pages/award/pages/award/award.page.html + 103 + + Approve + + + Decline + + src/app/pages/award/pages/award/award.page.html + 114 + + Decline + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 128,129 + + Confirm your participation + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 136,137 + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 142,143 + + Provide description or link to your work. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 151 + + Submit + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 35 + + + src/app/pages/space/pages/space/space.page.ts + 30 + + Overview + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 94 + + Participants + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2,4 + + New Award + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14,15 + + + src/app/pages/proposal/pages/new/new.page.html + 23,24 + + Title is required. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19,20 + + Title and description will be included on the Award. End date determines the duration of the Award. + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 23,24 + + You must enter name. + + + Title + + src/app/pages/award/pages/new/new.page.html + 28 + + + src/app/pages/proposal/pages/new/new.page.html + 28 + + + src/app/pages/space/pages/upsert/upsert.page.html + 29 + + Title + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 35,36 + + + src/app/pages/proposal/pages/new/new.page.html + 51,52 + + End Date is required. + + + End + + src/app/pages/award/pages/new/new.page.html + 45 + + + src/app/pages/proposal/pages/new/new.page.html + 62 + + End + + + Award description + + src/app/pages/award/pages/new/new.page.html + 55,56 + + Award description + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 66,67 + + Badge definition + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 68,69 + + Title and description will be included on the badge. + + + Badge Title is required. + + src/app/pages/award/pages/new/new.page.html + 73,74 + + Badge Title is required. + + + Badge Title + + src/app/pages/award/pages/new/new.page.html + 78,79 + + Badge Title + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 89,90 + + Badge description + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 103,104 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 363,364 + + + src/app/pages/proposal/pages/new/new.page.html + 242,243 + + Space Info + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 105,106 + + This is the space that will list the award. + + + Reward Info + + src/app/pages/award/pages/new/new.page.html + 155,156 + + Reward Info + + + Defines the amount of XP for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 157,158 + + Defines the amount of XP for each badge and the number of badges available. + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 162,163 + + + src/app/pages/award/pages/new/new.page.html + 182,183 + + Minimum 1 and maximum 10000. + + + Total XP (Max 10000) + + src/app/pages/award/pages/new/new.page.html + 167,168 + + Total XP (Max 10000) + + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + src/app/pages/award/pages/new/new.page.html + 177,178 + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + + Number of Badges + + src/app/pages/award/pages/new/new.page.html + 187,188 + + Number of Badges + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 197,198 + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + + Badge + + src/app/pages/award/pages/new/new.page.html + 206 + + Badge + + + What the badge looks like. + + src/app/pages/award/pages/new/new.page.html + 207,208 + + What the badge looks like. + + + Mint an unique NTT badge. + + src/app/pages/award/pages/new/new.page.html + 216,217 + + Mint an unique NTT badge. + + + Mint Avatar + + src/app/pages/award/pages/new/new.page.html + 225 + + Mint Avatar + + + WOW! Now reward your members with it! + + src/app/pages/award/pages/new/new.page.html + 238,239 + + WOW! Now reward your members with it! + + + Award Setup + + src/app/pages/award/pages/new/new.page.html + 245,246 + + Award Setup + + + Defines who and how can get a badge. + + src/app/pages/award/pages/new/new.page.html + 247,248 + + Defines who and how can get a badge. + + + Guardian approval + + src/app/pages/award/pages/new/new.page.html + 254,255 + + Guardian approval + + + The award must be approved by the guardians of the space before it's active or distributed + + src/app/pages/award/pages/new/new.page.html + 260,261 + + The award must be approved by the guardians of the space before it's active or distributed + + + Discord Activity + + src/app/pages/award/pages/new/new.page.html + 265,266 + + Discord Activity + + + Github Activity + + src/app/pages/award/pages/new/new.page.html + 275,276 + + Github Activity + + + Custom and more + + src/app/pages/award/pages/new/new.page.html + 285,286 + + Custom and more + + + Create award + + src/app/pages/award/pages/new/new.page.html + 310,311 + + Create award + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2,3 + + Award Description + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 39 + + + src/app/pages/award/pages/participants/participants.page.html + 46,47 + + + src/app/pages/proposal/pages/participants/participants.page.html + 24 + + + src/app/pages/proposal/pages/participants/participants.page.html + 31,32 + + Find Participant + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 51 + + + src/app/pages/proposal/pages/participants/participants.page.html + 36 + + + src/app/pages/space/pages/members/members.page.html + 49,50 + + Showing only few top records... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 59 + + + src/app/pages/proposal/pages/participants/participants.page.html + 44 + + No Participants + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 71 + + Reward + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 82 + + Reward again + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 39 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 131 + + + src/app/pages/space/pages/awards/awards.page.ts + 23 + + + src/app/pages/space/pages/collections/collections.page.ts + 23 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 23 + + Pending + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 40 + + Issued + + + Visit website + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 7,8 + + Visit website + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 18,19 + + Who can buy? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 22,23 + + Open sale + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 28,29 + + Space Members Only + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 34,35 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 40,41 + + Space Members with Badge Only + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 46,47 + + Must hold at least one NFT from each selected Collections + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51,52 + + (One NFT per member) + + + The badges you need + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 78 + + The badges you need + + + Resources + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89 + + Resources + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 114 + + Member discounts + + + Discount for members with XP + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 119 + + Discount for members with XP + + + Guardians of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 47 + + Guardians of Space Only + + + Members of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 49 + + Members of Space Only + + + Members With Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 51 + + Members With Badge Only + + + Check out collection + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 72 + + Check out collection + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 3 + + About collection + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 11 + + Limited edition + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 26 + + + src/app/pages/collection/pages/collection/collection.page.html + 118 + + Publish Collection + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 30 + + + src/app/pages/collection/pages/collection/collection.page.html + 122 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 36 + + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Cancel Collection + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 132 + + Edit Collection + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 69,70 + + Royalties goes to + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 79,80 + + Starts at + + + Items + + src/app/pages/collection/pages/collection/collection.page.html + 86,87 + + Items + + + Price starts at + + src/app/pages/collection/pages/collection/collection.page.html + 96,97 + + Price starts at + + + Sale in progress + + src/app/pages/collection/pages/collection/collection.page.html + 104,105 + + Sale in progress + + + remaining + + src/app/pages/collection/pages/collection/collection.page.html + 106,107 + + + src/app/pages/nft/pages/nft/nft.page.html + 86,87 + + remaining + + + Find item + + src/app/pages/collection/pages/collection/collection.page.html + 156 + + + src/app/pages/member/pages/nfts/nfts.page.html + 12 + + Find item + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 166,167 + + + src/app/pages/nft/pages/new/new.page.html + 2,3 + + Create NFT + + + Recent + + src/app/pages/collection/pages/collection/collection.page.html + 192 + + + src/app/pages/collection/pages/collection/collection.page.html + 209 + + + src/app/pages/discover/pages/awards/awards.page.html + 20 + + + src/app/pages/discover/pages/awards/awards.page.html + 31 + + + src/app/pages/discover/pages/collections/collections.page.html + 40 + + + src/app/pages/discover/pages/collections/collections.page.html + 51 + + + src/app/pages/discover/pages/members/members.page.html + 31 + + + src/app/pages/discover/pages/members/members.page.html + 42 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 20 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 31 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 20 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 33 + + + src/app/pages/market/pages/collections/collections.page.html + 154 + + + src/app/pages/market/pages/collections/collections.page.html + 171 + + + src/app/pages/market/pages/nfts/nfts.page.html + 42 + + + src/app/pages/market/pages/nfts/nfts.page.html + 59 + + Recent + + + Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 193 + + + src/app/pages/market/pages/collections/collections.page.html + 155 + + + src/app/pages/market/pages/nfts/nfts.page.html + 43 + + + src/app/pages/market/pages/nfts/nfts.page.html + 60 + + Low to High + + + High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 194 + + + src/app/pages/market/pages/collections/collections.page.html + 156 + + + src/app/pages/market/pages/nfts/nfts.page.html + 44 + + + src/app/pages/market/pages/nfts/nfts.page.html + 61 + + High to Low + + + Sort by + + src/app/pages/collection/pages/collection/collection.page.html + 199 + + + src/app/pages/discover/pages/awards/awards.page.html + 18 + + + src/app/pages/discover/pages/awards/awards.page.html + 24,25 + + + src/app/pages/discover/pages/collections/collections.page.html + 37,38 + + + src/app/pages/discover/pages/collections/collections.page.html + 44,45 + + + src/app/pages/discover/pages/members/members.page.html + 29 + + + src/app/pages/discover/pages/members/members.page.html + 35,36 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 18 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 24,25 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 18 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 24,25 + + + src/app/pages/market/pages/collections/collections.page.html + 152 + + + src/app/pages/market/pages/collections/collections.page.html + 161 + + + src/app/pages/market/pages/nfts/nfts.page.html + 40 + + + src/app/pages/market/pages/nfts/nfts.page.html + 49 + + Sort by + + + Price: Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 210 + + + src/app/pages/market/pages/collections/collections.page.html + 172 + + Price: Low to High + + + Price: High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 211 + + + src/app/pages/market/pages/collections/collections.page.html + 173 + + Price: High to Low + + + No NFTs + + src/app/pages/collection/pages/collection/collection.page.html + 233 + + + src/app/pages/market/pages/nfts/nfts.page.html + 84 + + + src/app/pages/member/pages/nfts/nfts.page.html + 32 + + + src/app/pages/nft/pages/nft/nft.page.html + 375 + + No NFTs + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2,3 + + Create new collection + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3,5 + + Edit collection + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18,19 + + Collection info + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20,21 + + Name and description will be included on the Collection. + + + Name + + src/app/pages/collection/pages/upsert/upsert.page.html + 30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 70,71 + + + src/app/pages/nft/pages/new/single/single.page.html + 26 + + Name + + + Description + + src/app/pages/collection/pages/upsert/upsert.page.html + 40,41 + + + src/app/pages/nft/pages/new/single/single.page.html + 36,37 + + Description + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 53,54 + + + src/app/pages/nft/pages/new/single/single.page.html + 49,50 + + Sales info + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 55,56 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 118 + + Royalty + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 120 + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 131,132 + + Royalties - Percentage fee + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 141,142 + + Example: 10 % , 20 % , etc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 150 + + Royalties goes to a different space + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 158,159 + + Royalties goes to a different space + + + Links + + src/app/pages/collection/pages/upsert/upsert.page.html + 181 + + Links + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 182,183 + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 187,188 + + Invalid URL. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 213,214 + + Link to your Twitter account + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 226,227 + + Invalid Discord username. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 233,234 + + Link to your Discord account + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 248,249 + + Discounts + + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + src/app/pages/collection/pages/upsert/upsert.page.html + 250,251 + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 298 + + Discount + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 311 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + Discount Amount + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 350,351 + + Add discount level + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 365,366 + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 383,384 + + Collection Type + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 385,386 + + Each type has different characteristics. This cannot be changed after creation. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 417 + + + src/app/pages/space/pages/upsert/upsert.page.html + 192 + + Banner + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 443 + + Banner is required. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + Placeholder + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 478 + + Placeholder is required. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 488,489 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 501,502 + + + src/app/pages/market/pages/collections/collections.page.html + 132,133 + + + src/app/pages/market/pages/collections/collections.page.html + 137,138 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 116,117 + + Category + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 490,491 + + Category is used when filtering content. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 494,495 + + Category. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 519,520 + + Collection Setup + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 521,522 + + Who has access to a given collection. + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 537,538 + + Everyone has access to this collection. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 547,548 + + Only Space Guardians can access. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 558,559 + + Only Space Members can access. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 569,570 + + Only Space Members with badge can access. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 585,586 + + Collection Options + + + Limited Edition + + src/app/pages/collection/pages/upsert/upsert.page.html + 590 + + Limited Edition + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 606 + + One NFT per Member Only + + + Select Collections + + src/app/pages/collection/pages/upsert/upsert.page.html + 629,630 + + Select Collections + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 677,678 + + Create collection + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 690,691 + + Save collection + + + Member seems to log out during the file upload request. + + src/app/pages/collection/pages/upsert/upsert.page.ts + 317 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 195 + + + src/app/pages/nft/pages/new/single/single.page.ts + 154 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 107 + + Member seems to log out during the file upload request. + + + My Overview + + src/app/pages/dashboard/dashboard.page.html + 2,3 + + My Overview + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 6,7 + + Pending Membership Requests + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 14,15 + + Your spaces + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 23 + + No Spaces yet + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 25,26 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 36,37 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 48,49 + + Active proposals + + + Oldest + + src/app/pages/discover/pages/awards/awards.page.html + 21 + + + src/app/pages/discover/pages/awards/awards.page.html + 32 + + + src/app/pages/discover/pages/collections/collections.page.html + 41 + + + src/app/pages/discover/pages/collections/collections.page.html + 52 + + + src/app/pages/discover/pages/members/members.page.html + 32 + + + src/app/pages/discover/pages/members/members.page.html + 43 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 21 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 32 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 21 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 34 + + Oldest + + + No Awards + + src/app/pages/discover/pages/awards/awards.page.html + 54 + + + src/app/pages/member/pages/awards/awards.page.html + 19 + + + src/app/pages/space/pages/awards/awards.page.html + 35 + + No Awards + + + collections + + src/app/pages/discover/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 185,186 + + collections + + + No Collections + + src/app/pages/discover/pages/collections/collections.page.html + 75 + + + src/app/pages/space/pages/collections/collections.page.html + 38 + + No Collections + + + Discover Soonaverse + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Discover Soonaverse + + + Enter the first few letters to search... + + src/app/pages/discover/pages/discover/discover.page.html + 7 + + Enter the first few letters to search... + + + Spaces + + src/app/pages/discover/pages/discover/discover.page.ts + 21 + + + src/app/pages/member/pages/member/member.page.ts + 29 + + Spaces + + + Collections + + src/app/pages/discover/pages/discover/discover.page.ts + 22 + + + src/app/pages/market/pages/market/market.page.ts + 23 + + + src/app/pages/space/pages/space/space.page.ts + 31 + + Collections + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 24 + + + src/app/pages/space/pages/space/space.page.ts + 32 + + Proposals + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 25 + + + src/app/pages/space/pages/space/space.page.ts + 34 + + Members + + + Include connections + + src/app/pages/discover/pages/members/members.page.html + 23,24 + + + src/app/pages/member/pages/activity/activity.page.html + 28,29 + + + src/app/pages/member/pages/spaces/member-spaces.component.html + 5,6 + + Include connections + + + (Select some space) + + src/app/pages/discover/pages/members/members.page.html + 24 + + + src/app/pages/member/pages/activity/activity.page.html + 29 + + (Select some space) + + + No Members + + src/app/pages/discover/pages/members/members.page.html + 66 + + + src/app/pages/space/pages/members/members.page.html + 58 + + No Members + + + proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 43,44 + + proposals + + + No Proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 55 + + + src/app/pages/space/pages/proposals/proposals.page.html + 35 + + No Proposals + + + No Spaces + + src/app/pages/discover/pages/spaces/spaces.page.html + 56 + + No Spaces + + + Open + + src/app/pages/discover/pages/spaces/spaces.page.ts + 29 + + Open + + + Welcome to The Soonaverse + + src/app/pages/home/home.page.html + 5,6 + + Welcome to The Soonaverse + + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + src/app/pages/home/home.page.html + 8,9 + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + + Join Us + + src/app/pages/home/home.page.html + 19,20 + + Join Us + + + Marketplace + + src/app/pages/home/home.page.html + 31 + + Marketplace + + + See Docs + + src/app/pages/home/home.page.html + 43,44 + + See Docs + + + Get started with the Soonaverse + + src/app/pages/home/home.page.html + 52,53 + + Get started with the Soonaverse + + + Not sure where to start? Find featured spaces and NFT Collections below. + + src/app/pages/home/home.page.html + 54 + + Not sure where to start? Find featured spaces and NFT Collections below. + + + Trending Collections + + src/app/pages/home/home.page.html + 60,61 + + Trending Collections + + + Go to Marketplace + + src/app/pages/home/home.page.html + 70 + + Go to Marketplace + + + Discover more + + src/app/pages/home/home.page.html + 86 + + + src/app/pages/home/home.page.html + 102 + + + src/app/pages/home/home.page.html + 122 + + Discover more + + + Popular spaces + + src/app/pages/home/home.page.html + 92,93 + + Popular spaces + + + Creating your community is easy as 1-2-3 + + src/app/pages/home/home.page.html + 130,131 + + Creating your community is easy as 1-2-3 + + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + src/app/pages/home/home.page.html + 132,133 + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + + StepArticle image + + src/app/pages/home/home.page.html + 143,144 + + StepArticle image + + + Voting is essential and it needs to be on-chain and FREE. + + src/app/pages/home/home.page.html + 162 + + Voting is essential and it needs to be on-chain and FREE. + + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + src/app/pages/home/home.page.html + 165,167 + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + + Go there now + + src/app/pages/home/home.page.html + 177 + + Go there now + + + Want to learn more about SoonLabs? + + src/app/pages/home/home.page.html + 202,203 + + Want to learn more about SoonLabs? + + + Visit YouTube + + src/app/pages/home/home.page.html + 213 + + Visit YouTube + + + Who’s using the Soonaverse? + + src/app/pages/home/home.page.html + 222,224 + + Who’s using the Soonaverse? + + + Investors + + src/app/pages/home/home.page.html + 275,276 + + Investors + + + Privacy + + src/app/pages/home/home.page.html + 285,286 + + Privacy + + + Terms + + src/app/pages/home/home.page.html + 295,296 + + Terms + + + Powered by SoonLabs + + src/app/pages/home/home.page.html + 306,307 + + + src/app/pages/home/home.page.html + 318,319 + + Powered by SoonLabs + + + Create your community + + src/app/pages/home/home.page.ts + 33,31 + + Create your community + + + Feeless, secure, on-chain voting, and “one click” creation tools. + + src/app/pages/home/home.page.ts + 34 + + Feeless, secure, on-chain voting, and “one click” creation tools. + + + Build reputation and rewards + + src/app/pages/home/home.page.ts + 38,36 + + Build reputation and rewards + + + Create incentives and build reputation, trust and community engagement. + + src/app/pages/home/home.page.ts + 39 + + Create incentives and build reputation, trust and community engagement. + + + Manage, Maintain, Grow + + src/app/pages/home/home.page.ts + 43,41 + + Manage, Maintain, Grow + + + Governance, voting, for both public and private communities. + + src/app/pages/home/home.page.ts + 44 + + Governance, voting, for both public and private communities. + + + NFTs + + src/app/pages/market/pages/collections/collections.page.html + 12,13 + + + src/app/pages/market/pages/nfts/nfts.page.html + 13,14 + + + src/app/pages/member/pages/member/member.page.ts + 30 + + NFTs + + + Select Access type + + src/app/pages/market/pages/collections/collections.page.html + 20,21 + + Select Access type + + + All accesses + + src/app/pages/market/pages/collections/collections.page.html + 25,26 + + + src/app/pages/market/pages/collections/collections.page.html + 32,33 + + + src/app/pages/market/pages/collections/collections.page.html + 111 + + All accesses + + + Open sale + + src/app/pages/market/pages/collections/collections.page.html + 38,39 + + + src/app/pages/market/pages/collections/collections.page.html + 45,46 + + + src/app/pages/market/pages/collections/collections.page.html + 112 + + Open sale + + + Space members only + + src/app/pages/market/pages/collections/collections.page.html + 51,52 + + + src/app/pages/market/pages/collections/collections.page.html + 58,59 + + + src/app/pages/market/pages/collections/collections.page.html + 113 + + Space members only + + + Space guardians only + + src/app/pages/market/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 71,72 + + + src/app/pages/market/pages/collections/collections.page.html + 114 + + Space guardians only + + + Space members with badge only + + src/app/pages/market/pages/collections/collections.page.html + 77,78 + + + src/app/pages/market/pages/collections/collections.page.html + 84,85 + + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Space members with badge only + + + At least one NFT from collections + + src/app/pages/market/pages/collections/collections.page.html + 90,91 + + + src/app/pages/market/pages/collections/collections.page.html + 97,98 + + + src/app/pages/market/pages/collections/collections.page.html + 116 + + At least one NFT from collections + + + No collections + + src/app/pages/market/pages/collections/collections.page.html + 196 + + No collections + + + Marketplace + + src/app/pages/market/pages/market/market.page.html + 2,4 + + Marketplace + + + Spaces, awards, proposals or members... + + src/app/pages/market/pages/market/market.page.html + 7 + + Spaces, awards, proposals or members... + + + NFT's + + src/app/pages/market/pages/market/market.page.ts + 24 + + NFT's + + + On Auction + + src/app/pages/market/pages/nfts/nfts.page.ts + 40,37 + + On Auction + + + Owned + + src/app/pages/market/pages/nfts/nfts.page.ts + 41 + + + src/app/pages/nft/pages/nft/nft.page.html + 6,7 + + Owned + + + View space + + src/app/pages/member/pages/activity/activity.page.html + 20,21 + + View space + + + Awards Completed + + src/app/pages/member/pages/activity/activity.page.html + 37 + + Awards Completed + + + Total Reputation + + src/app/pages/member/pages/activity/activity.page.html + 39 + + Total Reputation + + + Earned badges + + src/app/pages/member/pages/activity/activity.page.html + 47 + + Earned badges + + + More + + src/app/pages/member/pages/activity/activity.page.html + 51,52 + + More + + + Reputation + + src/app/pages/member/pages/activity/activity.page.html + 72,73 + + Reputation + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 6,7 + + Pending + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + Issued + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 21,22 + + Discover Awards + + + No Badges yet + + src/app/pages/member/pages/badges/badges.page.html + 19,20 + + No Badges yet + + + Discover Badges + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Discover Badges + + + My profile + + src/app/pages/member/pages/member/member.page.html + 9 + + My profile + + + Profile + + src/app/pages/member/pages/member/member.page.html + 10 + + Profile + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 15,16 + + Profile info + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 26 + + Activity + + + Badges + + src/app/pages/member/pages/member/member.page.ts + 28 + + Badges + + + (Join space with alliance) + + src/app/pages/member/pages/spaces/member-spaces.component.html + 6 + + (Join space with alliance) + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 44,45 + + Some files have not been uploaded + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 48,49 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 57 + + Uploaded CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 69,70 + + Filename + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 92,93 + + Error + + + Select collection + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 123,124 + + + src/app/pages/nft/pages/new/single/single.page.html + 349,350 + + Select collection + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136,137 + + Upload existing CSV + + + Upload back once you generate bellow + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138,139 + + Upload back once you generate bellow + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 166 + + You have to upload images first. + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 191,192 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Single + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Multiple + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14,15 + + NFT info + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16,17 + + Name and description will be included on the NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 21,22 + + Name is required. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 32,33 + + Description is required. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 51,52 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + + Properties + + src/app/pages/nft/pages/new/single/single.page.html + 111,112 + + Properties + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 113,114 + + Properties show up underneath your item. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 120,121 + + Property name (E.g. Character) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 121,122 + + Value (E.g. Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 133,134 + + + src/app/pages/nft/pages/new/single/single.page.html + 166,168 + + + src/app/pages/nft/pages/new/single/single.page.html + 173,174 + + Property name + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 144 + + + src/app/pages/nft/pages/new/single/single.page.html + 178,180 + + + src/app/pages/nft/pages/new/single/single.page.html + 186 + + + src/app/pages/nft/pages/new/single/single.page.html + 236 + + + src/app/pages/nft/pages/new/single/single.page.html + 270,272 + + + src/app/pages/nft/pages/new/single/single.page.html + 276 + + Value + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 159 + + Property + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 196,197 + + Add property + + + Stats + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Stats + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 205,206 + + Stats show up underneath your item. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 212,213 + + Stats name (E.g. Stamina) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 213,214 + + Value (E.g. 10, 1/10 , etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 225,226 + + + src/app/pages/nft/pages/new/single/single.page.html + 258,260 + + + src/app/pages/nft/pages/new/single/single.page.html + 265,266 + + Stat name + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 251 + + Stat + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287,288 + + Add stat + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 299,300 + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 324 + + Media is required + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 338,339 + + Select one of your collections to display this NFT. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 371,372 + + Create NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 381,382 + + Preview NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 142 + + File name is not valid + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 4,5 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 248,249 + + Check out nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 58 + + Current highest bid + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 94 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 102 + + Sale hasn't started yet + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 110 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 118 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 123,124 + + Sell NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 124,125 + + Change Fixed Price + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 125,126 + + Change Auction + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + Place bid + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 138 + + Buy now + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 151,152 + + Current Bids + + + My Bids + + src/app/pages/nft/pages/nft/nft.page.html + 155,156 + + My Bids + + + My Transactions + + src/app/pages/nft/pages/nft/nft.page.html + 159,160 + + My Transactions + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 168,169 + + Member + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 169,170 + + Bidded on + + + Date + + src/app/pages/nft/pages/nft/nft.page.html + 202,203 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 8,9 + + Date + + + Type + + src/app/pages/nft/pages/nft/nft.page.html + 203,204 + + Type + + + On-Chain Record + + src/app/pages/nft/pages/nft/nft.page.html + 276,277 + + On-Chain Record + + + Preparing... + + src/app/pages/nft/pages/nft/nft.page.html + 277,278 + + Preparing... + + + View + + src/app/pages/nft/pages/nft/nft.page.html + 280,281 + + + src/app/pages/nft/pages/nft/nft.page.html + 308,309 + + + src/app/pages/nft/pages/nft/nft.page.html + 315,316 + + View + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 285,286 + + View all of the transaction details of this NFT on the Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 340,341 + + About the collection + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 343,344 + + Show + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 344 + + collection + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 353,355 + + by + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2,4 + + New Proposal + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17,18 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 5,6 + + Proposal info + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19,20 + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 35,36 + + Start Date is required. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 45 + + Start + + + Commencing milestone. + + src/app/pages/proposal/pages/new/new.page.html + 69,70 + + Commencing milestone. + + + Commencing milestone + + src/app/pages/proposal/pages/new/new.page.html + 76,77 + + Commencing milestone + + + Start milestone. + + src/app/pages/proposal/pages/new/new.page.html + 83,84 + + Start milestone. + + + Start milestone + + src/app/pages/proposal/pages/new/new.page.html + 90,91 + + Start milestone + + + End milestone. + + src/app/pages/proposal/pages/new/new.page.html + 97,98 + + End milestone. + + + End milestone + + src/app/pages/proposal/pages/new/new.page.html + 104,105 + + End milestone + + + Proposal description is required. + + src/app/pages/proposal/pages/new/new.page.html + 112,113 + + Proposal description is required. + + + Proposal description + + src/app/pages/proposal/pages/new/new.page.html + 117,118 + + Proposal description + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 127,128 + + Question Info + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 129,130 + + Title and description will only be displayed for this question. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 136,137 + + Question Title is required. + + + Question Title + + src/app/pages/proposal/pages/new/new.page.html + 140,141 + + Question Title + + + Question description + + src/app/pages/proposal/pages/new/new.page.html + 152,153 + + Question description + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 178,179 + + Text and description for each individual answer. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 183,184 + + Answer Text is required. + + + Answer Text + + src/app/pages/proposal/pages/new/new.page.html + 187,188 + + Answer Text + + + Answer description + + src/app/pages/proposal/pages/new/new.page.html + 198,199 + + Answer description + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 233,234 + + Add Choice + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 244,245 + + This is the space that will list the proposal. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 292,293 + + Proposal Setup + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 294,295 + + Defines who has access to the proposal and what is the voting method. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 299 + + Target Participants + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 306,307 + + All Guardians + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 312,313 + + Only guardians can vote on this proposal + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 316,317 + + All Members + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 322,323 + + All members can vote on this proposal + + + IOTA Token Holders + + src/app/pages/proposal/pages/new/new.page.html + 327,328 + + IOTA Token Holders + + + All IOTA token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 333,334 + + All IOTA token holders can vote. + + + Voting Type + + src/app/pages/proposal/pages/new/new.page.html + 341 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 55 + + Voting Type + + + Member - One Vote + + src/app/pages/proposal/pages/new/new.page.html + 348,349 + + Member - One Vote + + + Each member of the space gets one vote + + src/app/pages/proposal/pages/new/new.page.html + 354,355 + + Each member of the space gets one vote + + + XP Reputation - Space + + src/app/pages/proposal/pages/new/new.page.html + 362,363 + + XP Reputation - Space + + + Votes are weighted based on total amount of XP a member has in the space + + src/app/pages/proposal/pages/new/new.page.html + 368,369 + + Votes are weighted based on total amount of XP a member has in the space + + + XP Reputation - Space + Connection + + src/app/pages/proposal/pages/new/new.page.html + 378,379 + + XP Reputation - Space + Connection + + + Votes are weighted based on total amount of XP a member has in the space & connections + + src/app/pages/proposal/pages/new/new.page.html + 384,385 + + Votes are weighted based on total amount of XP a member has in the space & connections + + + XP Reputation - Selected Badges + + src/app/pages/proposal/pages/new/new.page.html + 394,395 + + XP Reputation - Selected Badges + + + Votes are weighted based on total amount of XP a member has for selected badges + + src/app/pages/proposal/pages/new/new.page.html + 400,401 + + Votes are weighted based on total amount of XP a member has for selected badges + + + Reputation Options + + src/app/pages/proposal/pages/new/new.page.html + 412,413 + + Reputation Options + + + Set Minimum Weight + + src/app/pages/proposal/pages/new/new.page.html + 423,424 + + Set Minimum Weight + + + Select Badge + + src/app/pages/proposal/pages/new/new.page.html + 438,439 + + Select Badge + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 465,466 + + Create Proposal + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 322 + + Choice + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + badge + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 2,3 + + Final Results + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 58,59 + + Proposal Description + + + Voted + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 3,4 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 38 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 129 + + Voted + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 4,5 + + Vote Now + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 5 + + Voting starts + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 9 + + You are not part of the vote + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 12 + + In order to vote, you must be part of the space before proposal was created. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 18 + + Log in to vote + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 21 + + In order to vote, you must login first. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 27 + + Pending Guardian Approval + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 30 + + This proposal has not been approved by any Guardian yet. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 52 + + Weight + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 37 + + Pending Vote + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 124 + + joined soonaverse on + + + Voter + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 7,8 + + Voter + + + Option + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 9,10 + + Option + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 26 + + Approve + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 28 + + Decline + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 34,35 + + Current Milestone + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 39 + + Commence Date + + + Start Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 45 + + Start Date + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 56 + + Voting Type of this proposal. + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 60 + + Total Weight + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 61 + + Total weight within this proposal for all participants. + + + Export to JSON + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 65,67 + + Export to JSON + + + Cast your vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 50,51 + + Cast your vote + + + Open Firefly to Vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 53 + + Open Firefly to Vote + + + Voting instructions + + src/app/pages/proposal/pages/proposal/proposal.page.html + 55 + + Voting instructions + + + You will select your options and execute the vote within Firefly. + + src/app/pages/proposal/pages/proposal/proposal.page.html + 57,58 + + You will select your options and execute the vote within Firefly. + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 64,65 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 117,118 + + Check out proposal + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 70,71 + + Current Results + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 91 + + Selected Badges + + + New + + src/app/pages/space/pages/awards/awards.page.html + 23,24 + + + src/app/pages/space/pages/collections/collections.page.html + 25,26 + + + src/app/pages/space/pages/proposals/proposals.page.html + 23,24 + + New + + + award + + src/app/pages/space/pages/awards/awards.page.html + 24 + + award + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 24 + + + src/app/pages/space/pages/members/members.page.html + 24 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 24 + + Active + + + Active + + src/app/pages/space/pages/members/members.page.html + 9 + + Active + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 18 + + Blocked + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 28 + + Blocked + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 35 + + + src/app/pages/space/pages/members/members.page.html + 43,44 + + Find Member + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 63 + + joined space on + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 78,79 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 81,82 + + Make Guardian + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 84,86 + + Accept Member + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 89,91 + + Block Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 91,93 + + Unblock Member + + + Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 3,5 + + Active Proposals + + + No Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 11 + + No Active Proposals + + + Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 24,26 + + Active Awards + + + No Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 32 + + No Active Awards + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 24 + + proposal + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 21,22 + + Check out space + + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 53,54 + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + + Show All + + src/app/pages/space/pages/space/space-about/space-about.component.html + 59,60 + + Show All + + + Connected spaces that you recognize + + src/app/pages/space/pages/space/space-about/space-about.component.html + 65,66 + + Connected spaces that you recognize + + + New connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 76,77 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 88 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 117 + + New connection + + + connections + + src/app/pages/space/pages/space/space-about/space-about.component.html + 104 + + connections + + + Close + + src/app/pages/space/pages/space/space-about/space-about.component.html + 120 + + Close + + + New + + src/app/pages/space/pages/space/space-about/space-about.component.html + 132 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 169 + + New + + + Edit + + src/app/pages/space/pages/space/space-about/space-about.component.html + 133 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 170 + + Edit + + + connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 134,135 + + connection + + + Form a connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 148 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Form a connection + + + Save + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 181 + + Save + + + Terminate alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 159,160 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 190,191 + + Terminate alliance + + + alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 171,172 + + alliance + + + Space's Wallet Address + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201,202 + + Space's Wallet Address + + + Wallet to hold funds for the Space. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 203,204 + + Wallet to hold funds for the Space. + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 252,253 + + Leave Space + + + About space + + src/app/pages/space/pages/space/space.page.html + 5,6 + + About space + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 53 + + + src/app/pages/space/pages/space/space.page.html + 113,114 + + Join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 77 + + + src/app/pages/space/pages/space/space.page.html + 139 + + Edit Space + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2,3 + + Add new space + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3,4 + + Edit space + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17,18 + + Space info + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19,20 + + Title and description will be included on the Space. + + + Space description + + src/app/pages/space/pages/upsert/upsert.page.html + 39,40 + + Space description + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 54,55 + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 100,101 + + Only discord invite code supported (i.e. RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 107,108 + + Type your Discord invite code + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 128,129 + + Space Type + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 130,131 + + Each type has different characteristics. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 139,140 + + Open for anyone to join instantly + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 143,144 + + Requires a member approval + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 163,164 + + Avatar is mandatory + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 236,237 + + Create space + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 249,250 + + Save space + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Upload new to replace existing. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + Your brand is key. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Make it personal. + + + + diff --git a/src/locale/messages.uk-UA.xlf b/src/locale/messages.uk-UA.xlf new file mode 100644 index 0000000..8bbc1d0 --- /dev/null +++ b/src/locale/messages.uk-UA.xlf @@ -0,0 +1,6844 @@ + + + + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 69 + + Back + + + Discover + + src/app/@shell/ui/header/header.component.html + 56,57 + + + src/app/pages/home/home.page.html + 18,19 + + Discover + + + Create new + + src/app/@shell/ui/header/header.component.html + 62 + + Create new + + + Space + + src/app/@shell/ui/header/header.component.html + 68,69 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 83,84 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 6,7 + + + src/app/pages/collection/pages/collection/collection.page.html + 54,55 + + + src/app/pages/market/pages/collections/collections.page.html + 122,123 + + + src/app/pages/market/pages/nfts/nfts.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 69,70 + + Space + + + Proposal + + src/app/@shell/ui/header/header.component.html + 71,72 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 23,24 + + Proposal + + + Award + + src/app/@shell/ui/header/header.component.html + 74,75 + + + src/app/pages/award/pages/award/award.page.html + 26,27 + + Award + + + Collection + + src/app/@shell/ui/header/header.component.html + 77,78 + + + src/app/pages/collection/pages/collection/collection.page.html + 19,20 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 114,115 + + + src/app/pages/nft/pages/new/single/single.page.html + 336,337 + + + src/app/pages/space/pages/collections/collections.page.html + 26 + + Collection + + + None. + + src/app/@shell/ui/header/header.component.html + 128,129 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 52 + + None. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 137,138 + + + src/app/components/auth/services/auth.service.ts + 315 + + My Profile + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 152,153 + + Purchase has not been completed + + + You have + + src/app/@shell/ui/header/header.component.html + 154 + + You have + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 154,155 + + to finish your transaction + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 156,157 + + Open Checkout + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 272 + + You won the NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 273 + + You are a proud owner of a new NFT. Congratulations! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 280 + + You lost your bid! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 281 + + Your bid on + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 282 + + was outbid. Try again! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 289 + + just offered + + + for + + src/app/@shell/ui/header/header.component.ts + 290 + + + src/app/components/timeline-nft/timeline-nft.component.html + 60 + + for + + + Your + + src/app/@shell/ui/header/header.component.ts + 291 + + Your + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 292 + + has received a new bid for + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 300,299 + + Unsupported + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 301 + + This notification is not yet supported in your language + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 12 + + Space + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 17 + + Proposal + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 22 + + Award + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27 + + Collection + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 34,35 + + Connect to your MetaMask wallet + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 52,53 + + Log out + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 56,57 + + Powered by + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8,10 + + The page you were looking for was not found + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 11,13 + + Discover Soonaverse + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 28,29 + + See Docs + + + Coming SOON + + src/app/@shell/ui/sider/sider.component.html + 35,36 + + + src/app/pages/award/pages/new/new.page.html + 271,272 + + + src/app/pages/award/pages/new/new.page.html + 281,282 + + + src/app/pages/award/pages/new/new.page.html + 291,292 + + Coming SOON + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 8,9 + + Metamask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 9,10 + + Connect to your Metamask wallet + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 20,21 + + Make sure you select public IOTA EVM Chain in MetaMask. + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 22,23 + + Network Name: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23,24 + + RPC URL: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 24,25 + + Chain ID: 1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 31,32 + + + src/app/pages/award/pages/award/award.page.html + 154 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 152 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 184 + + Cancel + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 1,3 + + Connect + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + Disconnect + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 111 + + Unable to sign transaction. Please try to reload page. + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 156 + + You must unlock your MetaMask first! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 167 + + You must enable access to read your account address. + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 189 + + Please make sure you select address in MetaMask! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 196 + + Unable to get nonce to authenticate! + + + You have to open Soonaverse in MetaMask app. + + src/app/components/auth/services/auth.service.ts + 239 + + You have to open Soonaverse in MetaMask app. + + + Failed to initialize MetaMask, try to reload page. + + src/app/components/auth/services/auth.service.ts + 241 + + Failed to initialize MetaMask, try to reload page. + + + Pending + + + src/app/components/award/components/award-status/award-status.component.html + 1,2 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 1,2 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 1,2 + + Pending + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 3,4 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 3,4 + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 3,4 + + Rejected + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 5 + + + src/app/pages/space/pages/awards/awards.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 25 + + Completed + + + Available + + src/app/components/award/components/award-status/award-status.component.html + 6 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 62 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 150,149 + + + src/app/pages/collection/pages/collection/collection.page.html + 91,92 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 39,37 + + + src/app/pages/space/pages/collections/collections.page.ts + 24 + + Available + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 4 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 553,554 + + Space Members Only + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 542,543 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 14 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 564,565 + + Space Members with Badge Only + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 574,575 + + At least one NFT from Collections + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 19 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 43,44 + + Starts in + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 21 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 46,47 + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26,27 + + days + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 24 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 50,51 + + Starts today + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 42 + + Limited Edition + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 57 + + Pending approval + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 67 + + + src/app/pages/space/pages/awards/awards.page.ts + 26 + + + src/app/pages/space/pages/collections/collections.page.ts + 25 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 26 + + Rejected + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 2,3 + + + src/app/pages/nft/pages/new/single/single.page.html + 342,343 + + Collection is required. + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 11,12 + + Select Collection + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 65,67 + + Select a Collection + + + Search + + src/app/components/collection/components/select-collection/select-collection.component.html + 74 + + + src/app/components/space/components/select-space/select-space.component.html + 74 + + + src/app/pages/discover/pages/discover/discover.page.html + 22,23 + + + src/app/pages/market/pages/market/market.page.html + 22,23 + + Search + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 84 + + + src/app/components/space/components/select-space/select-space.component.html + 84 + + No results for + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 14,13 + + All Collections + + + Wallet details + + src/app/components/member/components/member-about/member-about.component.html + 42,43 + + Wallet details + + + Member's Wallet Address. + + src/app/components/member/components/member-about/member-about.component.html + 44,45 + + Member's Wallet Address. + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 55,56 + + Recently joined spaces + + + All + + src/app/components/member/components/member-about/member-about.component.html + 58,59 + + + src/app/pages/discover/pages/spaces/spaces.page.ts + 28,27 + + + src/app/pages/market/pages/nfts/nfts.page.ts + 38,37 + + All + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 78,79 + + No Contribution Yet. + + + Latest Badges + + src/app/components/member/components/member-about/member-about.component.html + 84,85 + + Latest Badges + + + No badges + + src/app/components/member/components/member-about/member-about.component.html + 93,94 + + No badges + + + See all + + src/app/components/member/components/member-about/member-about.component.html + 97,98 + + See all + + + Connections + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 5 + + + src/app/pages/member/pages/activity/activity.page.html + 68 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 50,51 + + Connections + + + Awards + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 6 + + + src/app/pages/discover/pages/discover/discover.page.ts + 23 + + + src/app/pages/member/pages/member/member.page.ts + 27 + + + src/app/pages/space/pages/space/space.page.ts + 33 + + Awards + + + XP + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 7 + + + src/app/components/member/components/member-card/member-card.component.html + 31,32 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 16,17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 25,26 + + XP + + + Total reputation + + src/app/components/member/components/member-alliances-table/member-alliances-table.component.html + 29 + + Total reputation + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 38,39 + + awards + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 6,7 + + Display Name + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 7,8 + + Set a display name. This does not change your username. + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 11 + + Display name (optional) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 18,19 + + About + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19,20 + + A brief description of yourself shown on your profile. + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 22 + + Your description (optional) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 29,30 + + + src/app/pages/space/pages/upsert/upsert.page.html + 154 + + Avatar + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 30,31 + + Customise your Soonaverse identity. + + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 34,37 + + Mint a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 43,44 + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 49,50 + + + src/app/pages/space/pages/upsert/upsert.page.html + 52,53 + + Networking + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 51,52 + + + src/app/pages/space/pages/upsert/upsert.page.html + 60,61 + + Invalid Github username. + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 53,54 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67,68 + + Type your Github account username + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 63,64 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 206,207 + + + src/app/pages/space/pages/upsert/upsert.page.html + 80,81 + + Invalid Twitter username. + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 65,66 + + + src/app/pages/space/pages/upsert/upsert.page.html + 87,88 + + Type your Twitter account username + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,76 + + Only username#1234 format supported. + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 77,78 + + Type your Discord account username + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 89,90 + + Settings + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 91,92 + + Save changes + + + reputation + + src/app/components/member/components/member-reputation-drawer/member-reputation-drawer.component.html + 15 + + + src/app/components/member/components/member-reputation-modal/member-reputation-modal.component.html + 17 + + reputation + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 15,16 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 29,30 + + Make a bid + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 44,45 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 9,10 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 44,45 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46,47 + + NFT image + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 61 + + Ends + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 66 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 63 + + Royalties + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 72,73 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 116,117 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 66,67 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 69,70 + + Royalties are automatically deducted and paid to artists. + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 91 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 94 + + Current highest bid + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 92 + + + src/app/pages/nft/pages/nft/nft.page.html + 59 + + Min bid + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 95 + + + src/app/pages/nft/pages/nft/nft.page.html + 61 + + Your bid is the highest + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + Current price is refreshing in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 152,153 + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 156,157 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 196,197 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 277,278 + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + + By checking this box, you agree with + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 162,163 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 108,109 + + By checking this box, you agree with + + + Terms and Conditions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 165,166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 111,112 + + Terms and Conditions + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 171 + + Make a bid + + + Send IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 180,181 + + Send IOTA to following address (please restake after!): + + + Copied + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 189 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 240 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150 + + + src/app/components/share/share.component.html + 11 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 139 + + + src/app/components/wallet-address/wallet-address.component.html + 24 + + Copied + + + Copy + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 190 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 241 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 151 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 140 + + + src/app/components/wallet-address/wallet-address.component.html + 25 + + Copy + + + Do not send funds from an exchange, always use wallets you fully control. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 201 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + Do not send funds from an exchange, always use wallets you fully control. + + + Firefly + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 210 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 166 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 151 + + Firefly + + + Tanglepay + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 219 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 300 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 175 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 160 + + Tanglepay + + + Send + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130 + + Send + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 231,232 + + IOTA to following address (please restake after!): + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 247 + + Your transactions + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 253,254 + + Sent Date + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 254,255 + + Time + + + Action + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,256 + + Action + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 256,257 + + + src/app/pages/nft/pages/nft/nft.page.html + 170,171 + + + src/app/pages/nft/pages/nft/nft.page.html + 204,205 + + Amount + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 258,259 + + Detail + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 270,271 + + + src/app/pages/nft/pages/nft/nft.page.html + 171,172 + + + src/app/pages/nft/pages/nft/nft.page.html + 190,191 + + + src/app/pages/nft/pages/nft/nft.page.html + 205,206 + + + src/app/pages/nft/pages/nft/nft.page.html + 219,220 + + Link + + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 282 + + Do not send funds from an exchange, use only a Firefly or TanglePay wallet. + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 314,315 + + Congratulations you won the NFT. + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 320 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 238 + + Close checkout + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 325 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 243 + + Show my NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 337,338 + + Bidding is expired. Good luck next time :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 227 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 368 + + Generated NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 229 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 370 + + SFT + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 47,48 + + day + + + Price + + src/app/components/nft/components/nft-card/nft-card.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 12 + + + src/app/pages/collection/pages/collection/collection.page.html + 190 + + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 65 + + + src/app/pages/market/pages/collections/collections.page.html + 162 + + + src/app/pages/market/pages/nfts/nfts.page.html + 50 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 71,72 + + + src/app/pages/nft/pages/new/single/single.page.html + 62 + + Price + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 73 + + Current bid + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 88,89 + + Owned by + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 100,101 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 155,154 + + New NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 15,16 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 29,30 + + Checkout + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 71,72 + + Total price + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 117 + + Confirm and Lock + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121 + + Your NFT will be locked for purchase for + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 121,122 + + minutes + + + remaining to make the transfer. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 132,133 + + remaining to make the transfer. + + + Expired + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 133,134 + + Expired + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 137 + + We received invalid amount. Try again. + + + IOTA to following address (please restake after!): + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 141,142 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 130,131 + + IOTA to following address (please restake after!): + + + Transaction history + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 214 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 177 + + + src/app/components/wallet-address/iota-address/iota-address.component.html + 204 + + Transaction history + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 204 + + Validating your transaction... + + + Transaction complete. Congratulations. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 232,233 + + Transaction complete. Congratulations. + + + + + + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 10,11 + + + src/app/pages/collection/pages/collection/collection.page.html + 55,56 + + + src/app/pages/collection/pages/collection/collection.page.html + 70,71 + + + + + d + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 26 + + d + + + h + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34 + + h + + + hours + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 34,35 + + hours + + + m + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42 + + m + + + min + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 42,43 + + min + + + s + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50 + + s + + + sec + + src/app/components/nft/components/nft-countdown/nft-countdown.component.html + 50,51 + + sec + + + Sale Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 34 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 50,51 + + Sale Starts + + + Auction Starts + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 37 + + Auction Starts + + + Auction Ends + + src/app/components/nft/components/nft-countdown/nft-countdown.component.ts + 40 + + Auction Ends + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 16,17 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 31,32 + + Preview + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 59,60 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 74,75 + + + src/app/pages/nft/pages/nft/nft.page.html + 43,44 + + Current price + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68,69 + + Author + + + Migrate + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100,101 + + + src/app/pages/nft/pages/nft/nft.page.html + 291,292 + + Migrate + + + Shimmer/Mainnet (Tokenization)...SOON. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 102,104 + + + src/app/pages/nft/pages/nft/nft.page.html + 293,295 + + Shimmer/Mainnet (Tokenization)...SOON. + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 108,109 + + + src/app/pages/nft/pages/nft/nft.page.html + 299,300 + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 114,115 + + + src/app/pages/nft/pages/nft/nft.page.html + 305,306 + + IPFS Metadata + + + Preparing... + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 116 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 122 + + Preparing... + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 120,121 + + + src/app/pages/nft/pages/nft/nft.page.html + 312,313 + + IPFS Image + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149,150 + + + src/app/pages/nft/pages/new/single/single.page.html + 297,298 + + + src/app/pages/nft/pages/nft/nft.page.html + 15 + + NFT Image + + + Trade info + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 3,5 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 3,4 + + Trade info + + + Floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 12 + + Floor price + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 41 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 40,41 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 101,102 + + + src/app/pages/nft/pages/new/single/single.page.html + 90,91 + + Available On is required. + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 50 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 49,50 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 112,113 + + + src/app/pages/nft/pages/new/single/single.page.html + 100,101 + + Available on + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 57 + + Various auction length coming next sprint once community have a vote! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + Duration of auction is 3 days + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 158 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 91,92 + + Once your listing is complete, you will get a confirmation message. + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 159 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + Confirm listing + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 62,63 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 532,533 + + Open Sale + + + Specific member(s) only (Transfer) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + Specific member(s) only (Transfer) + + + Reserve for specific buyer + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 82,83 + + Reserve for specific buyer + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2,4 + + Trade history + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 6,8 + + Item is yours and yours only + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 11 + + This will make your item unavailable for sale. + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 12 + + Stop sale! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 16,17 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 31,32 + + List Item for sale + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 86,87 + + Not for sale + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 90,91 + + Fixed price + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 94,95 + + Auction + + + Donut graph coming SOON. + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 40,41 + + Donut graph coming SOON. + + + Commencing + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 5,6 + + Commencing + + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 7,8 + + In-Progress + + + Completed + + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 9,10 + + Completed + + + + Share + + src/app/components/share/share.component.html + 5,6 + + + src/app/components/share/share.component.html + 18,19 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 14,15 + + Share + + + Copy to clipboard + + src/app/components/share/share.component.html + 12 + + Copy to clipboard + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 2,3 + + + src/app/pages/award/pages/new/new.page.html + 109,110 + + + src/app/pages/proposal/pages/new/new.page.html + 248,249 + + Space is required. + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 11,12 + + Select Space + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 65,67 + + + src/app/pages/award/pages/new/new.page.html + 138,139 + + + src/app/pages/proposal/pages/new/new.page.html + 277,278 + + Select a space + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 14,13 + + All Spaces + + + No Connections + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 2,3 + + No Connections + + + Rep. weight + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 7,8 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 68,69 + + Rep. weight + + + Status + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 8,9 + + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 72,73 + + Status + + + Established + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 33 + + Established + + + Recognised + + src/app/components/space/components/space-alliances-table/space-alliances-table.component.html + 34 + + Recognised + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 11,12 + + + src/app/pages/member/pages/member/member.page.html + 30 + + Joined + + + members + + src/app/components/space/components/space-card/space-card.component.html + 28 + + + src/app/pages/discover/pages/members/members.page.html + 55,56 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 10,11 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 35,36 + + members + + + Value range is 0-1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 8 + + Value range is 0-1000 + + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.html + 30,31 + + Select the weight with which the experience from a given space is recognized. Valid range is 0 - 1000 + + + Equal + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 39 + + Equal + + + Half + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 40 + + Half + + + Double + + src/app/components/space/components/space-new-alliance/space-new-alliance.component.ts + 41 + + Double + + + Earned Badge + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + Earned Badge + + + with + + src/app/components/timeline-badges/timeline-badges.component.html + 29 + + with + + + Show less + + src/app/components/timeline-badges/timeline-badges.component.html + 38 + + + src/app/components/timeline-nft/timeline-nft.component.html + 114 + + Show less + + + Show more + + src/app/components/timeline-badges/timeline-badges.component.html + 39 + + + src/app/components/timeline-nft/timeline-nft.component.html + 115 + + Show more + + + Timeline + + src/app/components/timeline-nft/timeline-nft.component.html + 1 + + Timeline + + + Listed by + + src/app/components/timeline-nft/timeline-nft.component.html + 20 + + Listed by + + + Made available for auction by + + src/app/components/timeline-nft/timeline-nft.component.html + 23 + + Made available for auction by + + + Purchased by + + src/app/components/timeline-nft/timeline-nft.component.html + 59 + + Purchased by + + + details + + src/app/components/timeline-nft/timeline-nft.component.html + 61 + + details + + + Invalid + + src/app/components/timeline-nft/timeline-nft.component.html + 73,74 + + Invalid + + + Listed by space + + src/app/components/timeline-nft/timeline-nft.component.html + 104 + + Listed by space + + + Bill (owner) + + src/app/components/timeline-nft/timeline-nft.component.ts + 46 + + Bill (owner) + + + Bill (royalty) + + src/app/components/timeline-nft/timeline-nft.component.ts + 48 + + Bill (royalty) + + + Credit + + src/app/components/timeline-nft/timeline-nft.component.ts + 51 + + Credit + + + Payment + + src/app/components/timeline-nft/timeline-nft.component.ts + 53 + + Payment + + + Order + + src/app/components/timeline-nft/timeline-nft.component.ts + 55 + + Order + + + Generate address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 12,13 + + Generate address + + + Make transaction + + src/app/components/wallet-address/iota-address/iota-address.component.html + 33,34 + + Make transaction + + + Wait for confirmation + + src/app/components/wallet-address/iota-address/iota-address.component.html + 55,56 + + Wait for confirmation + + + Confirmed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 78,79 + + Confirmed + + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/iota-address/iota-address.component.html + 104,105 + + You will be asked to send funds to the new IOTA address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/iota-address/iota-address.component.html + 105 + + space + + + profile + + src/app/components/wallet-address/iota-address/iota-address.component.html + 106 + + profile + + + for future transactions. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 107,108 + + for future transactions. + + + Generate new address + + src/app/components/wallet-address/iota-address/iota-address.component.html + 111 + + Generate new address + + + Send a small + + src/app/components/wallet-address/iota-address/iota-address.component.html + 120 + + Send a small + + + amount to validate your address. This expires in + + src/app/components/wallet-address/iota-address/iota-address.component.html + 121 + + amount to validate your address. This expires in + + + Expired. + + src/app/components/wallet-address/iota-address/iota-address.component.html + 123,124 + + Expired. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/iota-address/iota-address.component.html + 172 + + Wait for transaction to be validated. We will send back your transaction once completed + + + Validating address... + + src/app/components/wallet-address/iota-address/iota-address.component.html + 194 + + Validating address... + + + Now you can deal with NFT`s + + src/app/components/wallet-address/iota-address/iota-address.component.html + 221,222 + + Now you can deal with NFT`s + + + Finish Verification + + src/app/components/wallet-address/iota-address/iota-address.component.html + 225 + + Finish Verification + + + Not verified + + src/app/components/wallet-address/wallet-address.component.html + 4,5 + + Not verified + + + Verify wallet + + src/app/components/wallet-address/wallet-address.component.html + 9,10 + + Verify wallet + + + Verified + + src/app/components/wallet-address/wallet-address.component.html + 18,19 + + Verified + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 43 + + Verify your + + + address + + src/app/components/wallet-address/wallet-address.component.html + 43 + + + src/app/components/wallet-address/wallet-address.component.html + 59 + + address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 59 + + Verify your + + + Detailed Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Detailed Info + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.html + 3,4 + + Badges used / available + + + End Date + + src/app/pages/award/pages/award/award-info/award-info.component.html + 9,10 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 50 + + End Date + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 16 + + Owner + + + Award info + + src/app/pages/award/pages/award/award.page.html + 5,6 + + + src/app/pages/award/pages/new/new.page.html + 17,18 + + Award info + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 81,82 + + + src/app/pages/award/pages/award/award.page.html + 176,177 + + Check out award + + + Approve Award + + src/app/pages/award/pages/award/award.page.html + 91,92 + + Approve Award + + + Approve + + src/app/pages/award/pages/award/award.page.html + 103 + + Approve + + + Decline + + src/app/pages/award/pages/award/award.page.html + 114 + + Decline + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 128,129 + + Confirm your participation + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 136,137 + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 142,143 + + Provide description or link to your work. + + + Submit + + src/app/pages/award/pages/award/award.page.html + 151 + + Submit + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 35 + + + src/app/pages/space/pages/space/space.page.ts + 30 + + Overview + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 94 + + Participants + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2,4 + + New Award + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14,15 + + + src/app/pages/proposal/pages/new/new.page.html + 23,24 + + Title is required. + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19,20 + + Title and description will be included on the Award. End date determines the duration of the Award. + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 23,24 + + You must enter name. + + + Title + + src/app/pages/award/pages/new/new.page.html + 28 + + + src/app/pages/proposal/pages/new/new.page.html + 28 + + + src/app/pages/space/pages/upsert/upsert.page.html + 29 + + Title + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 35,36 + + + src/app/pages/proposal/pages/new/new.page.html + 51,52 + + End Date is required. + + + End + + src/app/pages/award/pages/new/new.page.html + 45 + + + src/app/pages/proposal/pages/new/new.page.html + 62 + + End + + + Award description + + src/app/pages/award/pages/new/new.page.html + 55,56 + + Award description + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 66,67 + + Badge definition + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 68,69 + + Title and description will be included on the badge. + + + Badge Title is required. + + src/app/pages/award/pages/new/new.page.html + 73,74 + + Badge Title is required. + + + Badge Title + + src/app/pages/award/pages/new/new.page.html + 78,79 + + Badge Title + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 89,90 + + Badge description + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 103,104 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 363,364 + + + src/app/pages/proposal/pages/new/new.page.html + 242,243 + + Space Info + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 105,106 + + This is the space that will list the award. + + + Reward Info + + src/app/pages/award/pages/new/new.page.html + 155,156 + + Reward Info + + + Defines the amount of XP for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 157,158 + + Defines the amount of XP for each badge and the number of badges available. + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 162,163 + + + src/app/pages/award/pages/new/new.page.html + 182,183 + + Minimum 1 and maximum 10000. + + + Total XP (Max 10000) + + src/app/pages/award/pages/new/new.page.html + 167,168 + + Total XP (Max 10000) + + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + src/app/pages/award/pages/new/new.page.html + 177,178 + + The amount of the experience points (XP) you want to allocate for this award. Maximum 10000 XP. Total Experience Points / Number of Badges = Member's XP. + + + Number of Badges + + src/app/pages/award/pages/new/new.page.html + 187,188 + + Number of Badges + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 197,198 + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + + Badge + + src/app/pages/award/pages/new/new.page.html + 206 + + Badge + + + What the badge looks like. + + src/app/pages/award/pages/new/new.page.html + 207,208 + + What the badge looks like. + + + Mint an unique NTT badge. + + src/app/pages/award/pages/new/new.page.html + 216,217 + + Mint an unique NTT badge. + + + Mint Avatar + + src/app/pages/award/pages/new/new.page.html + 225 + + Mint Avatar + + + WOW! Now reward your members with it! + + src/app/pages/award/pages/new/new.page.html + 238,239 + + WOW! Now reward your members with it! + + + Award Setup + + src/app/pages/award/pages/new/new.page.html + 245,246 + + Award Setup + + + Defines who and how can get a badge. + + src/app/pages/award/pages/new/new.page.html + 247,248 + + Defines who and how can get a badge. + + + Guardian approval + + src/app/pages/award/pages/new/new.page.html + 254,255 + + Guardian approval + + + The award must be approved by the guardians of the space before it's active or distributed + + src/app/pages/award/pages/new/new.page.html + 260,261 + + The award must be approved by the guardians of the space before it's active or distributed + + + Discord Activity + + src/app/pages/award/pages/new/new.page.html + 265,266 + + Discord Activity + + + Github Activity + + src/app/pages/award/pages/new/new.page.html + 275,276 + + Github Activity + + + Custom and more + + src/app/pages/award/pages/new/new.page.html + 285,286 + + Custom and more + + + Create award + + src/app/pages/award/pages/new/new.page.html + 310,311 + + Create award + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2,3 + + Award Description + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 39 + + + src/app/pages/award/pages/participants/participants.page.html + 46,47 + + + src/app/pages/proposal/pages/participants/participants.page.html + 24 + + + src/app/pages/proposal/pages/participants/participants.page.html + 31,32 + + Find Participant + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 51 + + + src/app/pages/proposal/pages/participants/participants.page.html + 36 + + + src/app/pages/space/pages/members/members.page.html + 49,50 + + Showing only few top records... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 59 + + + src/app/pages/proposal/pages/participants/participants.page.html + 44 + + No Participants + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 71 + + Reward + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 82 + + Reward again + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 39 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 131 + + + src/app/pages/space/pages/awards/awards.page.ts + 23 + + + src/app/pages/space/pages/collections/collections.page.ts + 23 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 23 + + Pending + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 40 + + Issued + + + Visit website + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 7,8 + + Visit website + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 18,19 + + Who can buy? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 22,23 + + Open sale + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 28,29 + + Space Members Only + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 34,35 + + Space Guardians Only + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 40,41 + + Space Members with Badge Only + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 46,47 + + Must hold at least one NFT from each selected Collections + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51,52 + + (One NFT per member) + + + The badges you need + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 78 + + The badges you need + + + Resources + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89 + + Resources + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 114 + + Member discounts + + + Discount for members with XP + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 119 + + Discount for members with XP + + + Guardians of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 47 + + Guardians of Space Only + + + Members of Space Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 49 + + Members of Space Only + + + Members With Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 51 + + Members With Badge Only + + + Check out collection + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.ts + 72 + + Check out collection + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 3 + + About collection + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 11 + + Limited edition + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 26 + + + src/app/pages/collection/pages/collection/collection.page.html + 118 + + Publish Collection + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 30 + + + src/app/pages/collection/pages/collection/collection.page.html + 122 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 36 + + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + Cancel Collection + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 132 + + Edit Collection + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 69,70 + + Royalties goes to + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 79,80 + + Starts at + + + Items + + src/app/pages/collection/pages/collection/collection.page.html + 86,87 + + Items + + + Price starts at + + src/app/pages/collection/pages/collection/collection.page.html + 96,97 + + Price starts at + + + Sale in progress + + src/app/pages/collection/pages/collection/collection.page.html + 104,105 + + Sale in progress + + + remaining + + src/app/pages/collection/pages/collection/collection.page.html + 106,107 + + + src/app/pages/nft/pages/nft/nft.page.html + 86,87 + + remaining + + + Find item + + src/app/pages/collection/pages/collection/collection.page.html + 156 + + + src/app/pages/member/pages/nfts/nfts.page.html + 12 + + Find item + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 166,167 + + + src/app/pages/nft/pages/new/new.page.html + 2,3 + + Create NFT + + + Recent + + src/app/pages/collection/pages/collection/collection.page.html + 192 + + + src/app/pages/collection/pages/collection/collection.page.html + 209 + + + src/app/pages/discover/pages/awards/awards.page.html + 20 + + + src/app/pages/discover/pages/awards/awards.page.html + 31 + + + src/app/pages/discover/pages/collections/collections.page.html + 40 + + + src/app/pages/discover/pages/collections/collections.page.html + 51 + + + src/app/pages/discover/pages/members/members.page.html + 31 + + + src/app/pages/discover/pages/members/members.page.html + 42 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 20 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 31 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 20 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 33 + + + src/app/pages/market/pages/collections/collections.page.html + 154 + + + src/app/pages/market/pages/collections/collections.page.html + 171 + + + src/app/pages/market/pages/nfts/nfts.page.html + 42 + + + src/app/pages/market/pages/nfts/nfts.page.html + 59 + + Recent + + + Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 193 + + + src/app/pages/market/pages/collections/collections.page.html + 155 + + + src/app/pages/market/pages/nfts/nfts.page.html + 43 + + + src/app/pages/market/pages/nfts/nfts.page.html + 60 + + Low to High + + + High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 194 + + + src/app/pages/market/pages/collections/collections.page.html + 156 + + + src/app/pages/market/pages/nfts/nfts.page.html + 44 + + + src/app/pages/market/pages/nfts/nfts.page.html + 61 + + High to Low + + + Sort by + + src/app/pages/collection/pages/collection/collection.page.html + 199 + + + src/app/pages/discover/pages/awards/awards.page.html + 18 + + + src/app/pages/discover/pages/awards/awards.page.html + 24,25 + + + src/app/pages/discover/pages/collections/collections.page.html + 37,38 + + + src/app/pages/discover/pages/collections/collections.page.html + 44,45 + + + src/app/pages/discover/pages/members/members.page.html + 29 + + + src/app/pages/discover/pages/members/members.page.html + 35,36 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 18 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 24,25 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 18 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 24,25 + + + src/app/pages/market/pages/collections/collections.page.html + 152 + + + src/app/pages/market/pages/collections/collections.page.html + 161 + + + src/app/pages/market/pages/nfts/nfts.page.html + 40 + + + src/app/pages/market/pages/nfts/nfts.page.html + 49 + + Sort by + + + Price: Low to High + + src/app/pages/collection/pages/collection/collection.page.html + 210 + + + src/app/pages/market/pages/collections/collections.page.html + 172 + + Price: Low to High + + + Price: High to Low + + src/app/pages/collection/pages/collection/collection.page.html + 211 + + + src/app/pages/market/pages/collections/collections.page.html + 173 + + Price: High to Low + + + No NFTs + + src/app/pages/collection/pages/collection/collection.page.html + 233 + + + src/app/pages/market/pages/nfts/nfts.page.html + 84 + + + src/app/pages/member/pages/nfts/nfts.page.html + 32 + + + src/app/pages/nft/pages/nft/nft.page.html + 375 + + No NFTs + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2,3 + + Create new collection + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3,5 + + Edit collection + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18,19 + + Collection info + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20,21 + + Name and description will be included on the Collection. + + + Name + + src/app/pages/collection/pages/upsert/upsert.page.html + 30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 70,71 + + + src/app/pages/nft/pages/new/single/single.page.html + 26 + + Name + + + Description + + src/app/pages/collection/pages/upsert/upsert.page.html + 40,41 + + + src/app/pages/nft/pages/new/single/single.page.html + 36,37 + + Description + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 53,54 + + + src/app/pages/nft/pages/new/single/single.page.html + 49,50 + + Sales info + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 55,56 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 118 + + Royalty + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 120 + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 131,132 + + Royalties - Percentage fee + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 141,142 + + Example: 10 % , 20 % , etc.. + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 150 + + Royalties goes to a different space + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 158,159 + + Royalties goes to a different space + + + Links + + src/app/pages/collection/pages/upsert/upsert.page.html + 181 + + Links + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 182,183 + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 187,188 + + Invalid URL. + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 213,214 + + Link to your Twitter account + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 226,227 + + Invalid Discord username. + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 233,234 + + Link to your Discord account + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 248,249 + + Discounts + + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + src/app/pages/collection/pages/upsert/upsert.page.html + 250,251 + + The ability to give a discount on NFTs in this collection to your space members/guardians or members who hold certain NFTs. You can apply up to a 100% discount (an airdrop). Use XP > -1 if you don't require members purchasing to have any XP from your space. Please note, 1Mi will always be required to purchase the NFT due to the IOTA protocol's dust protection mechanism. + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 298 + + Discount + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 311 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + Discount Amount + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 350,351 + + Add discount level + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 365,366 + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 383,384 + + Collection Type + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 385,386 + + Each type has different characteristics. This cannot be changed after creation. + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 417 + + + src/app/pages/space/pages/upsert/upsert.page.html + 192 + + Banner + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 443 + + Banner is required. + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + Placeholder + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 478 + + Placeholder is required. + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 488,489 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 501,502 + + + src/app/pages/market/pages/collections/collections.page.html + 132,133 + + + src/app/pages/market/pages/collections/collections.page.html + 137,138 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 116,117 + + Category + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 490,491 + + Category is used when filtering content. + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 494,495 + + Category. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 519,520 + + Collection Setup + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 521,522 + + Who has access to a given collection. + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 537,538 + + Everyone has access to this collection. + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 547,548 + + Only Space Guardians can access. + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 558,559 + + Only Space Members can access. + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 569,570 + + Only Space Members with badge can access. + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 585,586 + + Collection Options + + + Limited Edition + + src/app/pages/collection/pages/upsert/upsert.page.html + 590 + + Limited Edition + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 606 + + One NFT per Member Only + + + Select Collections + + src/app/pages/collection/pages/upsert/upsert.page.html + 629,630 + + Select Collections + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 677,678 + + Create collection + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 690,691 + + Save collection + + + Member seems to log out during the file upload request. + + src/app/pages/collection/pages/upsert/upsert.page.ts + 317 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 195 + + + src/app/pages/nft/pages/new/single/single.page.ts + 154 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 107 + + Member seems to log out during the file upload request. + + + My Overview + + src/app/pages/dashboard/dashboard.page.html + 2,3 + + My Overview + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 6,7 + + Pending Membership Requests + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 14,15 + + Your spaces + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 23 + + No Spaces yet + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 25,26 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 36,37 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 48,49 + + Active proposals + + + Oldest + + src/app/pages/discover/pages/awards/awards.page.html + 21 + + + src/app/pages/discover/pages/awards/awards.page.html + 32 + + + src/app/pages/discover/pages/collections/collections.page.html + 41 + + + src/app/pages/discover/pages/collections/collections.page.html + 52 + + + src/app/pages/discover/pages/members/members.page.html + 32 + + + src/app/pages/discover/pages/members/members.page.html + 43 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 21 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 32 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 21 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 34 + + Oldest + + + No Awards + + src/app/pages/discover/pages/awards/awards.page.html + 54 + + + src/app/pages/member/pages/awards/awards.page.html + 19 + + + src/app/pages/space/pages/awards/awards.page.html + 35 + + No Awards + + + collections + + src/app/pages/discover/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 185,186 + + collections + + + No Collections + + src/app/pages/discover/pages/collections/collections.page.html + 75 + + + src/app/pages/space/pages/collections/collections.page.html + 38 + + No Collections + + + Discover Soonaverse + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + Discover Soonaverse + + + Enter the first few letters to search... + + src/app/pages/discover/pages/discover/discover.page.html + 7 + + Enter the first few letters to search... + + + Spaces + + src/app/pages/discover/pages/discover/discover.page.ts + 21 + + + src/app/pages/member/pages/member/member.page.ts + 29 + + Spaces + + + Collections + + src/app/pages/discover/pages/discover/discover.page.ts + 22 + + + src/app/pages/market/pages/market/market.page.ts + 23 + + + src/app/pages/space/pages/space/space.page.ts + 31 + + Collections + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 24 + + + src/app/pages/space/pages/space/space.page.ts + 32 + + Proposals + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 25 + + + src/app/pages/space/pages/space/space.page.ts + 34 + + Members + + + Include connections + + src/app/pages/discover/pages/members/members.page.html + 23,24 + + + src/app/pages/member/pages/activity/activity.page.html + 28,29 + + + src/app/pages/member/pages/spaces/member-spaces.component.html + 5,6 + + Include connections + + + (Select some space) + + src/app/pages/discover/pages/members/members.page.html + 24 + + + src/app/pages/member/pages/activity/activity.page.html + 29 + + (Select some space) + + + No Members + + src/app/pages/discover/pages/members/members.page.html + 66 + + + src/app/pages/space/pages/members/members.page.html + 58 + + No Members + + + proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 43,44 + + proposals + + + No Proposals + + src/app/pages/discover/pages/proposals/proposals.page.html + 55 + + + src/app/pages/space/pages/proposals/proposals.page.html + 35 + + No Proposals + + + No Spaces + + src/app/pages/discover/pages/spaces/spaces.page.html + 56 + + No Spaces + + + Open + + src/app/pages/discover/pages/spaces/spaces.page.ts + 29 + + Open + + + Welcome to The Soonaverse + + src/app/pages/home/home.page.html + 5,6 + + Welcome to The Soonaverse + + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + src/app/pages/home/home.page.html + 8,9 + + An all-in-one feeless platform for community engagement and DAO creation. Build, vote, earn, learn and let the best ideas win. + + + Join Us + + src/app/pages/home/home.page.html + 19,20 + + Join Us + + + Marketplace + + src/app/pages/home/home.page.html + 31 + + Marketplace + + + See Docs + + src/app/pages/home/home.page.html + 43,44 + + See Docs + + + Get started with the Soonaverse + + src/app/pages/home/home.page.html + 52,53 + + Get started with the Soonaverse + + + Not sure where to start? Find featured spaces and NFT Collections below. + + src/app/pages/home/home.page.html + 54 + + Not sure where to start? Find featured spaces and NFT Collections below. + + + Trending Collections + + src/app/pages/home/home.page.html + 60,61 + + Trending Collections + + + Go to Marketplace + + src/app/pages/home/home.page.html + 70 + + Go to Marketplace + + + Discover more + + src/app/pages/home/home.page.html + 86 + + + src/app/pages/home/home.page.html + 102 + + + src/app/pages/home/home.page.html + 122 + + Discover more + + + Popular spaces + + src/app/pages/home/home.page.html + 92,93 + + Popular spaces + + + Creating your community is easy as 1-2-3 + + src/app/pages/home/home.page.html + 130,131 + + Creating your community is easy as 1-2-3 + + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + src/app/pages/home/home.page.html + 132,133 + + No more worries about “the tech”. Spend your time where it belongs, building your community and realizing your collective vision. + + + StepArticle image + + src/app/pages/home/home.page.html + 143,144 + + StepArticle image + + + Voting is essential and it needs to be on-chain and FREE. + + src/app/pages/home/home.page.html + 162 + + Voting is essential and it needs to be on-chain and FREE. + + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + src/app/pages/home/home.page.html + 165,167 + + By building on the IOTA network we have enshrined a crucial feature of proper DAO management. Feeless, secure voting. Read more about this in our manifesto. + + + Go there now + + src/app/pages/home/home.page.html + 177 + + Go there now + + + Want to learn more about SoonLabs? + + src/app/pages/home/home.page.html + 202,203 + + Want to learn more about SoonLabs? + + + Visit YouTube + + src/app/pages/home/home.page.html + 213 + + Visit YouTube + + + Who’s using the Soonaverse? + + src/app/pages/home/home.page.html + 222,224 + + Who’s using the Soonaverse? + + + Investors + + src/app/pages/home/home.page.html + 275,276 + + Investors + + + Privacy + + src/app/pages/home/home.page.html + 285,286 + + Privacy + + + Terms + + src/app/pages/home/home.page.html + 295,296 + + Terms + + + Powered by SoonLabs + + src/app/pages/home/home.page.html + 306,307 + + + src/app/pages/home/home.page.html + 318,319 + + Powered by SoonLabs + + + Create your community + + src/app/pages/home/home.page.ts + 33,31 + + Create your community + + + Feeless, secure, on-chain voting, and “one click” creation tools. + + src/app/pages/home/home.page.ts + 34 + + Feeless, secure, on-chain voting, and “one click” creation tools. + + + Build reputation and rewards + + src/app/pages/home/home.page.ts + 38,36 + + Build reputation and rewards + + + Create incentives and build reputation, trust and community engagement. + + src/app/pages/home/home.page.ts + 39 + + Create incentives and build reputation, trust and community engagement. + + + Manage, Maintain, Grow + + src/app/pages/home/home.page.ts + 43,41 + + Manage, Maintain, Grow + + + Governance, voting, for both public and private communities. + + src/app/pages/home/home.page.ts + 44 + + Governance, voting, for both public and private communities. + + + NFTs + + src/app/pages/market/pages/collections/collections.page.html + 12,13 + + + src/app/pages/market/pages/nfts/nfts.page.html + 13,14 + + + src/app/pages/member/pages/member/member.page.ts + 30 + + NFTs + + + Select Access type + + src/app/pages/market/pages/collections/collections.page.html + 20,21 + + Select Access type + + + All accesses + + src/app/pages/market/pages/collections/collections.page.html + 25,26 + + + src/app/pages/market/pages/collections/collections.page.html + 32,33 + + + src/app/pages/market/pages/collections/collections.page.html + 111 + + All accesses + + + Open sale + + src/app/pages/market/pages/collections/collections.page.html + 38,39 + + + src/app/pages/market/pages/collections/collections.page.html + 45,46 + + + src/app/pages/market/pages/collections/collections.page.html + 112 + + Open sale + + + Space members only + + src/app/pages/market/pages/collections/collections.page.html + 51,52 + + + src/app/pages/market/pages/collections/collections.page.html + 58,59 + + + src/app/pages/market/pages/collections/collections.page.html + 113 + + Space members only + + + Space guardians only + + src/app/pages/market/pages/collections/collections.page.html + 64,65 + + + src/app/pages/market/pages/collections/collections.page.html + 71,72 + + + src/app/pages/market/pages/collections/collections.page.html + 114 + + Space guardians only + + + Space members with badge only + + src/app/pages/market/pages/collections/collections.page.html + 77,78 + + + src/app/pages/market/pages/collections/collections.page.html + 84,85 + + + src/app/pages/market/pages/collections/collections.page.html + 115 + + Space members with badge only + + + At least one NFT from collections + + src/app/pages/market/pages/collections/collections.page.html + 90,91 + + + src/app/pages/market/pages/collections/collections.page.html + 97,98 + + + src/app/pages/market/pages/collections/collections.page.html + 116 + + At least one NFT from collections + + + No collections + + src/app/pages/market/pages/collections/collections.page.html + 196 + + No collections + + + Marketplace + + src/app/pages/market/pages/market/market.page.html + 2,4 + + Marketplace + + + Spaces, awards, proposals or members... + + src/app/pages/market/pages/market/market.page.html + 7 + + Spaces, awards, proposals or members... + + + NFT's + + src/app/pages/market/pages/market/market.page.ts + 24 + + NFT's + + + On Auction + + src/app/pages/market/pages/nfts/nfts.page.ts + 40,37 + + On Auction + + + Owned + + src/app/pages/market/pages/nfts/nfts.page.ts + 41 + + + src/app/pages/nft/pages/nft/nft.page.html + 6,7 + + Owned + + + View space + + src/app/pages/member/pages/activity/activity.page.html + 20,21 + + View space + + + Awards Completed + + src/app/pages/member/pages/activity/activity.page.html + 37 + + Awards Completed + + + Total Reputation + + src/app/pages/member/pages/activity/activity.page.html + 39 + + Total Reputation + + + Earned badges + + src/app/pages/member/pages/activity/activity.page.html + 47 + + Earned badges + + + More + + src/app/pages/member/pages/activity/activity.page.html + 51,52 + + More + + + Reputation + + src/app/pages/member/pages/activity/activity.page.html + 72,73 + + Reputation + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 6,7 + + Pending + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + Issued + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 21,22 + + Discover Awards + + + No Badges yet + + src/app/pages/member/pages/badges/badges.page.html + 19,20 + + No Badges yet + + + Discover Badges + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Discover Badges + + + My profile + + src/app/pages/member/pages/member/member.page.html + 9 + + My profile + + + Profile + + src/app/pages/member/pages/member/member.page.html + 10 + + Profile + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 15,16 + + Profile info + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 26 + + Activity + + + Badges + + src/app/pages/member/pages/member/member.page.ts + 28 + + Badges + + + (Join space with alliance) + + src/app/pages/member/pages/spaces/member-spaces.component.html + 6 + + (Join space with alliance) + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 44,45 + + Some files have not been uploaded + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 48,49 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 57 + + Uploaded CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 69,70 + + Filename + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 92,93 + + Error + + + Select collection + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 123,124 + + + src/app/pages/nft/pages/new/single/single.page.html + 349,350 + + Select collection + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136,137 + + Upload existing CSV + + + Upload back once you generate bellow + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138,139 + + Upload back once you generate bellow + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 166 + + You have to upload images first. + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 191,192 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + Single + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + Multiple + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14,15 + + NFT info + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16,17 + + Name and description will be included on the NFT. + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 21,22 + + Name is required. + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 32,33 + + Description is required. + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 51,52 + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + + Properties + + src/app/pages/nft/pages/new/single/single.page.html + 111,112 + + Properties + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 113,114 + + Properties show up underneath your item. + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 120,121 + + Property name (E.g. Character) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 121,122 + + Value (E.g. Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 133,134 + + + src/app/pages/nft/pages/new/single/single.page.html + 166,168 + + + src/app/pages/nft/pages/new/single/single.page.html + 173,174 + + Property name + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 144 + + + src/app/pages/nft/pages/new/single/single.page.html + 178,180 + + + src/app/pages/nft/pages/new/single/single.page.html + 186 + + + src/app/pages/nft/pages/new/single/single.page.html + 236 + + + src/app/pages/nft/pages/new/single/single.page.html + 270,272 + + + src/app/pages/nft/pages/new/single/single.page.html + 276 + + Value + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 159 + + Property + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 196,197 + + Add property + + + Stats + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + Stats + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 205,206 + + Stats show up underneath your item. + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 212,213 + + Stats name (E.g. Stamina) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 213,214 + + Value (E.g. 10, 1/10 , etc.) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 225,226 + + + src/app/pages/nft/pages/new/single/single.page.html + 258,260 + + + src/app/pages/nft/pages/new/single/single.page.html + 265,266 + + Stat name + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 251 + + Stat + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287,288 + + Add stat + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 299,300 + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 324 + + Media is required + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 338,339 + + Select one of your collections to display this NFT. + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 371,372 + + Create NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 381,382 + + Preview NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 142 + + File name is not valid + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 4,5 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 29,30 + + + src/app/pages/nft/pages/nft/nft.page.html + 248,249 + + Check out nft + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 58 + + Current highest bid + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 94 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 102 + + Sale hasn't started yet + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 110 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 118 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 123,124 + + Sell NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 124,125 + + Change Fixed Price + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 125,126 + + Change Auction + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + Place bid + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 138 + + Buy now + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 151,152 + + Current Bids + + + My Bids + + src/app/pages/nft/pages/nft/nft.page.html + 155,156 + + My Bids + + + My Transactions + + src/app/pages/nft/pages/nft/nft.page.html + 159,160 + + My Transactions + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 168,169 + + Member + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 169,170 + + Bidded on + + + Date + + src/app/pages/nft/pages/nft/nft.page.html + 202,203 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 8,9 + + Date + + + Type + + src/app/pages/nft/pages/nft/nft.page.html + 203,204 + + Type + + + On-Chain Record + + src/app/pages/nft/pages/nft/nft.page.html + 276,277 + + On-Chain Record + + + Preparing... + + src/app/pages/nft/pages/nft/nft.page.html + 277,278 + + Preparing... + + + View + + src/app/pages/nft/pages/nft/nft.page.html + 280,281 + + + src/app/pages/nft/pages/nft/nft.page.html + 308,309 + + + src/app/pages/nft/pages/nft/nft.page.html + 315,316 + + View + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 285,286 + + View all of the transaction details of this NFT on the Tangle + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 340,341 + + About the collection + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 343,344 + + Show + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 344 + + collection + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 353,355 + + by + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2,4 + + New Proposal + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17,18 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 5,6 + + Proposal info + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19,20 + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 35,36 + + Start Date is required. + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 45 + + Start + + + Commencing milestone. + + src/app/pages/proposal/pages/new/new.page.html + 69,70 + + Commencing milestone. + + + Commencing milestone + + src/app/pages/proposal/pages/new/new.page.html + 76,77 + + Commencing milestone + + + Start milestone. + + src/app/pages/proposal/pages/new/new.page.html + 83,84 + + Start milestone. + + + Start milestone + + src/app/pages/proposal/pages/new/new.page.html + 90,91 + + Start milestone + + + End milestone. + + src/app/pages/proposal/pages/new/new.page.html + 97,98 + + End milestone. + + + End milestone + + src/app/pages/proposal/pages/new/new.page.html + 104,105 + + End milestone + + + Proposal description is required. + + src/app/pages/proposal/pages/new/new.page.html + 112,113 + + Proposal description is required. + + + Proposal description + + src/app/pages/proposal/pages/new/new.page.html + 117,118 + + Proposal description + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 127,128 + + Question Info + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 129,130 + + Title and description will only be displayed for this question. + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 136,137 + + Question Title is required. + + + Question Title + + src/app/pages/proposal/pages/new/new.page.html + 140,141 + + Question Title + + + Question description + + src/app/pages/proposal/pages/new/new.page.html + 152,153 + + Question description + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 178,179 + + Text and description for each individual answer. + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 183,184 + + Answer Text is required. + + + Answer Text + + src/app/pages/proposal/pages/new/new.page.html + 187,188 + + Answer Text + + + Answer description + + src/app/pages/proposal/pages/new/new.page.html + 198,199 + + Answer description + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 233,234 + + Add Choice + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 244,245 + + This is the space that will list the proposal. + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 292,293 + + Proposal Setup + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 294,295 + + Defines who has access to the proposal and what is the voting method. + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 299 + + Target Participants + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 306,307 + + All Guardians + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 312,313 + + Only guardians can vote on this proposal + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 316,317 + + All Members + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 322,323 + + All members can vote on this proposal + + + IOTA Token Holders + + src/app/pages/proposal/pages/new/new.page.html + 327,328 + + IOTA Token Holders + + + All IOTA token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 333,334 + + All IOTA token holders can vote. + + + Voting Type + + src/app/pages/proposal/pages/new/new.page.html + 341 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 55 + + Voting Type + + + Member - One Vote + + src/app/pages/proposal/pages/new/new.page.html + 348,349 + + Member - One Vote + + + Each member of the space gets one vote + + src/app/pages/proposal/pages/new/new.page.html + 354,355 + + Each member of the space gets one vote + + + XP Reputation - Space + + src/app/pages/proposal/pages/new/new.page.html + 362,363 + + XP Reputation - Space + + + Votes are weighted based on total amount of XP a member has in the space + + src/app/pages/proposal/pages/new/new.page.html + 368,369 + + Votes are weighted based on total amount of XP a member has in the space + + + XP Reputation - Space + Connection + + src/app/pages/proposal/pages/new/new.page.html + 378,379 + + XP Reputation - Space + Connection + + + Votes are weighted based on total amount of XP a member has in the space & connections + + src/app/pages/proposal/pages/new/new.page.html + 384,385 + + Votes are weighted based on total amount of XP a member has in the space & connections + + + XP Reputation - Selected Badges + + src/app/pages/proposal/pages/new/new.page.html + 394,395 + + XP Reputation - Selected Badges + + + Votes are weighted based on total amount of XP a member has for selected badges + + src/app/pages/proposal/pages/new/new.page.html + 400,401 + + Votes are weighted based on total amount of XP a member has for selected badges + + + Reputation Options + + src/app/pages/proposal/pages/new/new.page.html + 412,413 + + Reputation Options + + + Set Minimum Weight + + src/app/pages/proposal/pages/new/new.page.html + 423,424 + + Set Minimum Weight + + + Select Badge + + src/app/pages/proposal/pages/new/new.page.html + 438,439 + + Select Badge + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 465,466 + + Create Proposal + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 322 + + Choice + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + badge + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 326 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 2,3 + + Final Results + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 58,59 + + Proposal Description + + + Voted + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 3,4 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 38 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 129 + + Voted + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 4,5 + + Vote Now + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 5 + + Voting starts + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 9 + + You are not part of the vote + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 12 + + In order to vote, you must be part of the space before proposal was created. + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 18 + + Log in to vote + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 21 + + In order to vote, you must login first. + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 27 + + Pending Guardian Approval + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 30 + + This proposal has not been approved by any Guardian yet. + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 52 + + Weight + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 37 + + Pending Vote + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 124 + + joined soonaverse on + + + Voter + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 7,8 + + Voter + + + Option + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 9,10 + + Option + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 26 + + Approve + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 28 + + Decline + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 34,35 + + Current Milestone + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 39 + + Commence Date + + + Start Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 45 + + Start Date + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 56 + + Voting Type of this proposal. + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 60 + + Total Weight + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 61 + + Total weight within this proposal for all participants. + + + Export to JSON + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 65,67 + + Export to JSON + + + Cast your vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 50,51 + + Cast your vote + + + Open Firefly to Vote + + src/app/pages/proposal/pages/proposal/proposal.page.html + 53 + + Open Firefly to Vote + + + Voting instructions + + src/app/pages/proposal/pages/proposal/proposal.page.html + 55 + + Voting instructions + + + You will select your options and execute the vote within Firefly. + + src/app/pages/proposal/pages/proposal/proposal.page.html + 57,58 + + You will select your options and execute the vote within Firefly. + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 64,65 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 117,118 + + Check out proposal + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 70,71 + + Current Results + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 91 + + Selected Badges + + + New + + src/app/pages/space/pages/awards/awards.page.html + 23,24 + + + src/app/pages/space/pages/collections/collections.page.html + 25,26 + + + src/app/pages/space/pages/proposals/proposals.page.html + 23,24 + + New + + + award + + src/app/pages/space/pages/awards/awards.page.html + 24 + + award + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 24 + + + src/app/pages/space/pages/members/members.page.html + 24 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 24 + + Active + + + Active + + src/app/pages/space/pages/members/members.page.html + 9 + + Active + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 18 + + Blocked + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 28 + + Blocked + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 35 + + + src/app/pages/space/pages/members/members.page.html + 43,44 + + Find Member + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 63 + + joined space on + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 78,79 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 81,82 + + Make Guardian + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 84,86 + + Accept Member + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 89,91 + + Block Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 91,93 + + Unblock Member + + + Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 3,5 + + Active Proposals + + + No Active Proposals + + src/app/pages/space/pages/overview/overview.page.html + 11 + + No Active Proposals + + + Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 24,26 + + Active Awards + + + No Active Awards + + src/app/pages/space/pages/overview/overview.page.html + 32 + + No Active Awards + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 24 + + proposal + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 21,22 + + Check out space + + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 53,54 + + Connections between spaces enables members of one space to recognize members of another space's experience + points. Established connection turns into alliances. + + + Show All + + src/app/pages/space/pages/space/space-about/space-about.component.html + 59,60 + + Show All + + + Connected spaces that you recognize + + src/app/pages/space/pages/space/space-about/space-about.component.html + 65,66 + + Connected spaces that you recognize + + + New connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 76,77 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 88 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 117 + + New connection + + + connections + + src/app/pages/space/pages/space/space-about/space-about.component.html + 104 + + connections + + + Close + + src/app/pages/space/pages/space/space-about/space-about.component.html + 120 + + Close + + + New + + src/app/pages/space/pages/space/space-about/space-about.component.html + 132 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 169 + + New + + + Edit + + src/app/pages/space/pages/space/space-about/space-about.component.html + 133 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 170 + + Edit + + + connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 134,135 + + connection + + + Form a connection + + src/app/pages/space/pages/space/space-about/space-about.component.html + 148 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + Form a connection + + + Save + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 181 + + Save + + + Terminate alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 159,160 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 190,191 + + Terminate alliance + + + alliance + + src/app/pages/space/pages/space/space-about/space-about.component.html + 171,172 + + alliance + + + Space's Wallet Address + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201,202 + + Space's Wallet Address + + + Wallet to hold funds for the Space. + + src/app/pages/space/pages/space/space-about/space-about.component.html + 203,204 + + Wallet to hold funds for the Space. + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 252,253 + + Leave Space + + + About space + + src/app/pages/space/pages/space/space.page.html + 5,6 + + About space + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 53 + + + src/app/pages/space/pages/space/space.page.html + 113,114 + + Join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 77 + + + src/app/pages/space/pages/space/space.page.html + 139 + + Edit Space + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2,3 + + Add new space + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3,4 + + Edit space + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17,18 + + Space info + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19,20 + + Title and description will be included on the Space. + + + Space description + + src/app/pages/space/pages/upsert/upsert.page.html + 39,40 + + Space description + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 54,55 + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 100,101 + + Only discord invite code supported (i.e. RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 107,108 + + Type your Discord invite code + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 128,129 + + Space Type + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 130,131 + + Each type has different characteristics. + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 139,140 + + Open for anyone to join instantly + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 143,144 + + Requires a member approval + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 163,164 + + Avatar is mandatory + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 236,237 + + Create space + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 249,250 + + Save space + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Upload new to replace existing. + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 168 + + Your brand is key. + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 172 + + Make it personal. + + + + diff --git a/src/locale/messages.xlf b/src/locale/messages.xlf new file mode 100644 index 0000000..074e7ac --- /dev/null +++ b/src/locale/messages.xlf @@ -0,0 +1,12054 @@ + + + + + + Top Members + + src/app/@core/services/filter-storage/filter-storage.service.ts + 97 + + + + Recent + + src/app/@core/services/filter-storage/filter-storage.service.ts + 98 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 116 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 133 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 147 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 165 + + + + Oldest + + src/app/@core/services/filter-storage/filter-storage.service.ts + 99 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 117 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 134 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 148 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 166 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 188 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 209 + + + + Ending Soon + + src/app/@core/services/filter-storage/filter-storage.service.ts + 115 + + + + Ending SOON + + src/app/@core/services/filter-storage/filter-storage.service.ts + 164 + + + + Available Date + + src/app/@core/services/filter-storage/filter-storage.service.ts + 182 + + + + Recently Created + + src/app/@core/services/filter-storage/filter-storage.service.ts + 183 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 208 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 57 + + + + Price: Low to High + + src/app/@core/services/filter-storage/filter-storage.service.ts + 184 + + + + Price: High to Low + + src/app/@core/services/filter-storage/filter-storage.service.ts + 185 + + + + Top Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 186 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 206 + + + + Recently Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 187 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 207 + + + + Public Vote + + src/app/@core/services/filter-storage/filter-storage.service.ts + 202 + + + + Community Rank + + src/app/@core/services/filter-storage/filter-storage.service.ts + 203 + + + + SOON on Sale + + src/app/@core/services/filter-storage/filter-storage.service.ts + 204 + + + + Recently Minted + + src/app/@core/services/filter-storage/filter-storage.service.ts + 205 + + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 74 + + + + Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products. + + src/app/@core/services/seo/seo.service.ts + 7 + + + + Bill Payment + + src/app/@core/services/transaction/transaction.service.ts + 18 + + + + Bill (royalty) + + src/app/@core/services/transaction/transaction.service.ts + 20 + + + + Credit + + src/app/@core/services/transaction/transaction.service.ts + 26 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 336 + + + + Payment + + src/app/@core/services/transaction/transaction.service.ts + 28 + + + + Credit NFT + + src/app/@core/services/transaction/transaction.service.ts + 30 + + + + Mint Collection + + src/app/@core/services/transaction/transaction.service.ts + 32 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 36 + + + + Mint Token + + src/app/@core/services/transaction/transaction.service.ts + 34 + + + src/app/pages/space/pages/manage/manage.page.html + 116 + + + + Withdraw Asset + + src/app/@core/services/transaction/transaction.service.ts + 36 + + + + Unlock + + src/app/@core/services/transaction/transaction.service.ts + 38 + + + + Vote + + src/app/@core/services/transaction/transaction.service.ts + 40 + + + + Order + + src/app/@core/services/transaction/transaction.service.ts + 42 + + + + (Mint Alias) + + src/app/@core/services/transaction/transaction.service.ts + 49 + + + + (Mint NFTs) + + src/app/@core/services/transaction/transaction.service.ts + 51 + + + + (Mint Foundry) + + src/app/@core/services/transaction/transaction.service.ts + 53 + + + + (Send Alias to Guardian) + + src/app/@core/services/transaction/transaction.service.ts + 55 + + + + (Lock Collection) + + src/app/@core/services/transaction/transaction.service.ts + 57 + + + + Discover + + src/app/@shell/ui/header/header.component.html + 76 + + + src/app/components/auth/services/auth.service.ts + 83 + + + + Create new + + src/app/@shell/ui/header/header.component.html + 91 + + + + Space + + src/app/@shell/ui/header/header.component.html + 97 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100 + + + src/app/pages/collection/pages/collection/collection.page.html + 110 + + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 206,205 + + + src/app/pages/token/pages/new/summary/summary.component.html + 242,241 + + + + Proposal + + src/app/@shell/ui/header/header.component.html + 103 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 29 + + + + Award + + src/app/@shell/ui/header/header.component.html + 106 + + + src/app/pages/award/pages/award/award.page.html + 29 + + + src/app/pages/award/pages/award/award.page.ts + 100 + + + + Collection + + src/app/@shell/ui/header/header.component.html + 110 + + + src/app/@shell/ui/header/header.component.html + 129 + + + src/app/pages/collection/pages/collection/collection.page.html + 37 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136 + + + src/app/pages/nft/pages/new/single/single.page.html + 346 + + + src/app/pages/space/pages/collections/collections.page.html + 49 + + + + Token + + src/app/@shell/ui/header/header.component.html + 113 + + + src/app/@shell/ui/header/header.component.html + 132 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 321 + + + src/app/pages/token/pages/token/token.page.html + 29 + + + src/app/pages/token/pages/token/token.page.ts + 99 + + + src/app/pages/token/pages/trade/trade.page.ts + 274 + + + + To unlock more features you have to stake SOON token. + + src/app/@shell/ui/header/header.component.html + 124,126 + + + + VIP LEVEL + + src/app/@shell/ui/header/header.component.html + 197,198 + + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 37,38 + + + src/app/pages/member/pages/activity/activity.page.html + 146,147 + + + + None. + + src/app/@shell/ui/header/header.component.html + 232 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 77 + + + + My Profile + + src/app/@shell/ui/header/header.component.html + 240 + + + src/app/components/auth/services/auth.service.ts + 551 + + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 265,266 + + + + You have + + src/app/@shell/ui/header/header.component.html + 270 + + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 272 + + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 282,283 + + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 334 + + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 335 + + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 342 + + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 343 + + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 344 + + + + just offered + + src/app/@shell/ui/header/header.component.ts + 351 + + + + for + + src/app/@shell/ui/header/header.component.ts + 352 + + + src/app/components/timeline/timeline.component.html + 171 + + + + Your + + src/app/@shell/ui/header/header.component.ts + 353 + + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 354 + + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 377 + + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 378 + + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27,28 + + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 38,39 + + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 49,50 + + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 60,61 + + + + Token + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 70,71 + + + + Stake more SOON to create tokens and collections. + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 81,84 + + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 57,58 + + + + Connect via TanglePay + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 73 + + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 47 + + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 97 + + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 103 + + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8 + + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 9,11 + + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 19 + + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 30,31 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 84,85 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 140,141 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 197,198 + + + + Operational + + src/app/@shell/ui/sider/network-status/network-status.component.html + 36 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 90 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 146 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 203 + + + + Degraded Performance + + src/app/@shell/ui/sider/network-status/network-status.component.html + 43 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 97 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 153 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 210 + + + + Down + + src/app/@shell/ui/sider/network-status/network-status.component.html + 50 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 104 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 160 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 217 + + + + Last milestone + + src/app/@shell/ui/sider/network-status/network-status.component.html + 57,58 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 111,112 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 170,171 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 224,225 + + + + Devnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 78,79 + + + src/app/components/network/components/select-network/select-network.component.html + 61,63 + + + + Shimmer Mainnet Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 132,133 + + + + Testnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 191,192 + + + src/app/components/network/components/select-network/select-network.component.html + 33,35 + + + + Assembly + + src/app/@shell/ui/sider/network-status/network-status.component.html + 237 + + + + Assembly Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 244,245 + + + + Shimmer EVM Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 266,267 + + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 48 + + + + Show more + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 47 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 27 + + + src/app/components/timeline/timeline.component.html + 304 + + + + Show less + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 48 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 28 + + + src/app/components/timeline/timeline.component.html + 303 + + + + Search here... + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 50 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 30 + + + + Reset + + + src/app/components/algolia/algolia-clear/algolia-clear.component.html + 5,7 + + + + Search + + src/app/components/algolia/search/search.component.html + 20,19 + + + src/app/components/collection/components/select-collection/select-collection.component.html + 95,94 + + + src/app/components/space/components/select-space/select-space.component.html + 95,94 + + + + Start typing... + + src/app/components/algolia/search/search.component.html + 36 + + + + Open + + src/app/components/algolia/services/algolia.service.ts + 32 + + + + Guardians of Space Only + + src/app/components/algolia/services/algolia.service.ts + 34 + + + + Members of Space Only + + src/app/components/algolia/services/algolia.service.ts + 36 + + + + Members With Badge Only + + src/app/components/algolia/services/algolia.service.ts + 38 + + + + Members With NFT only + + src/app/components/algolia/services/algolia.service.ts + 40 + + + + Unavailable for sale + + src/app/components/algolia/services/algolia.service.ts + 53 + + + + On Auction + + src/app/components/algolia/services/algolia.service.ts + 55 + + + + Available + + src/app/components/algolia/services/algolia.service.ts + 57 + + + src/app/components/award/components/award-status/award-status.component.html + 23 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 61 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 162 + + + src/app/pages/space/pages/collections/collections.page.ts + 31 + + + src/app/pages/token/pages/token/token.page.ts + 256 + + + + On Sale + + src/app/components/algolia/services/algolia.service.ts + 59 + + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 19 + + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23 + + + + TanglePay + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 43 + + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 67 + + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 69 + + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 70 + + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 71 + + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 89,90 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 120,121 + + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 8,10 + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + + + Staking + + src/app/components/auth/services/auth.service.ts + 90 + + + + Tokens + + src/app/components/auth/services/auth.service.ts + 97 + + + src/app/pages/discover/pages/awards/awards.page.html + 145,144 + + + src/app/pages/member/pages/member/member.page.ts + 66 + + + src/app/pages/member/pages/tokens/tokens.page.html + 49 + + + src/app/pages/member/pages/tokens/tokens.page.html + 235 + + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 41 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 2 + + + + Swap + + src/app/components/auth/services/auth.service.ts + 104 + + + + Pool + + src/app/components/auth/services/auth.service.ts + 111 + + + + Marketplace + + src/app/components/auth/services/auth.service.ts + 118 + + + + My Overview + + src/app/components/auth/services/auth.service.ts + 125 + + + src/app/pages/dashboard/dashboard.page.html + 2 + + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 232 + + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 278 + + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 290 + + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 298 + + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 307 + + + src/app/components/auth/services/auth.service.ts + 378 + + + + Unable to connect your TanglePay wallet. + + src/app/components/auth/services/auth.service.ts + 343 + + + src/app/components/auth/services/auth.service.ts + 482 + + + + Unable to detect address in TanglePay! + + src/app/components/auth/services/auth.service.ts + 349 + + + + You have to open Soonaverse in wallet app. + + src/app/components/auth/services/auth.service.ts + 443 + + + + Failed to initialize wallet, try to reload page. + + src/app/components/auth/services/auth.service.ts + 445 + + + + Give badges + + src/app/components/award/components/award-awards/award-awards.component.html + 11 + + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 16 + + + + Once issued, this badge is sent to the rewarded participant's wallet. + + src/app/components/award/components/award-awards/award-awards.component.html + 36 + + + + Upload CSV + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 31,32 + + + + Download CSV template + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 34 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 85 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 10 + + + + You can create badge airdrops for any user. You can upload CSV with users addresses and they will be properly reward. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 42,44 + + + + If you don’t know how to prepare CSV file, you can download our template made for you. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 50,51 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 101,102 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 25,26 + + + + Confirm schedule + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 77 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 128 + + + + Address + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 97 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 21 + + + + Action + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 98 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 288 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 153 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 22 + + + src/app/pages/token/pages/trade/trade.page.html + 214 + + + src/app/pages/token/pages/trade/trade.page.html + 288 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 24 + + + + Badge + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 104 + + + src/app/pages/award/pages/new/new.page.html + 298,297 + + + + Submitted. + + src/app/components/award/components/award-give-badges/award-give-badges.component.ts + 103 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 137 + + + + Fund Award & Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 3 + + + + Reward Token + + src/app/components/award/components/award-mint/award-mint.component.html + 21 + + + + Reward to be funded + + src/app/components/award/components/award-mint/award-mint.component.html + 43 + + + + Confirm & Start + + src/app/components/award/components/award-mint/award-mint.component.html + 98,99 + + + + Once you agree with the terms, the generated address will remain active during the whole process. + + src/app/components/award/components/award-mint/award-mint.component.html + 105,107 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 181,183 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 93,95 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 146,148 + + + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + src/app/components/award/components/award-mint/award-mint.component.html + 120,121 + + + + Transaction history + + src/app/components/award/components/award-mint/award-mint.component.html + 159 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 252 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 246 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 134 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 176 + + + src/app/components/space/components/space-claim/space-claim.component.html + 113 + + + src/app/components/space/components/space-claim/space-claim.component.html + 135 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 122 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 144 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 207 + + + src/app/components/token/components/token-bid/token-bid.component.html + 212 + + + src/app/components/token/components/token-bid/token-bid.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 256 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 249 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 254 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 276 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 209 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 269 + + + src/app/components/token/components/token-stake/token-stake.component.html + 319 + + + src/app/components/token/components/token-stake/token-stake.component.html + 341 + + + src/app/components/token/components/token-vote/token-vote.component.html + 271 + + + src/app/components/token/components/token-vote/token-vote.component.html + 293 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 110 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 146 + + + + Transaction complete. Congratulations. + + src/app/components/award/components/award-mint/award-mint.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 271 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 235 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 277 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 294 + + + + Finish Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 191,192 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 289,290 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 281,282 + + + + Funding info + + src/app/components/award/components/award-mint/award-mint.component.ts + 83 + + + + Make transaction + + src/app/components/award/components/award-mint/award-mint.component.ts + 84 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 92 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 87 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 101 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 77 + + + + Wait for confirmation + + src/app/components/award/components/award-mint/award-mint.component.ts + 85 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 93 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 87 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 109 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 88 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 102 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 78 + + + + Confirmed + + src/app/components/award/components/award-mint/award-mint.component.ts + 86 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 94 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 88 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 110 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 89 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 103 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 79 + + + + Payment received. + + src/app/components/award/components/award-mint/award-mint.component.ts + 141 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 150 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 196 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 136 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 136 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 145 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 155 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 140 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 159 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 157 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 131 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 224 + + + + Confirming transaction. + + src/app/components/award/components/award-mint/award-mint.component.ts + 158 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 167 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 213 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 164 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 189 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 153 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 153 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 162 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 172 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 157 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 176 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 174 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 148 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 241 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 208 + + + + Transaction confirmed. + + src/app/components/award/components/award-mint/award-mint.component.ts + 167 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 176 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 222 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 173 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 198 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 162 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 162 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 171 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 181 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 166 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 185 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 183 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 157 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 250 + + + + Invalid amount received. Refunding transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 186 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 203 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 258 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 182 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 190 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 210 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 186 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 204 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 212 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 190 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 270 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 247 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 159 + + + + Invalid transaction.You must gift storage deposit. + + src/app/components/award/components/award-mint/award-mint.component.ts + 209 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 218 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 281 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 206 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 205 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 213 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 225 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 209 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 227 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 227 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 206 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 293 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 262 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 175 + + + + Invalid payment refunded. + + src/app/components/award/components/award-mint/award-mint.component.ts + 224 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 233 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 296 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 220 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 228 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 241 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 224 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 242 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 243 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 221 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 308 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 279 + + + + Waiting for transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 300 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 321 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 442 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 290 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 317 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 311 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 316 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 306 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 348 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 327 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 319 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 350 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 336 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 415 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 398 + + + + Pending Funding + + + src/app/components/award/components/award-status/award-status.component.html + 5,6 + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 11,12 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 11,12 + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 17 + + + src/app/pages/space/pages/awards/awards.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 32 + + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 570 + + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 557 + + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 29 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 583 + + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 39 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 595 + + + + Specific members only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 53 + + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 28 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 95 + + + src/app/components/token/components/token-card/token-card.component.html + 70 + + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 30 + + + src/app/components/countdown/countdown.component.html + 56 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 109 + + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 33 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 122 + + + + Collection is not yet migrated to the decentralized network. + + src/app/components/collection/components/collection-card/collection-card.component.html + 59 + + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 76 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 611 + + + + Floor Price + + src/app/components/collection/components/collection-card/collection-card.component.html + 104 + + + src/app/pages/collection/pages/collection/collection.page.html + 207 + + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 56 + + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 66 + + + src/app/pages/space/pages/awards/awards.page.ts + 33 + + + src/app/pages/space/pages/collections/collections.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 33 + + + + Remaining + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 42 + + + + NFTs + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 49 + + + src/app/pages/market/pages/market/market.page.ts + 13 + + + src/app/pages/market/pages/market/market.page.ts + 34 + + + src/app/pages/member/pages/member/member.page.ts + 67 + + + + Mint collection on network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 3 + + + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 43,45 + + + + Unsold NFT's + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 60,61 + + + + Decide what should happen with all NFTs that were not sold yet. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 67 + + + + Keep the same price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 76 + + + + Take Ownership + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 86 + + + + Set new price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 96 + + + + Burn all unsold + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 103 + + + + Note that the collection ownership will be granted only to your profile. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 130,131 + + + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 141,143 + + + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 150 + + + + Confirm & Start minting + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 174,175 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 139,140 + + + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 196,198 + + + + remaining to make the transfer. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 171 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 90 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 132 + + + src/app/components/space/components/space-claim/space-claim.component.html + 78 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 87 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 140 + + + src/app/components/token/components/token-bid/token-bid.component.html + 170 + + + src/app/components/token/components/token-claim/token-claim.component.html + 199 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 194 + + + src/app/components/token/components/token-stake/token-stake.component.html + 279 + + + src/app/components/token/components/token-vote/token-vote.component.html + 209 + + + + Expired + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 213 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 174 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 93 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 135 + + + src/app/components/space/components/space-claim/space-claim.component.html + 81 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 90 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 143 + + + src/app/components/token/components/token-bid/token-bid.component.html + 173 + + + src/app/components/token/components/token-claim/token-claim.component.html + 202 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 197 + + + src/app/components/token/components/token-stake/token-stake.component.html + 282 + + + src/app/components/token/components/token-vote/token-vote.component.html + 212 + + + src/app/pages/token/services/helper.service.ts + 204 + + + + NFT's from this collection are now being migrated. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 284,285 + + + + NFT's in collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 308,309 + + + + Total Storage Fee + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 318 + + + + (NFTs Storage Fee + Collection Storage Fee) + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 319 + + + + Select network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 91 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 86 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 100 + + + + Pending + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5,6 + + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 4 + + + src/app/pages/nft/pages/new/single/single.page.html + 352 + + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 13 + + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 83 + + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 114 + + + src/app/components/space/components/select-space/select-space.component.html + 114 + + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 20 + + + + + + src/app/components/confirm-modal/confirm-modal.component.html + 48,50 + + + src/app/components/confirm-modal/confirm-modal.component.html + 51,53 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 246,251 + + + src/app/components/token/components/token-vote/token-vote.component.html + 46,47 + + + src/app/pages/collection/pages/collection/collection.page.html + 130,131 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 55,56 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 71,72 + + + + Are you sure? + + src/app/components/confirm-modal/confirm-modal.component.ts + 30 + + + + Close + + src/app/components/confirm-modal/confirm-modal.component.ts + 33 + + + + Confirm + + src/app/components/confirm-modal/confirm-modal.component.ts + 34 + + + src/app/components/token/components/token-bid/token-bid.component.html + 146 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 170 + + + src/app/components/token/components/token-vote/token-vote.component.html + 181 + + + + Connect wallet + + src/app/components/connect-wallet/connect-wallet.component.html + 7 + + + + d + + src/app/components/countdown/countdown.component.html + 55 + + + + h + + src/app/components/countdown/countdown.component.html + 68 + + + + hours + + src/app/components/countdown/countdown.component.html + 69 + + + + m + + src/app/components/countdown/countdown.component.html + 81 + + + + min + + src/app/components/countdown/countdown.component.html + 82 + + + + s + + src/app/components/countdown/countdown.component.html + 94 + + + + sec + + src/app/components/countdown/countdown.component.html + 95 + + + + Ends + + src/app/components/date-tag/date-tag.component.ts + 11 + + + + Price + + src/app/components/iota-input/iota-input.component.html + 3 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 139 + + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 81 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 19 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 124 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 49 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 75 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 37 + + + src/app/pages/token/pages/trade/trade.page.html + 209 + + + src/app/pages/token/pages/trade/trade.page.html + 283 + + + src/app/pages/token/pages/trade/trade.page.html + 372 + + + src/app/pages/token/pages/trade/trade.page.html + 659 + + + src/app/pages/token/pages/trade/trade.page.html + 846 + + + + Verified addresses + + src/app/components/member/components/member-about/member-about.component.html + 90 + + + + Manage + + src/app/components/member/components/member-about/member-about.component.html + 96 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 297 + + + src/app/pages/space/pages/space/space.page.ts + 53 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 18 + + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 119 + + + + All + + src/app/components/member/components/member-about/member-about.component.html + 124 + + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 155 + + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 74 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 22 + + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 14 + + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19 + + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 26 + + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 36 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 208 + + + src/app/pages/space/pages/space/space.page.ts + 44 + + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 41 + + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 48 + + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 57 + + + src/app/pages/space/pages/upsert/upsert.page.html + 166 + + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 62 + + + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,78 + + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 92 + + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 97 + + + src/app/pages/space/pages/upsert/upsert.page.html + 54 + + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 99 + + + src/app/pages/space/pages/upsert/upsert.page.html + 61 + + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 105 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67 + + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 117 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 177 + + + src/app/pages/space/pages/upsert/upsert.page.html + 78 + + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 123 + + + src/app/pages/space/pages/upsert/upsert.page.html + 84 + + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 135 + + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 141 + + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 155 + + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 157,158 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 123,124 + + + + + + + src/app/components/network/components/select-network/select-network.component.html + 4,6 + + + + Shimmer + + src/app/components/network/components/select-network/select-network.component.html + 17 + + + src/app/components/network/components/select-network/select-network.component.html + 28 + + + src/app/components/network/components/selected-network/selected-network.component.html + 11 + + + src/app/pages/award/pages/award/award.page.html + 44 + + + src/app/pages/collection/pages/collection/collection.page.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 575 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 169 + + + + IOTA + + src/app/components/network/components/select-network/select-network.component.html + 45 + + + src/app/components/network/components/select-network/select-network.component.html + 56 + + + src/app/components/network/components/selected-network/selected-network.component.html + 19 + + + src/app/pages/award/pages/award/award.page.html + 52 + + + src/app/pages/collection/pages/collection/collection.page.html + 59 + + + src/app/pages/nft/pages/nft/nft.page.html + 583 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 177 + + + + Selected Network + + src/app/components/network/components/selected-network/selected-network.component.html + 4,6 + + + + Shimmer Testnet + + src/app/components/network/components/selected-network/selected-network.component.html + 15 + + + src/app/pages/award/pages/award/award.page.html + 48 + + + src/app/pages/collection/pages/collection/collection.page.html + 55 + + + src/app/pages/nft/pages/nft/nft.page.html + 579 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 173 + + + + IOTA Devnet + + src/app/components/network/components/selected-network/selected-network.component.html + 23 + + + src/app/pages/award/pages/award/award.page.html + 56 + + + src/app/pages/collection/pages/collection/collection.page.html + 63 + + + src/app/pages/nft/pages/nft/nft.page.html + 587 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 181 + + + + Send + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + + + to following address: + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + + + Copied + + src/app/components/network/components/send-funds/send-funds.component.html + 25 + + + src/app/components/share/share.component.html + 27 + + + src/app/components/wallet-address/wallet-address.component.html + 29 + + + + Copy + + src/app/components/network/components/send-funds/send-funds.component.html + 26 + + + + Do not send funds from an exchange, always use wallets you fully control. + + + src/app/components/network/components/send-funds/send-funds.component.html + 34,36 + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 3 + + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 15 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 16 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 25 + + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 38 + + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 48 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 36 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46 + + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 55 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 43 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 53 + + + + Royalties goes to + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 73,74 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 61,62 + + + + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 75,76 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 63,64 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 262,263 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 188,189 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 264,265 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 306,307 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 344,345 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 45 + + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 109 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 111 + + + src/app/pages/nft/pages/nft/nft.page.html + 111 + + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 127 + + + src/app/pages/nft/pages/nft/nft.page.html + 116 + + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 172,173 + + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 208,209 + + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 216,218 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,257 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 321,323 + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 237,238 + + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 278 + + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 286 + + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 287 + + + src/app/pages/token/pages/trade/trade.page.html + 854 + + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 289 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 33 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 110 + + + src/app/pages/member/pages/tokens/tokens.page.html + 328 + + + src/app/pages/member/pages/transactions/transactions.page.html + 25 + + + src/app/pages/nft/pages/nft/nft.page.html + 323 + + + src/app/pages/nft/pages/nft/nft.page.html + 385 + + + src/app/pages/nft/pages/nft/nft.page.html + 435 + + + src/app/pages/token/pages/trade/trade.page.html + 200 + + + src/app/pages/token/pages/trade/trade.page.html + 274 + + + src/app/pages/token/pages/trade/trade.page.html + 363 + + + src/app/pages/token/pages/trade/trade.page.html + 664 + + + src/app/pages/token/pages/trade/trade.page.html + 851 + + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 55 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 96 + + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 311,310 + + + src/app/pages/nft/pages/nft/nft.page.html + 324 + + + src/app/pages/nft/pages/nft/nft.page.html + 360,359 + + + src/app/pages/nft/pages/nft/nft.page.html + 386 + + + src/app/pages/nft/pages/nft/nft.page.html + 410,409 + + + src/app/pages/nft/pages/nft/nft.page.html + 436 + + + src/app/pages/nft/pages/nft/nft.page.html + 460,459 + + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 345 + + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 357,358 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 283,284 + + + src/app/components/token/components/token-bid/token-bid.component.html + 271,272 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 313,314 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 306,307 + + + src/app/components/token/components/token-vote/token-vote.component.html + 330,331 + + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 368,369 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 294,295 + + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 384 + + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 272 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 459 + + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 274 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 461 + + + + NFT is not yet migrated to the decentralized network. + + src/app/components/nft/components/nft-card/nft-card.component.html + 65 + + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 118 + + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 156 + + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 191 + + + src/app/pages/nft/pages/nft/nft.page.html + 594 + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 229,231 + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 167 + + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 3 + + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 74,75 + + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150,151 + + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 156 + + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 185 + + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 237,238 + + + + Order created. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 437 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 332 + + + + Deposit NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 215 + + + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 46,48 + + + + Confirm & Start deposit + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 76,77 + + + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 113,115 + + + + NFT has been deposited. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 165 + + + + See NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 169,170 + + + + Terms & Conditions + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 85 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 107 + + + + Send NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 86 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 108 + + + + NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 147 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 172 + + + + Invalid NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 191 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 216 + + + + Invalid NFT refunded. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 205 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 230 + + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 19 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 37 + + + + Sale Starts + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 57 + + + src/app/pages/nft/services/helper.service.ts + 142 + + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 60 + + + src/app/pages/nft/pages/nft/nft.page.html + 70 + + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 80 + + + + System info + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 119 + + + src/app/pages/nft/pages/nft/nft.page.html + 634 + + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 130 + + + src/app/pages/nft/pages/nft/nft.page.html + 654 + + + + Properties + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 135 + + + src/app/pages/nft/pages/new/single/single.page.html + 90 + + + + Stats + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 139 + + + src/app/pages/nft/pages/new/single/single.page.html + 193,192 + + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149 + + + src/app/pages/nft/pages/new/single/single.page.html + 301 + + + src/app/pages/nft/pages/nft/nft.page.html + 27 + + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + + + Available once minted... + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 64 + + + src/app/pages/nft/pages/nft/nft.page.ts + 81 + + + + Set your floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 6,7 + + + + Available time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 42,43 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 42,43 + + + + NOW + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 54,55 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 54,55 + + + + Select Date/Time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 71 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 71 + + + src/app/pages/nft/pages/new/single/single.page.html + 69 + + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 80 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 80 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 70 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 81 + + + src/app/pages/nft/pages/new/single/single.page.html + 68 + + + src/app/pages/nft/pages/new/single/single.page.html + 79 + + + + Auction length + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 91,92 + + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 98 + + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 115 + + + + Auction can't be canceled after start date + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 125 + + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 129 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 145 + + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 138,139 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 154,155 + + + + Set your price + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 6,7 + + + + Sale type + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 103,104 + + + + Specific member(s) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 113,114 + + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2 + + + src/app/pages/token/pages/trade/trade.page.html + 110 + + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 8,10 + + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 16 + + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 17 + + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 15 + + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 80 + + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 88 + + + src/app/pages/token/services/new.service.ts + 29 + + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 96 + + + + Stake NFT + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 221 + + + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 46,48 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 147,149 + + + + For how long you want to stake? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 56,57 + + + src/app/components/token/components/token-stake/token-stake.component.html + 174,175 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 57,58 + + + + Stake type? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 77,78 + + + + Confirm & Start Stake + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 118,119 + + + + NFT has been staked. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 207 + + + + See Collection + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 218,219 + + + + Dynamic + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 76 + + + + Static + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 80 + + + + More + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 97,98 + + + + Pending + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 6,7 + + + src/app/pages/token/pages/token/token.page.html + 36 + + + src/app/pages/token/pages/trade/trade.page.html + 524 + + + + Rejected + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 12,13 + + + src/app/pages/token/pages/token/token.page.html + 42 + + + + Commencing + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 18,19 + + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 24,25 + + + + Completed + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 31,32 + + + + Share + + src/app/components/share/share.component.html + 16 + + + src/app/components/share/share.component.html + 39 + + + src/app/pages/token/pages/trade/trade.page.html + 64 + + + src/app/pages/token/pages/trade/trade.page.html + 635,634 + + + + Copy to clipboard + + src/app/components/share/share.component.html + 28 + + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 4 + + + src/app/pages/award/pages/new/new.page.html + 121 + + + src/app/pages/proposal/pages/new/new.page.html + 211 + + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 13 + + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 83 + + + src/app/pages/award/pages/new/new.page.html + 152 + + + src/app/pages/proposal/pages/new/new.page.html + 242 + + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 20 + + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 19,20 + + + + members + + src/app/components/space/components/space-card/space-card.component.html + 44 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 23 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + + + Space Claim + + src/app/components/space/components/space-claim/space-claim.component.html + 3 + + + + Confirm and generate address + + src/app/components/space/components/space-claim/space-claim.component.html + 54,55 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 52,53 + + + src/app/components/token/components/token-claim/token-claim.component.html + 138,139 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 96,97 + + + src/app/components/token/components/token-stake/token-stake.component.html + 251,252 + + + + Claim complete. Congratulations. + + src/app/components/space/components/space-claim/space-claim.component.html + 160 + + + src/app/components/token/components/token-claim/token-claim.component.html + 281 + + + + Close + + src/app/components/space/components/space-claim/space-claim.component.html + 172,173 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 181,182 + + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 29,30 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 79,80 + + + src/app/components/token/components/token-claim/token-claim.component.html + 293,294 + + + src/app/components/token/components/token-stake/token-stake.component.html + 378,379 + + + + Invalid amount or invalid senders address. Refunding transaction... + + src/app/components/space/components/space-claim/space-claim.component.ts + 183 + + + + Funds refunded. + + src/app/components/space/components/space-claim/space-claim.component.ts + 222 + + + + Space claim submitted. + + src/app/components/space/components/space-claim/space-claim.component.ts + 306 + + + + Token Reward Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 16 + + + + Existing Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 29 + + + + Upload New + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 37 + + + + Vault address: + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 55,64 + + + + Schedule a new Reward + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 82,83 + + + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 93,95 + + + + Start Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 148 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 24 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 24 + + + + End Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 149 + + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 19 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 25 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 25 + + + + Vesting Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 150 + + + + Tokens to Distribute + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 151 + + + + Status + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 152 + + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 110,109 + + + src/app/pages/token/pages/trade/trade.page.html + 376 + + + + Proposal created to remove the reward. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 154 + + + + By checking this box, you agree with + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 12 + + + + Terms and Conditions + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 13 + + + + Timeline + + src/app/components/timeline/timeline.component.html + 2 + + + src/app/components/timeline/timeline.component.html + 8 + + + + Earned Badge + + src/app/components/timeline/timeline.component.html + 66 + + + + with + + src/app/components/timeline/timeline.component.html + 66 + + + + Listed by + + src/app/components/timeline/timeline.component.html + 109 + + + + Made available for auction by + + src/app/components/timeline/timeline.component.html + 112 + + + + Purchased by + + src/app/components/timeline/timeline.component.html + 170 + + + + See + + src/app/components/timeline/timeline.component.html + 181 + + + + Hide + + src/app/components/timeline/timeline.component.html + 182 + + + + Listed by space + + src/app/components/timeline/timeline.component.html + 287 + + + + Refund blocked funds + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 3 + + + + Total available tokens to refund + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 29 + + + + Refund complete. Congratulations. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 169 + + + + Credit refund submitted. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 309 + + + + Airdrop tokens on the network + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 3 + + + + Tokens to airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 56,57 + + + + Confirm & Start Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 86,87 + + + + Tokens to Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 120,121 + + + + Finish Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 239,240 + + + + Detail + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 60,61 + + + + Trade + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 70,71 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 201,202 + + + + Price (USD) + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 101 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 145 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 86 + + + + 24h Change + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 126,127 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 115,116 + + + + 24h Volume + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 154 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 146 + + + + M. Cap + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 172 + + + + Open buy order + + src/app/components/token/components/token-bid/token-bid.component.html + 3 + + + + Summary + + src/app/components/token/components/token-bid/token-bid.component.html + 29,30 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 39,40 + + + src/app/components/token/components/token-offer/token-offer.component.html + 46,47 + + + + Token amount to buy + + src/app/components/token/components/token-bid/token-bid.component.html + 34,35 + + + + Offered price per token + + src/app/components/token/components/token-bid/token-bid.component.html + 44,45 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 44,45 + + + src/app/components/token/components/token-offer/token-offer.component.html + 51,52 + + + + Token amount to send + + src/app/components/token/components/token-bid/token-bid.component.html + 73,74 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 117,118 + + + + ~ + + src/app/components/token/components/token-bid/token-bid.component.html + 89,98 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 60,69 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 90,99 + + + src/app/pages/token/pages/trade/trade.page.html + 553,556 + + + + I agree with + + src/app/components/token/components/token-bid/token-bid.component.html + 129 + + + src/app/components/token/components/token-claim/token-claim.component.html + 115 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 153 + + + src/app/components/token/components/token-offer/token-offer.component.html + 133 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 78 + + + src/app/components/token/components/token-refund/token-refund.component.html + 65 + + + + Token terms and Conditions + + src/app/components/token/components/token-bid/token-bid.component.html + 131 + + + src/app/components/token/components/token-claim/token-claim.component.html + 117 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 155 + + + src/app/components/token/components/token-offer/token-offer.component.html + 135 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 80 + + + src/app/components/token/components/token-refund/token-refund.component.html + 67 + + + + and generate address + + src/app/components/token/components/token-bid/token-bid.component.html + 147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 171 + + + src/app/components/token/components/token-vote/token-vote.component.html + 182 + + + + Once you agree with the terms, the generated address will remain active during the whole sale. + + src/app/components/token/components/token-bid/token-bid.component.html + 154,155 + + + src/app/components/token/components/token-claim/token-claim.component.html + 146,147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 178,179 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 103,104 + + + + Buy complete. Congratulations. + + src/app/components/token/components/token-bid/token-bid.component.html + 259 + + + + Bid created. + + src/app/components/token/components/token-bid/token-bid.component.ts + 344 + + + + Are you sure you want to cancel the sale? + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 17 + + + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 23,25 + + + + Cancel sale + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 32,33 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 74,75 + + + + Canceled public sale. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts + 56 + + + + Total () + + src/app/components/token/components/token-cancel/token-cancel.component.html + 51,52 + + + + Are you sure you want to cancel your buy order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 66 + + + + Are you sure you want to cancel your sell order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 69 + + + + Confirm + + src/app/components/token/components/token-cancel/token-cancel.component.html + 76,77 + + + + Cancelled. + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 48 + + + src/app/pages/token/pages/trade/trade.page.ts + 589 + + + + Cancel your buy + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 80 + + + + Cancel your sell + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 81 + + + + Ongoing sale + + src/app/components/token/components/token-card/token-card.component.html + 22 + + + + Sale ends soon + + src/app/components/token/components/token-card/token-card.component.html + 23 + + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 24 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 21 + + + + Sale starts + + src/app/components/token/components/token-card/token-card.component.html + 55,57 + + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 115,117 + + + src/app/components/token/components/token-card/token-card.component.html + 175,177 + + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 130 + + + src/app/components/token/components/token-card/token-card.component.html + 190 + + + src/app/components/token/components/token-card/token-card.component.html + 250 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 176 + + + src/app/components/token/components/token-row/token-row.component.html + 79 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 20 + + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 235,237 + + + + Token Claim + + src/app/components/token/components/token-claim/token-claim.component.html + 3 + + + + Total available tokens to claim as of today + + src/app/components/token/components/token-claim/token-claim.component.html + 42 + + + src/app/components/token/components/token-claim/token-claim.component.html + 56 + + + + Tokens available from + + src/app/components/token/components/token-claim/token-claim.component.html + 76 + + + + Total tokens to claim + + src/app/components/token/components/token-claim/token-claim.component.html + 84 + + + + Token claim submitted. + + src/app/components/token/components/token-claim/token-claim.component.ts + 320 + + + + Guardian's of the space will be able to decide where this token will be minted. + + src/app/components/token/components/token-info/token-info-description.component.html + 41 + + + + Icon + + src/app/components/token/components/token-info/token-info-description.component.ts + 25 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 24 + + + + Name + + src/app/components/token/components/token-info/token-info-description.component.ts + 26 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 25 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 31,30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 74 + + + src/app/pages/nft/pages/new/single/single.page.html + 21 + + + src/app/pages/nft/pages/new/single/single.page.html + 27,26 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 15 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 21,20 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 25 + + + + Symbol + + src/app/components/token/components/token-info/token-info-description.component.ts + 27 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 30 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 39,38 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 26 + + + + Launchpad Price + + src/app/components/token/components/token-info/token-info-description.component.ts + 28 + + + + Network + + src/app/components/token/components/token-info/token-info-description.component.ts + 29 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 20 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 5,4 + + + src/app/pages/nft/pages/nft/nft.page.html + 542 + + + src/app/pages/nft/pages/nft/nft.page.html + 564 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 119 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 160 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 28 + + + + Total supply + + src/app/components/token/components/token-info/token-info-description.component.ts + 30 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 29 + + + + Current distribution + + src/app/components/token/components/token-info/token-info-description.component.ts + 31 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 30 + + + + Type + + src/app/components/token/components/token-info/token-info-description.component.ts + 32 + + + src/app/pages/member/pages/tokens/tokens.page.html + 58 + + + src/app/pages/member/pages/tokens/tokens.page.html + 325 + + + src/app/pages/member/pages/transactions/transactions.page.html + 24 + + + src/app/pages/nft/pages/nft/nft.page.html + 384 + + + src/app/pages/nft/pages/nft/nft.page.html + 434 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 31 + + + src/app/pages/token/pages/trade/trade.page.html + 361 + + + + Coming soon + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 91,92 + + + + In Cooldown + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 98,99 + + + src/app/components/token/components/token-row/token-row.component.html + 245,246 + + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 108,109 + + + src/app/components/token/components/token-row/token-row.component.html + 256,257 + + + src/app/pages/token/pages/trade/trade.page.html + 456 + + + src/app/pages/token/pages/trade/trade.page.html + 467 + + + src/app/pages/token/pages/trade/trade.page.html + 909,910 + + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 116 + + + src/app/pages/token/pages/trade/trade.page.html + 387 + + + src/app/pages/token/pages/trade/trade.page.html + 1210 + + + + Sale starts + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 167 + + + src/app/components/token/components/token-row/token-row.component.html + 70 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 19 + + + + Cooldown period ends + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 187,188 + + + src/app/components/token/components/token-row/token-row.component.html + 90,91 + + + + Mint token on network + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 3 + + + + Public sale will no longer be available after bringing token to a network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 45,46 + + + + Once minted all owners will have the option to migrate their tokens to the selected network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 56,58 + + + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 68,70 + + + + Tokens to migrate + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 92,93 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 173,174 + + + + Locked public tokens + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 107,108 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 189,190 + + + + Open sale order + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 3 + + + + Token ID + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 30,31 + + + src/app/components/token/components/token-offer/token-offer.component.html + 27,28 + + + + You will receive + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 74,75 + + + src/app/components/token/components/token-offer/token-offer.component.html + 73,74 + + + src/app/pages/token/pages/trade/trade.page.html + 1132,1133 + + + + Fee + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 103 + + + src/app/components/token/components/token-offer/token-offer.component.html + 101 + + + src/app/pages/token/pages/trade/trade.page.html + 1172 + + + + No FEES! + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 110,111 + + + src/app/components/token/components/token-offer/token-offer.component.html + 108,109 + + + src/app/pages/token/pages/trade/trade.page.html + 1188,1189 + + + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 232,234 + + + src/app/components/token/components/token-vote/token-vote.component.html + 249,251 + + + + Sell complete. Congratulations. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 301 + + + src/app/components/token/components/token-vote/token-vote.component.html + 318 + + + + Offer order created. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 346 + + + + Open Token Sell + + src/app/components/token/components/token-offer/token-offer.component.html + 3 + + + + Your Balance + + src/app/components/token/components/token-offer/token-offer.component.html + 35,36 + + + + Offered amount of tokens + + src/app/components/token/components/token-offer/token-offer.component.html + 64,65 + + + + Create a Sell Order + + src/app/components/token/components/token-offer/token-offer.component.html + 151,152 + + + + Offer created. + + src/app/components/token/components/token-offer/token-offer.component.ts + 102 + + + + Public sale info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 4 + + + + Start date is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 7 + + + + Start date for the token offering + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 16 + + + + Offering length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 23 + + + + Select token offering length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 48 + + + + Token allocation info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 63 + + + + Sale Setup + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 81 + + + + Enable Cooldown period + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 87,88 + + + + Enable Cooldown with refund option. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 98,99 + + + + Cooldown period length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 103 + + + + Select token cooldown length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 129 + + + + No Cooldown. Participants can’t refund. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 149,150 + + + + Enable Oversale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 160,161 + + + + No Oversale. Sale ends with 100% reached. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 171,172 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 54,55 + + + + Sale continues after 100% reached + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 179,180 + + + + Confirm and schedule sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 195,196 + + + + Price per token + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 106 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 34 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 42 + + + + Public sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 135 + + + src/app/pages/token/pages/new/summary/summary.component.html + 214 + + + + Purchase token + + src/app/components/token/components/token-purchase/token-purchase.component.html + 3 + + + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 113 + + + + Enter how much you want to spend. Amount of tokens will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 116 + + + + Purchased tokens + + src/app/components/token/components/token-purchase/token-purchase.component.html + 243,244 + + + + Price + + src/app/components/token/components/token-purchase/token-purchase.component.html + 260,261 + + + + Cooldown period ends + + src/app/components/token/components/token-refund/token-refund.component.html + 23 + + + + Confirm and refund + + src/app/components/token/components/token-refund/token-refund.component.html + 82,83 + + + + Refund token + + src/app/components/token/components/token-refund/token-refund.component.ts + 61 + + + + Initial Price + + src/app/components/token/components/token-row/token-row.component.html + 39 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 27 + + + + Avg. Price + + src/app/components/token/components/token-row/token-row.component.html + 47 + + + + Change (24h) + + src/app/components/token/components/token-row/token-row.component.html + 107,108 + + + + Volume 24h + + src/app/components/token/components/token-row/token-row.component.html + 150 + + + + Market Cap + + src/app/components/token/components/token-row/token-row.component.html + 166 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 169 + + + src/app/pages/token/pages/trade/trade.page.html + 582 + + + + Claim + + src/app/components/token/components/token-row/token-row.component.html + 210,211 + + + + Refund + + src/app/components/token/components/token-row/token-row.component.html + 222,223 + + + + Launching soon + + src/app/components/token/components/token-row/token-row.component.html + 238,239 + + + + Buy / Sell + + src/app/components/token/components/token-row/token-row.component.html + 259,260 + + + + Stake your token + + src/app/components/token/components/token-stake/token-stake.component.html + 3 + + + + Select or define the amount you want to stake and the period for how long you want to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 13,15 + + + + Since you are a guardian you can also + + src/app/components/token/components/token-stake/token-stake.component.html + 17 + + + + - Choose an amount and for how long you’d like to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 50 + + + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + src/app/components/token/components/token-stake/token-stake.component.html + 52,54 + + + + - You will get staked points based on your input. + + src/app/components/token/components/token-stake/token-stake.component.html + 56,57 + + + + See Staking reward page for more info + + src/app/components/token/components/token-stake/token-stake.component.html + 62 + + + + here. + + src/app/components/token/components/token-stake/token-stake.component.html + 63 + + + + How it works + + src/app/components/token/components/token-stake/token-stake.component.html + 71 + + + + How much you want to stake? + + src/app/components/token/components/token-stake/token-stake.component.html + 87,88 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 21,22 + + + + Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 192 + + + + Staking Value + + src/app/components/token/components/token-stake/token-stake.component.html + 210,219 + + + + Staked amount * Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 216 + + + src/app/pages/member/pages/activity/activity.page.html + 36 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 107 + + + + You will earn + + src/app/components/token/components/token-stake/token-stake.component.html + 230 + + + + Stake complete. Congratulations. + + src/app/components/token/components/token-stake/token-stake.component.html + 366 + + + + Token stake submitted. + + src/app/components/token/components/token-stake/token-stake.component.ts + 410 + + + + Trade details + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 3 + + + + Traded amount + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 29,30 + + + + Price per token + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 48,49 + + + src/app/pages/token/pages/new/summary/summary.component.html + 69,70 + + + + Date and Time + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 79,80 + + + + Fullfilled + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 94,95 + + + + Date + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 109 + + + src/app/pages/member/pages/transactions/transactions.page.html + 22 + + + src/app/pages/nft/pages/nft/nft.page.html + 383 + + + src/app/pages/nft/pages/nft/nft.page.html + 433 + + + src/app/pages/proposal/pages/votes/votes.page.html + 15 + + + src/app/pages/token/pages/trade/trade.page.html + 198 + + + src/app/pages/token/pages/trade/trade.page.html + 272 + + + src/app/pages/token/pages/trade/trade.page.html + 360 + + + + State + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 111 + + + + Storage deposit fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 144 + + + + Fullfilment + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 171 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 252 + + + + Seller + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 176 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 247 + + + + Transaction + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 204 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 280 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 314 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 358 + + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 41 + + + src/app/pages/member/pages/transactions/transactions.page.html + 74 + + + + Non Transferable + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 153 + + + src/app/pages/member/pages/transactions/transactions.page.html + 77 + + + + Processing... + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 155 + + + src/app/pages/member/pages/transactions/transactions.page.html + 87 + + + + Soonaverse Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 170 + + + + Exchange Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 172 + + + + 24h change/Price + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 46 + + + + Markets + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 6 + + + src/app/pages/token/pages/trade/trade.page.html + 1242 + + + + No Tokens + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 38,39 + + + src/app/pages/tokens/pages/favourites/favourites.page.html + 25,26 + + + + Cast Vote + + src/app/components/token/components/token-vote/token-vote.component.html + 3 + + + + Question + + src/app/components/token/components/token-vote/token-vote.component.html + 16,17 + + + + Selected option + + src/app/components/token/components/token-vote/token-vote.component.html + 23,24 + + + + How do you set your votes? + + src/app/components/token/components/token-vote/token-vote.component.html + 33,34 + + + + Total native tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 88,89 + + + + Total staked tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 105,106 + + + + Voting is active on + + src/app/components/token/components/token-vote/token-vote.component.html + 119,120 + + + + Your total voting weight + + src/app/components/token/components/token-vote/token-vote.component.html + 131,132 + + + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + src/app/components/token/components/token-vote/token-vote.component.html + 151,153 + + + + Cast Votes + + src/app/components/token/components/token-vote/token-vote.component.html + 193 + + + + Send Native Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 124 + + + + Use Staked Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 128 + + + + Vote received. + + src/app/components/token/components/token-vote/token-vote.component.ts + 191 + + + + Transaction confirmed and funds refunded. + + src/app/components/token/components/token-vote/token-vote.component.ts + 217 + + + + Token vote executed. + + src/app/components/token/components/token-vote/token-vote.component.ts + 375 + + + + Token vote order created. + + src/app/components/token/components/token-vote/token-vote.component.ts + 392 + + + + Type + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 13,14 + + + + Date + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 22,23 + + + + Manage addresses + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 3 + + + + Not yet verified + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 59 + + + + Change + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 66 + + + + Verify + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 67 + + + + You will be asked to send funds to the new + + src/app/components/wallet-address/verify-address/verify-address.component.html + 33 + + + + address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/verify-address/verify-address.component.html + 36,37 + + + + space + + src/app/components/wallet-address/verify-address/verify-address.component.html + 41 + + + + profile + + src/app/components/wallet-address/verify-address/verify-address.component.html + 43 + + + + for future transactions. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 44 + + + + Generate new address + + src/app/components/wallet-address/verify-address/verify-address.component.html + 55,56 + + + + Send a small + + src/app/components/wallet-address/verify-address/verify-address.component.html + 66 + + + + amount to validate your address. This expires in + + src/app/components/wallet-address/verify-address/verify-address.component.html + 67 + + + + Expired. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 70 + + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/verify-address/verify-address.component.html + 106,107 + + + + Validating address... + + src/app/components/wallet-address/verify-address/verify-address.component.html + 136 + + + + Now you can deal with NFTs and participate in token trading. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 174 + + + + Your new address has been verified! + + src/app/components/wallet-address/verify-address/verify-address.component.html + 176 + + + + Finish Verification + + src/app/components/wallet-address/verify-address/verify-address.component.html + 181,182 + + + + Generate address + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 76 + + + + Refunding your payment... + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 192 + + + + Address is not verified + + src/app/components/wallet-address/wallet-address.component.html + 4 + + + + wallet + + src/app/components/wallet-address/wallet-address.component.html + 25 + + + + Copy address + + src/app/components/wallet-address/wallet-address.component.html + 30 + + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + + + address + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + + + This network is currently not enabled. + + src/app/components/wallet-address/wallet-address.component.ts + 82 + + + + Award Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 20 + + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 18 + + + + Badge lock period + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 20 + + + + Award info + + src/app/pages/award/pages/award/award.page.html + 3 + + + src/app/pages/award/pages/new/new.page.html + 17 + + + + Minted on: + + src/app/pages/award/pages/award/award.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 47 + + + + Fund Award + + src/app/pages/award/pages/award/award.page.html + 121,122 + + + + Minting in Progress + + src/app/pages/award/pages/award/award.page.html + 129,130 + + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 136 + + + src/app/pages/award/pages/award/award.page.html + 210 + + + + Reject Award + + src/app/pages/award/pages/award/award.page.html + 157 + + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 166 + + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 174,176 + + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 180 + + + + Submit + + src/app/pages/award/pages/award/award.page.html + 188 + + + + Cancel + + src/app/pages/award/pages/award/award.page.html + 189 + + + src/app/pages/token/pages/trade/trade.page.html + 245 + + + src/app/pages/token/pages/trade/trade.page.html + 333 + + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 41 + + + src/app/pages/token/pages/new/new.page.ts + 34 + + + src/app/pages/token/pages/token/token.page.ts + 36 + + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 105 + + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2 + + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14 + + + src/app/pages/award/pages/new/new.page.html + 77 + + + src/app/pages/proposal/pages/new/new.page.html + 24 + + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19 + + + + Title + + src/app/pages/award/pages/new/new.page.html + 23 + + + src/app/pages/award/pages/new/new.page.html + 29,28 + + + src/app/pages/award/pages/new/new.page.html + 76 + + + src/app/pages/award/pages/new/new.page.html + 83,82 + + + src/app/pages/proposal/pages/new/new.page.html + 23 + + + src/app/pages/proposal/pages/new/new.page.html + 29,28 + + + src/app/pages/proposal/pages/new/new.page.html + 103 + + + src/app/pages/proposal/pages/new/new.page.html + 109,108 + + + src/app/pages/proposal/pages/new/new.page.html + 156 + + + src/app/pages/proposal/pages/new/new.page.html + 162,161 + + + src/app/pages/space/pages/upsert/upsert.page.html + 24 + + + src/app/pages/space/pages/upsert/upsert.page.html + 30,29 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 106 + + + src/app/pages/token/pages/new/overview/overview.component.html + 22 + + + src/app/pages/token/pages/new/overview/overview.component.html + 29,28 + + + src/app/pages/token/pages/new/overview/overview.component.html + 65 + + + src/app/pages/token/pages/new/overview/overview.component.html + 72,71 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 9 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 16,15 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 55 + + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 24 + + + + End + + src/app/pages/award/pages/new/new.page.html + 36 + + + src/app/pages/award/pages/new/new.page.html + 47,46 + + + src/app/pages/proposal/pages/new/new.page.html + 56 + + + src/app/pages/proposal/pages/new/new.page.html + 68,67 + + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 37 + + + src/app/pages/proposal/pages/new/new.page.html + 57 + + + + Description + + src/app/pages/award/pages/new/new.page.html + 52 + + + src/app/pages/award/pages/new/new.page.html + 58 + + + src/app/pages/award/pages/new/new.page.html + 91 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 40 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 45 + + + src/app/pages/nft/pages/new/single/single.page.html + 33 + + + src/app/pages/nft/pages/new/single/single.page.html + 38 + + + src/app/pages/proposal/pages/new/new.page.html + 76 + + + src/app/pages/proposal/pages/new/new.page.html + 82 + + + src/app/pages/proposal/pages/new/new.page.html + 119 + + + src/app/pages/proposal/pages/new/new.page.html + 124 + + + src/app/pages/proposal/pages/new/new.page.html + 171 + + + src/app/pages/proposal/pages/new/new.page.html + 176 + + + src/app/pages/space/pages/upsert/upsert.page.html + 36 + + + src/app/pages/space/pages/upsert/upsert.page.html + 41 + + + src/app/pages/token/pages/new/overview/overview.component.html + 37 + + + src/app/pages/token/pages/new/overview/overview.component.html + 43 + + + src/app/pages/token/pages/new/overview/overview.component.html + 80 + + + src/app/pages/token/pages/new/overview/overview.component.html + 86 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 21 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 67 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 21 + + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 69 + + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 71 + + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 97 + + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 115 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 369 + + + src/app/pages/proposal/pages/new/new.page.html + 205 + + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 117 + + + + Reward info + + src/app/pages/award/pages/new/new.page.html + 170 + + + + You need to fund this award with native token. Select which token will be used as reward. + + src/app/pages/award/pages/new/new.page.html + 172 + + + + Token is required. + + src/app/pages/award/pages/new/new.page.html + 176 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 247 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + + + Select a token + + src/app/pages/award/pages/new/new.page.html + 207 + + + + Defines the amount of tokens for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 222,223 + + + + Invalid token amount per badge + + src/app/pages/award/pages/new/new.page.html + 226 + + + + Tokens per badge + + src/app/pages/award/pages/new/new.page.html + 234 + + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 251 + + + src/app/pages/award/pages/new/new.page.html + 338 + + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 273 + + + + Total to be funded + + src/app/pages/award/pages/new/new.page.html + 284,285 + + + + Upload image that will be used as a Reward Badge. + + src/app/pages/award/pages/new/new.page.html + 299 + + + + Badge is required. + + src/app/pages/award/pages/new/new.page.html + 328,329 + + + + Set the duration for which the badge will be locked in the Firefly wallet. + + src/app/pages/award/pages/new/new.page.html + 334,335 + + + + Create award + + src/app/pages/award/pages/new/new.page.html + 369,370 + + + + Award - New + + src/app/pages/award/pages/new/new.page.ts + 119 + + + src/app/pages/award/pages/new/new.page.ts + 134 + + + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/award/pages/new/new.page.ts + 120 + + + src/app/pages/award/pages/new/new.page.ts + 135 + + + + Member seems to log out during the file upload request. + + src/app/pages/award/pages/new/new.page.ts + 184 + + + src/app/pages/collection/pages/upsert/upsert.page.ts + 403 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 240 + + + src/app/pages/nft/pages/new/single/single.page.ts + 180 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 131 + + + src/app/pages/token/services/new.service.ts + 202 + + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2 + + + + Award - + + src/app/pages/award/pages/overview/overview.page.ts + 17 + + + src/app/pages/award/pages/participants/participants.page.ts + 83 + + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 49 + + + src/app/pages/award/pages/participants/participants.page.html + 63 + + + src/app/pages/proposal/pages/participants/participants.page.html + 49 + + + src/app/pages/proposal/pages/participants/participants.page.html + 63 + + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 72 + + + src/app/pages/proposal/pages/participants/participants.page.html + 72 + + + src/app/pages/space/pages/members/members.page.html + 92 + + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 90,91 + + + src/app/pages/proposal/pages/participants/participants.page.html + 90,91 + + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 118,119 + + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 138,139 + + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 50 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 158 + + + src/app/pages/space/pages/awards/awards.page.ts + 30 + + + src/app/pages/space/pages/collections/collections.page.ts + 30 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 30 + + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 51 + + + + See all participants within the award. + + src/app/pages/award/pages/participants/participants.page.ts + 84 + + + src/app/pages/proposal/pages/overview/overview.page.ts + 60 + + + + applied on + + src/app/pages/award/pages/participants/participants.page.ts + 257 + + + + Make NFT’s from this collection available on decentralised network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 12,13 + + + + Minting + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 29 + + + + NFTs left + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 32 + + + + Collection is not yet migrated to the decentralized network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 47,48 + + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 611 + + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 63,64 + + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 76,77 + + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89,90 + + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 102,103 + + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 118,119 + + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 126,127 + + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 175 + + + + discount for members with rewards from this space in total value of + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 190 + + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 5 + + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 22,23 + + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 81,82 + + + src/app/pages/collection/pages/collection/collection.page.html + 301,302 + + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 93,94 + + + src/app/pages/collection/pages/collection/collection.page.html + 313,314 + + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + + + Rank + + src/app/pages/collection/pages/collection/collection.page.html + 170,171 + + + src/app/pages/token/pages/token/token.page.html + 73,74 + + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 189 + + + + Deposited + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + + + Staked + + src/app/pages/collection/pages/collection/collection.page.html + 218 + + + + Links + + src/app/pages/collection/pages/collection/collection.page.html + 227 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 154,153 + + + src/app/pages/token/pages/new/overview/overview.component.html + 160,159 + + + src/app/pages/token/pages/new/summary/summary.component.html + 307,306 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 79 + + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 330 + + + src/app/pages/collection/pages/collection/collection.page.html + 376 + + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 346 + + + src/app/pages/collection/pages/collection/collection.page.html + 392 + + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 413 + + + src/app/pages/nft/pages/new/new.page.html + 2 + + + + Rank amount must be between + + src/app/pages/collection/pages/collection/collection.page.ts + 285 + + + src/app/pages/token/pages/token/token.page.ts + 195 + + + + records + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 13 + + + src/app/pages/discover/pages/awards/awards.page.html + 13 + + + src/app/pages/discover/pages/members/members.page.html + 13 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 13 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 13 + + + src/app/pages/market/pages/collections/collections.page.html + 13 + + + src/app/pages/member/pages/nfts/nfts.page.html + 13 + + + + Filters&Sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 30 + + + src/app/pages/discover/pages/awards/awards.page.html + 30 + + + src/app/pages/discover/pages/members/members.page.html + 30 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 30 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 30 + + + src/app/pages/market/pages/collections/collections.page.html + 30 + + + + Filters&sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 71 + + + src/app/pages/discover/pages/awards/awards.page.html + 78 + + + src/app/pages/discover/pages/members/members.page.html + 78 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 78 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 79 + + + src/app/pages/market/pages/collections/collections.page.html + 79 + + + + Sort by + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 93,92 + + + src/app/pages/discover/pages/awards/awards.page.html + 94,93 + + + src/app/pages/discover/pages/members/members.page.html + 94,93 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 94,93 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 95,94 + + + src/app/pages/market/pages/collections/collections.page.html + 95,94 + + + + Price range + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 131 + + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2 + + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3 + + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18 + + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20 + + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 58 + + + src/app/pages/nft/pages/new/single/single.page.html + 51 + + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 60 + + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 90 + + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 93,95 + + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 106 + + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 116 + + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 124 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 131 + + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 155 + + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 160 + + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 167,166 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 312,311 + + + src/app/pages/token/pages/new/overview/overview.component.html + 175,174 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 91,90 + + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 183 + + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 200 + + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 215 + + + + The discount applies only to members who have earned tokens from awards issued by this space. + + src/app/pages/collection/pages/upsert/upsert.page.html + 217 + + + + Token amount higher than + + src/app/pages/collection/pages/upsert/upsert.page.html + 231 + + + + Type awarded token... + + src/app/pages/collection/pages/upsert/upsert.page.html + 257 + + + + Discount % + + src/app/pages/collection/pages/upsert/upsert.page.html + 271 + + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 299 + + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 310 + + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 330,331 + + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 356 + + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 371 + + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 389 + + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 391 + + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 423,422 + + + src/app/pages/space/pages/upsert/upsert.page.html + 200 + + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 463 + + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 493,494 + + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 503 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 516 + + + src/app/pages/market/pages/collections/collections.page.html + 177 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138 + + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 505 + + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 509 + + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 534 + + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 536 + + + + Open Sale + + src/app/pages/collection/pages/upsert/upsert.page.html + 545 + + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 551 + + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 563 + + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 576 + + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 589 + + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 607 + + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 625 + + + + Select collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 650 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 147 + + + src/app/pages/nft/pages/new/single/single.page.html + 361 + + + + Select award + + src/app/pages/collection/pages/upsert/upsert.page.html + 669 + + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 691,692 + + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 704,705 + + + + Check out collection + + src/app/pages/collection/services/helper.service.ts + 68 + + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 5 + + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 16 + + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 32,33 + + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 41,42 + + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 56 + + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 68 + + + + Spaces + + src/app/pages/discover/pages/awards/awards.page.html + 115,114 + + + src/app/pages/discover/pages/discover/discover.page.ts + 9 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 115,114 + + + src/app/pages/market/pages/collections/collections.page.html + 146,145 + + + src/app/pages/member/pages/member/member.page.ts + 65 + + + + Discover - Awards + + src/app/pages/discover/pages/awards/awards.page.ts + 58 + + + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/discover/pages/awards/awards.page.ts + 59 + + + + Awards + + src/app/pages/discover/pages/discover/discover.page.ts + 10 + + + src/app/pages/member/pages/member/member.page.ts + 64 + + + src/app/pages/space/pages/space/space.page.ts + 47 + + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 11 + + + src/app/pages/space/pages/space/space.page.ts + 46 + + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 12 + + + src/app/pages/space/pages/space/space.page.ts + 48 + + + + Discover - Members + + src/app/pages/discover/pages/members/members.page.ts + 51 + + + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + src/app/pages/discover/pages/members/members.page.ts + 52 + + + + Discover - Proposals + + src/app/pages/discover/pages/proposals/proposals.page.ts + 57 + + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + src/app/pages/discover/pages/proposals/proposals.page.ts + 58 + + + + Discover - Spaces + + src/app/pages/discover/pages/spaces/spaces.page.ts + 54 + + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/discover/pages/spaces/spaces.page.ts + 55 + + + + Sale type + + src/app/pages/market/pages/collections/collections.page.html + 115 + + + + Collections - NFT + + src/app/pages/market/pages/collections/collections.page.ts + 68 + + + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + src/app/pages/market/pages/collections/collections.page.ts + 69 + + + + NFT Collections + + src/app/pages/market/pages/market/market.page.html + 2 + + + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/market/pages/market/market.page.html + 11,13 + + + + I understand + + src/app/pages/market/pages/market/market.page.html + 22,23 + + + src/app/pages/member/pages/tokens/tokens.page.html + 43,44 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 22,23 + + + + Collections + + src/app/pages/market/pages/market/market.page.ts + 12 + + + src/app/pages/market/pages/market/market.page.ts + 33 + + + src/app/pages/space/pages/space/space.page.ts + 45 + + + + Total staked + + src/app/pages/member/pages/activity/activity.page.html + 17,18 + + + + Staking Value: + + src/app/pages/member/pages/activity/activity.page.html + 29,39 + + + + Claimable Reward + + src/app/pages/member/pages/activity/activity.page.html + 47,48 + + + + Stake more + + src/app/pages/member/pages/activity/activity.page.html + 104,105 + + + + Stake + + src/app/pages/member/pages/activity/activity.page.html + 107,108 + + + + My Staking + + src/app/pages/member/pages/activity/activity.page.html + 133 + + + + until + + src/app/pages/member/pages/activity/activity.page.html + 138 + + + + My Favourites + + src/app/pages/member/pages/activity/activity.page.html + 152 + + + + View All + + src/app/pages/member/pages/activity/activity.page.html + 155 + + + + Profile Options + + src/app/pages/member/pages/activity/activity.page.html + 172 + + + + Edit Profile + + src/app/pages/member/pages/activity/activity.page.html + 185 + + + + Manage Addresses + + src/app/pages/member/pages/activity/activity.page.html + 191 + + + src/app/pages/space/pages/manage/manage.page.html + 27 + + + + Export All Transactions + + src/app/pages/member/pages/activity/activity.page.html + 202 + + + + Request Verification + + src/app/pages/member/pages/activity/activity.page.html + 227 + + + src/app/pages/space/pages/manage/manage.page.html + 85 + + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 18,19 + + + + No Awards + + src/app/pages/member/pages/awards/awards.page.html + 34,35 + + + src/app/pages/space/pages/awards/awards.page.html + 63,64 + + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 44,45 + + + + Reputation + + src/app/pages/member/pages/badges/badges.page.html + 2 + + + src/app/pages/member/pages/member/member.page.ts + 63 + + + + Spaces + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + + + Awards + + src/app/pages/member/pages/badges/badges.page.html + 27,28 + + + + Total Rewards + + src/app/pages/member/pages/badges/badges.page.html + 33,34 + + + + My profile + + src/app/pages/member/pages/member/member.page.html + 13 + + + + Profile + + src/app/pages/member/pages/member/member.page.html + 15 + + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 27,28 + + + + Joined + + src/app/pages/member/pages/member/member.page.html + 49 + + + + Member - + + src/app/pages/member/pages/member/member.page.ts + 83 + + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 145 + + + + Transactions + + src/app/pages/member/pages/member/member.page.ts + 147 + + + src/app/pages/member/pages/transactions/transactions.page.html + 18 + + + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + src/app/pages/member/pages/nfts/nfts.page.html + 25,26 + + + + Deposit NFT + + src/app/pages/member/pages/nfts/nfts.page.html + 29,30 + + + + No NFTs + + src/app/pages/member/pages/nfts/nfts.page.html + 59,60 + + + src/app/pages/nft/pages/nft/nft.page.html + 744,745 + + + + Tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 11,12 + + + + Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 20,21 + + + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + src/app/pages/member/pages/tokens/tokens.page.html + 32,34 + + + + Item + + src/app/pages/member/pages/tokens/tokens.page.html + 57 + + + src/app/pages/member/pages/tokens/tokens.page.html + 324 + + + src/app/pages/member/pages/transactions/transactions.page.html + 23 + + + + Total + + src/app/pages/member/pages/tokens/tokens.page.html + 59 + + + src/app/pages/token/pages/trade/trade.page.html + 204 + + + src/app/pages/token/pages/trade/trade.page.html + 278 + + + src/app/pages/token/pages/trade/trade.page.html + 367 + + + src/app/pages/token/pages/trade/trade.page.html + 668 + + + + Owned + + src/app/pages/member/pages/tokens/tokens.page.html + 87 + + + src/app/pages/member/pages/tokens/tokens.page.html + 170 + + + src/app/pages/nft/pages/nft/nft.page.html + 17 + + + + Airdropped + + src/app/pages/member/pages/tokens/tokens.page.html + 118 + + + src/app/pages/member/pages/tokens/tokens.page.html + 172 + + + + from + + src/app/pages/member/pages/tokens/tokens.page.html + 120 + + + + Deposit for purchase + + src/app/pages/member/pages/tokens/tokens.page.html + 215 + + + + No tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 258,259 + + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 297 + + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 300 + + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 307,308 + + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 310,311 + + + + Staked From + + src/app/pages/member/pages/tokens/tokens.page.html + 326 + + + + Staked Until + + src/app/pages/member/pages/tokens/tokens.page.html + 327 + + + + Multiplier + + src/app/pages/member/pages/tokens/tokens.page.html + 329 + + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 330 + + + + Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 380 + + + + No Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 403,404 + + + + Staked from - to + + src/app/pages/member/pages/tokens/tokens.page.html + 432,433 + + + + Amount (Multiplier) + + src/app/pages/member/pages/tokens/tokens.page.html + 445,446 + + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 457,458 + + + + Claim + + src/app/pages/member/pages/tokens/tokens.page.ts + 57 + + + + Refund + + src/app/pages/member/pages/tokens/tokens.page.ts + 58 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 19 + + + + Export CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 9 + + + + Exporting CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 13 + + + + No transactions + + src/app/pages/member/pages/transactions/transactions.page.html + 120,121 + + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 40 + + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 51,52 + + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 67 + + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 73 + + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 101 + + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 160 + + + + Upload back once you generate below + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 162 + + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 193,194 + + + + Generate CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 211 + + + + Publish NFTs + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 212 + + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 224,225 + + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14 + + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16 + + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 22 + + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 34 + + + src/app/pages/proposal/pages/new/new.page.html + 77 + + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 53 + + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 92 + + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 102 + + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 103 + + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 115 + + + src/app/pages/nft/pages/new/single/single.page.html + 151 + + + src/app/pages/nft/pages/new/single/single.page.html + 158 + + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 126,125 + + + src/app/pages/nft/pages/new/single/single.page.html + 163 + + + src/app/pages/nft/pages/new/single/single.page.html + 171,170 + + + src/app/pages/nft/pages/new/single/single.page.html + 228,227 + + + src/app/pages/nft/pages/new/single/single.page.html + 266 + + + src/app/pages/nft/pages/new/single/single.page.html + 272,271 + + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 142 + + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 185 + + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 194 + + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 205 + + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 217 + + + src/app/pages/nft/pages/new/single/single.page.html + 254 + + + src/app/pages/nft/pages/new/single/single.page.html + 261 + + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 245 + + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287 + + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 303 + + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 333 + + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 348 + + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 383,384 + + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 393,394 + + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 168 + + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 7 + + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 48 + + + src/app/pages/nft/pages/nft/nft.page.html + 516 + + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 109 + + + + remaining + + src/app/pages/nft/pages/nft/nft.page.html + 155 + + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 165 + + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 173 + + + + NFT is pending other member's transaction + + src/app/pages/nft/pages/nft/nft.page.html + 181 + + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 190 + + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 198 + + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 213 + + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 218 + + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 223 + + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 240,241 + + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 263,264 + + + + Bidding + + src/app/pages/nft/pages/nft/nft.page.html + 281 + + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 290 + + + + Past bids + + src/app/pages/nft/pages/nft/nft.page.html + 298 + + + + My biddings + + src/app/pages/nft/pages/nft/nft.page.html + 307 + + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 321 + + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 322 + + + + There are no current bids + + src/app/pages/nft/pages/nft/nft.page.html + 369,370 + + + + There are no past bids + + src/app/pages/nft/pages/nft/nft.page.html + 419,420 + + + + There are no records. + + src/app/pages/nft/pages/nft/nft.page.html + 469,470 + + + + Withdraw NFT + + src/app/pages/nft/pages/nft/nft.page.html + 509,510 + + + + History + + src/app/pages/nft/pages/nft/nft.page.html + 522 + + + + Minting in Progress + + src/app/pages/nft/pages/nft/nft.page.html + 556 + + + + Available for specific Member Only + + src/app/pages/nft/pages/nft/nft.page.html + 619 + + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 647 + + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 685 + + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 694 + + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 695 + + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 707,706 + + + + Are you sure you want to withdraw NFT from Soonaverse? + + src/app/pages/nft/pages/nft/nft.page.html + 800 + + + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + src/app/pages/nft/pages/nft/nft.page.html + 802 + + + + Confirm with Metamask + + src/app/pages/nft/pages/nft/nft.page.html + 804 + + + + View + + src/app/pages/nft/pages/nft/nft.page.ts + 82 + + + + NFT Withdrawn. + + src/app/pages/nft/pages/nft/nft.page.ts + 688 + + + + Oops, it's in another universe + + src/app/pages/nft/pages/not-found/not-found.page.html + 8 + + + + NFT you are looking for no longer exists on Soonaverse. + + src/app/pages/nft/pages/not-found/not-found.page.html + 12,14 + + + + Back to Marketplace + + src/app/pages/nft/pages/not-found/not-found.page.html + 22,24 + + + + Auction Starts + + src/app/pages/nft/services/helper.service.ts + 145 + + + + Auction Ends + + src/app/pages/nft/services/helper.service.ts + 148 + + + + Pool by + + src/app/pages/pool/pages/market/pool.page.html + 3,12 + + + + What is Pool? + + src/app/pages/pool/pages/market/pool.page.html + 20,21 + + + + Anyone can become a liquidity provider (LP) by depositing an equivalent value of each underlying token in return for pool tokens. These tokens track pro-rata LP shares of the total reserves, and can be redeemed for the underlying assets at any time. + + src/app/pages/pool/pages/market/pool.page.html + 23,26 + + + + Coming SOON + + src/app/pages/pool/pages/market/pool.page.html + 35 + + + src/app/pages/swap/pages/market/swap.page.html + 35 + + + + See Pool on iotabee + + src/app/pages/pool/pages/market/pool.page.html + 37,39 + + + + What is iotabee? + + src/app/pages/pool/pages/market/pool.page.html + 49 + + + src/app/pages/swap/pages/market/swap.page.html + 49 + + + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + src/app/pages/pool/pages/market/pool.page.html + 51,54 + + + src/app/pages/swap/pages/market/swap.page.html + 51,54 + + + + iotabee.com + + src/app/pages/pool/pages/market/pool.page.html + 61,62 + + + src/app/pages/swap/pages/market/swap.page.html + 61,62 + + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2 + + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 3 + + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19 + + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 39 + + + src/app/pages/proposal/pages/new/new.page.html + 50,49 + + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 40 + + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 93 + + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 95 + + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 104 + + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 143 + + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 157 + + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 192 + + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 207 + + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 259 + + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 261 + + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 269 + + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 276 + + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 283 + + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 289 + + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 296 + + + + Space's Native Token + + src/app/pages/proposal/pages/new/new.page.html + 302 + + + src/app/pages/proposal/services/helper.service.ts + 23 + + + + You must have minted token linked to your space first! + + src/app/pages/proposal/pages/new/new.page.html + 313 + + + + All token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 321 + + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 343,344 + + + + Proposal - New + + src/app/pages/proposal/pages/new/new.page.ts + 136 + + + src/app/pages/proposal/pages/new/new.page.ts + 151 + + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + src/app/pages/proposal/pages/new/new.page.ts + 137 + + + src/app/pages/proposal/pages/new/new.page.ts + 152 + + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 321 + + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 328 + + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 332 + + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 5 + + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 74 + + + + Proposal - + + src/app/pages/proposal/pages/overview/overview.page.ts + 59 + + + + Change Vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 23,24 + + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 26,27 + + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 38 + + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 51 + + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 55 + + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 64 + + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 68 + + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 79 + + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 83 + + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 102 + + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 48 + + + + Voted + + src/app/pages/proposal/pages/participants/participants.page.ts + 49 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 156 + + + + Proposal - Participants + + src/app/pages/proposal/pages/participants/participants.page.ts + 83 + + + + See all participants within the proposal + + src/app/pages/proposal/pages/participants/participants.page.ts + 84 + + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 151 + + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 12,13 + + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 23,24 + + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 67 + + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 75 + + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 22 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 22 + + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 23 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 23 + + + + Voting Type + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 26 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 26 + + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 27 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 27 + + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 79 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 152 + + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 87 + + + + (weight: ) + + src/app/pages/proposal/pages/proposal/proposal.page.html + 101,102 + + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 124 + + + + Votes + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 42 + + + + Voter + + src/app/pages/proposal/pages/votes/votes.page.html + 14 + + + + Option (Weight) + + src/app/pages/proposal/pages/votes/votes.page.html + 16 + + + + Expired On + + src/app/pages/proposal/pages/votes/votes.page.html + 18 + + + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + src/app/pages/proposal/pages/votes/votes.page.html + 24 + + + + One Member One Vote + + src/app/pages/proposal/services/helper.service.ts + 25 + + + + XP Reputation - Space + + src/app/pages/proposal/services/helper.service.ts + 27 + + + + XP Reputation - Selected Badges + + src/app/pages/proposal/services/helper.service.ts + 29 + + + + Staking + + src/app/pages/soon-staking/pages/staking/staking.page.html + 3,4 + + + + How much I earn? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 13 + + + + How it works? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 135 + + + + Stake your tokens to earn rewards and unlock new features. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 137,139 + + + + Unique Perks for stakers + + src/app/pages/soon-staking/pages/staking/staking.page.html + 160 + + + + Rewards + + src/app/pages/soon-staking/pages/staking/staking.page.html + 167,168 + + + + Trading Bonuses + + src/app/pages/soon-staking/pages/staking/staking.page.html + 180 + + + + Unique Features + + src/app/pages/soon-staking/pages/staking/staking.page.html + 193 + + + + Earn more er than you think + + src/app/pages/soon-staking/pages/staking/staking.page.html + 209 + + + + The more you hold, the more rewards you get. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 214,215 + + + + New + + src/app/pages/space/pages/awards/awards.page.html + 43 + + + src/app/pages/space/pages/collections/collections.page.html + 48 + + + src/app/pages/space/pages/proposals/proposals.page.html + 42 + + + + award + + src/app/pages/space/pages/awards/awards.page.html + 44 + + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 31 + + + src/app/pages/space/pages/members/members.page.html + 45 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 31 + + + + Space - Awards + + src/app/pages/space/pages/awards/awards.page.ts + 54 + + + + Space's awards + + src/app/pages/space/pages/awards/awards.page.ts + 55 + + + + No Collections + + src/app/pages/space/pages/collections/collections.page.html + 69,70 + + + + Space - Collections + + src/app/pages/space/pages/collections/collections.page.ts + 65 + + + + Space's collections + + src/app/pages/space/pages/collections/collections.page.ts + 66 + + + + Space Options + + src/app/pages/space/pages/manage/manage.page.html + 2 + + + + Token Options + + src/app/pages/space/pages/manage/manage.page.html + 6 + + + + Edit Space + + src/app/pages/space/pages/manage/manage.page.html + 21 + + + + Manage Guardians + + src/app/pages/space/pages/manage/manage.page.html + 38 + + + + Export Current Members + + src/app/pages/space/pages/manage/manage.page.html + 44 + + + + Create New Award + + src/app/pages/space/pages/manage/manage.page.html + 57 + + + + Create New Proposal + + src/app/pages/space/pages/manage/manage.page.html + 68 + + + + Create New Collection + + src/app/pages/space/pages/manage/manage.page.html + 79 + + + + Edit Token + + src/app/pages/space/pages/manage/manage.page.html + 105 + + + + Create Airdrop + + src/app/pages/space/pages/manage/manage.page.html + 127 + + + + Staking Reward Schedule + + src/app/pages/space/pages/manage/manage.page.html + 135 + + + + Export Current Stakers + + src/app/pages/space/pages/manage/manage.page.html + 141 + + + + Active + + src/app/pages/space/pages/members/members.page.html + 18,19 + + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 35,36 + + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 52 + + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 67 + + + src/app/pages/space/pages/members/members.page.html + 82 + + + + No Members + + src/app/pages/space/pages/members/members.page.html + 110,111 + + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 118 + + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 161,162 + + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 174,175 + + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 184,185 + + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 187,188 + + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 190,191 + + + + Space - Members + + src/app/pages/space/pages/members/members.page.ts + 76 + + + + Space's members + + src/app/pages/space/pages/members/members.page.ts + 77 + + + + Upcoming Sale + + src/app/pages/space/pages/overview/overview.page.html + 7 + + + + Live Token Sale + + src/app/pages/space/pages/overview/overview.page.html + 9 + + + + Space - + + src/app/pages/space/pages/overview/overview.page.ts + 55 + + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 43 + + + + No Proposals + + src/app/pages/space/pages/proposals/proposals.page.html + 62,63 + + + + Space - Proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 54 + + + + Space's proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 55 + + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 34 + + + + pending + + src/app/pages/space/pages/space/space-about/space-about.component.html + 153 + + + + Export members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 168 + + + + Exporting members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 172 + + + + Open to join instantly + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + + + Requires approval to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 183 + + + + Requires + + src/app/pages/space/pages/space/space-about/space-about.component.html + 187 + + + + staked value to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 193 + + + + Related Links + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 92 + + + + Claim ownership + + src/app/pages/space/pages/space/space-about/space-about.component.html + 259,260 + + + + Space's Wallet Addresses + + src/app/pages/space/pages/space/space-about/space-about.component.html + 290 + + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 321 + + + + About space + + src/app/pages/space/pages/space/space.page.html + 3 + + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 55,56 + + + src/app/pages/space/pages/space/space.page.html + 118,119 + + + + Pending Request + + src/app/pages/space/pages/space/space.page.html + 68 + + + src/app/pages/space/pages/space/space.page.html + 131 + + + + Ask to join Space + + src/app/pages/space/pages/space/space.page.html + 70 + + + src/app/pages/space/pages/space/space.page.html + 133 + + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 82,83 + + + src/app/pages/space/pages/space/space.page.html + 160,161 + + + + Stake + + src/app/pages/space/pages/space/space.page.html + 144 + + + + to Join + + src/app/pages/space/pages/space/space.page.html + 147 + + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2 + + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3 + + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17 + + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19 + + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 56 + + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 97 + + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 104 + + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 125 + + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 127 + + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 137,138 + + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 142 + + + + Requires stake value (in space's token) + + src/app/pages/space/pages/upsert/upsert.page.html + 146 + + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 174 + + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 243,244 + + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 256,257 + + + + Space - New + + src/app/pages/space/pages/upsert/upsert.page.ts + 76 + + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/space/pages/upsert/upsert.page.ts + 77 + + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 210 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 216 + + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 211 + + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 217 + + + + Swap by + + src/app/pages/swap/pages/market/swap.page.html + 3,12 + + + + What is Swap? + + src/app/pages/swap/pages/market/swap.page.html + 20,21 + + + + See Swap on iotabee + + src/app/pages/swap/pages/market/swap.page.html + 37,39 + + + + Create airdrop + + src/app/pages/token/pages/airdrops/airdrops.page.html + 8,9 + + + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/pages/token/pages/airdrops/airdrops.page.html + 17,19 + + + + Some rows have been removed + + src/app/pages/token/pages/airdrops/airdrops.page.html + 92 + + + + Submit airdrop + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 118,119 + + + + row is not valid + + src/app/pages/token/pages/airdrops/airdrops.page.ts + 73 + + + + Breakdown + + src/app/pages/token/pages/metrics/metrics.page.html + 1 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 284 + + + + Token distribution + + src/app/pages/token/pages/metrics/metrics.page.html + 5 + + + + Total token supply + + src/app/pages/token/pages/metrics/metrics.page.ts + 56 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 96 + + + + Launchpad price per token + + src/app/pages/token/pages/metrics/metrics.page.ts + 67 + + + + Initial Cap + + src/app/pages/token/pages/metrics/metrics.page.ts + 74 + + + + Total melted tokens + + src/app/pages/token/pages/metrics/metrics.page.ts + 82 + + + + You can create only ONE token per space and it can never be changed. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 14,15 + + + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 23,26 + + + + Continue + + src/app/pages/token/pages/new/introduction/introduction.component.html + 38,39 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 191,192 + + + src/app/pages/token/pages/new/overview/overview.component.html + 104,105 + + + + Token Sale Requirements + + src/app/pages/token/pages/new/introduction/introduction.component.html + 50 + + + + To create a public sale or use the Token Exchange you must complete our KYC process. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 52 + + + + Begin Process + + src/app/pages/token/pages/new/introduction/introduction.component.html + 58 + + + + Continue + + + src/app/pages/token/pages/new/introduction/introduction.component.html + 73,74 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 330,331 + + + src/app/pages/token/pages/new/overview/overview.component.html + 214,215 + + + + Token info + + src/app/pages/token/pages/new/metrics/metrics.component.html + 9 + + + src/app/pages/token/pages/new/summary/summary.component.html + 14 + + + src/app/pages/token/pages/token/token.page.html + 3 + + + + Name is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 16 + + + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + src/app/pages/token/pages/new/metrics/metrics.component.html + 33 + + + + Token supply + + src/app/pages/token/pages/new/metrics/metrics.component.html + 47 + + + src/app/pages/token/pages/new/summary/summary.component.html + 53 + + + + Price per token (MIOTA) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 53 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 58 + + + + Price is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 54 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 38 + + + + Total token supply (up to 6 decimals are supported) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 68 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 74 + + + + Total supply is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 69 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 107 + + + + Allocation title + + src/app/pages/token/pages/new/metrics/metrics.component.html + 111 + + + + % of tokens for sale + + src/app/pages/token/pages/new/metrics/metrics.component.html + 121 + + + + Percentage of tokens is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 122 + + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 126 + + + + Only 1 of the allocations can be public + + src/app/pages/token/pages/new/metrics/metrics.component.html + 149 + + + + Sum of the percentages must be 100 + + src/app/pages/token/pages/new/metrics/metrics.component.html + 155 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 166 + + + + Invalid sum of percentages + + src/app/pages/token/pages/new/metrics/metrics.component.html + 160 + + + + Add allocation + + src/app/pages/token/pages/new/metrics/metrics.component.html + 179 + + + + Token icon + + src/app/pages/token/pages/new/metrics/metrics.component.html + 221 + + + src/app/pages/token/pages/new/summary/summary.component.html + 265 + + + + (Recomended size: 400 x 400px) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 223 + + + + Icon is mandatory + + src/app/pages/token/pages/new/metrics/metrics.component.html + 232 + + + + Token price + + src/app/pages/token/pages/new/metrics/metrics.component.html + 264 + + + src/app/pages/token/pages/new/summary/summary.component.html + 283 + + + + Distribution of the token happens after the token offering end date. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 266 + + + src/app/pages/token/pages/new/summary/summary.component.html + 285 + + + + Configure the token supply first to see breakdown. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 288 + + + + Token terms and conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 298 + + + src/app/pages/token/pages/new/summary/summary.component.html + 324 + + + + Provide link for Terms and Conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 300 + + + + Terms and Conditions link is invalid. (Start with http:// or https://) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 306 + + + + Token allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 75 + + + src/app/pages/token/pages/new/summary/summary.component.html + 165 + + + + Allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 76 + + + src/app/pages/token/pages/new/summary/summary.component.ts + 30 + + + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 81,82 + + + + Create token + + src/app/pages/token/pages/new/new.page.html + 2 + + + + Introduction + + src/app/pages/token/pages/new/new.page.ts + 32 + + + + Metrics + + src/app/pages/token/pages/new/new.page.ts + 33 + + + src/app/pages/token/pages/token/token.page.ts + 38 + + + + Summary + + src/app/pages/token/pages/new/new.page.ts + 35 + + + + New Token + + src/app/pages/token/pages/new/new.page.ts + 72 + + + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + src/app/pages/token/pages/new/new.page.ts + 73 + + + + Token description + + src/app/pages/token/pages/new/overview/overview.component.html + 12 + + + src/app/pages/token/pages/new/summary/summary.component.html + 93 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 6 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 27 + + + + This text will be displayed on the main token page. + + src/app/pages/token/pages/new/overview/overview.component.html + 14 + + + + Title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 23 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 10 + + + + Description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 38 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 22 + + + + Short description + + src/app/pages/token/pages/new/overview/overview.component.html + 55 + + + src/app/pages/token/pages/new/summary/summary.component.html + 129 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 49 + + + + Short description of the token which will be displayed on the token trading page. + + src/app/pages/token/pages/new/overview/overview.component.html + 57 + + + + Short title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 66 + + + + Short description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 81 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 68 + + + + Overview graphics + + src/app/pages/token/pages/new/overview/overview.component.html + 121 + + + + Token introductory video / image + + src/app/pages/token/pages/new/overview/overview.component.html + 123 + + + + Introductionary media is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 132 + + + + Invalid URL. (Start with http:// or https://) + + src/app/pages/token/pages/new/overview/overview.component.html + 168 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 84 + + + + Add link + + src/app/pages/token/pages/new/overview/overview.component.html + 191 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 107 + + + + Edit + + src/app/pages/token/pages/new/summary/summary.component.html + 22,23 + + + src/app/pages/token/pages/new/summary/summary.component.html + 61,62 + + + src/app/pages/token/pages/new/summary/summary.component.html + 101,102 + + + src/app/pages/token/pages/new/summary/summary.component.html + 137,138 + + + src/app/pages/token/pages/new/summary/summary.component.html + 173,174 + + + + Name + + src/app/pages/token/pages/new/summary/summary.component.html + 30,31 + + + + Symbol + + src/app/pages/token/pages/new/summary/summary.component.html + 41,42 + + + + Total token supply + + src/app/pages/token/pages/new/summary/summary.component.html + 80,81 + + + + Description title + + src/app/pages/token/pages/new/summary/summary.component.html + 109,110 + + + + Description + + src/app/pages/token/pages/new/summary/summary.component.html + 120,121 + + + + Short description title + + src/app/pages/token/pages/new/summary/summary.component.html + 145,146 + + + + Short description + + src/app/pages/token/pages/new/summary/summary.component.html + 156,157 + + + + Allocation title + + src/app/pages/token/pages/new/summary/summary.component.html + 187,188 + + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/summary/summary.component.html + 198,199 + + + + Submit token + + src/app/pages/token/pages/new/summary/summary.component.html + 227,228 + + + + (Recommended size: 400 x 400px) + + src/app/pages/token/pages/new/summary/summary.component.html + 267 + + + + Some description + + src/app/pages/token/pages/new/summary/summary.component.html + 326 + + + + Terms&conditions + + src/app/pages/token/pages/new/summary/summary.component.html + 340 + + + + Submit token + + + src/app/pages/token/pages/new/summary/summary.component.html + 356,357 + + + + Trade token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 15,16 + + + + Buy Tokens + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 28,29 + + + + Schedule public sale + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 42,43 + + + + Allow Trading + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 57,58 + + + + Edit token info + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 86 + + + + Check out token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 100 + + + + Mint & Approve Token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 132,133 + + + + Minting in progress + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 144,145 + + + + Token was not made available on decentralised network yet. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 150 + + + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 153,154 + + + + Trading enabled. + + src/app/pages/token/pages/token/token-buy/token-buy.component.ts + 86 + + + + Short description title is invalid. + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 56 + + + + Short description title + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 61 + + + + Short token description + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 73 + + + + Sale Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 4 + + + + Sale schedule + + src/app/pages/token/pages/token/token-info/token-info.component.html + 10 + + + + During cooldown period you are able to trigger refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 41 + + + + No Cooldown. Participants can't refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 75,76 + + + + Token Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 80 + + + src/app/pages/token/pages/trade/trade.page.html + 57 + + + src/app/pages/token/pages/trade/trade.page.html + 624 + + + + My purchased tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 4 + + + + + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 78,80 + + + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 90,92 + + + + Your Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 21 + + + + Potential Tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 22 + + + + Token Owned + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 23 + + + + Total Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 24 + + + + Total Participants + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 25 + + + + Sale ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 45 + + + + Cooldown in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 62 + + + + Sale in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 64 + + + + Sale starts in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 69 + + + + Cooldown ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 73 + + + + + + src/app/pages/token/pages/token/token.page.html + 47,48 + + + + Airdrops + + src/app/pages/token/pages/token/token.page.ts + 41 + + + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + src/app/pages/token/pages/token/token.page.ts + 100 + + + src/app/pages/token/pages/trade/trade.page.ts + 275 + + + + Ongoing Sale + + src/app/pages/token/pages/token/token.page.ts + 248 + + + + Scheduled + + src/app/pages/token/pages/token/token.page.ts + 250 + + + + Cooldown + + src/app/pages/token/pages/token/token.page.ts + 252 + + + + Processing + + src/app/pages/token/pages/token/token.page.ts + 254 + + + + Order book + + src/app/pages/token/pages/trade/trade.page.html + 94 + + + src/app/pages/token/pages/trade/trade.page.html + 644 + + + + Token chart + + src/app/pages/token/pages/trade/trade.page.html + 102 + + + src/app/pages/token/pages/trade/trade.page.html + 795 + + + + My trading + + src/app/pages/token/pages/trade/trade.page.html + 158 + + + + Open buy orders + + src/app/pages/token/pages/trade/trade.page.html + 166 + + + + Open sell orders + + src/app/pages/token/pages/trade/trade.page.html + 174 + + + + Order history + + src/app/pages/token/pages/trade/trade.page.html + 182 + + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 213 + + + src/app/pages/token/pages/trade/trade.page.html + 287 + + + + There are no buys + + src/app/pages/token/pages/trade/trade.page.html + 257,258 + + + + Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 321,322 + + + src/app/pages/token/pages/trade/trade.page.html + 416,417 + + + + Expired + + src/app/pages/token/pages/trade/trade.page.html + 324,325 + + + src/app/pages/token/pages/trade/trade.page.html + 422,423 + + + + There are no sells + + src/app/pages/token/pages/trade/trade.page.html + 345,346 + + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 388 + + + src/app/pages/token/pages/trade/trade.page.html + 1213 + + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 404,405 + + + + Partially Fulfilled / Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 410,411 + + + + Fulfilled / Cancelled (unfulfillable) + + src/app/pages/token/pages/trade/trade.page.html + 419,420 + + + + There is no order history + + src/app/pages/token/pages/trade/trade.page.html + 434,435 + + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 477,478 + + + src/app/pages/token/pages/trade/trade.page.html + 488,489 + + + src/app/pages/token/pages/trade/trade.page.html + 919,920 + + + + Available + + src/app/pages/token/pages/trade/trade.page.html + 530,531 + + + + Current Price + + src/app/pages/token/pages/trade/trade.page.html + 542 + + + + Change 24h + + src/app/pages/token/pages/trade/trade.page.html + 564,565 + + + + ( ~ ) + + src/app/pages/token/pages/trade/trade.page.html + 729,732 + + + + current price + + src/app/pages/token/pages/trade/trade.page.html + 737,738 + + + + There is no activity yet + + src/app/pages/token/pages/trade/trade.page.html + 788,789 + + + + Trade history + + src/app/pages/token/pages/trade/trade.page.html + 829,830 + + + + There is no trade history + + src/app/pages/token/pages/trade/trade.page.html + 894,895 + + + + You don’t have enough tokens + + src/app/pages/token/pages/trade/trade.page.html + 928 + + + + Amount to + + src/app/pages/token/pages/trade/trade.page.html + 935,936 + + + + Balance + + src/app/pages/token/pages/trade/trade.page.html + 979 + + + + Set your price per 1 + + src/app/pages/token/pages/trade/trade.page.html + 998,1000 + + + + LIMIT PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1009,1010 + + + + MARKET PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1017,1018 + + + + ~ + + src/app/pages/token/pages/trade/trade.page.html + 1038,1041 + + + src/app/pages/token/pages/trade/trade.page.html + 1145,1148 + + + + Set Current Price + + src/app/pages/token/pages/trade/trade.page.html + 1069 + + + + Set BID + + src/app/pages/token/pages/trade/trade.page.html + 1093,1104 + + + + The bid price is the highest price that a particular buyer is willing to pay. + + src/app/pages/token/pages/trade/trade.page.html + 1100 + + + + Set ASK + + src/app/pages/token/pages/trade/trade.page.html + 1109,1120 + + + + The asking price is the minimum price that an individual would be willing to sell their asset. + + src/app/pages/token/pages/trade/trade.page.html + 1116 + + + + You will spend + + src/app/pages/token/pages/trade/trade.page.html + 1129,1130 + + + + Minimum total has to be at least + + src/app/pages/token/pages/trade/trade.page.html + 1163 + + + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + src/app/pages/token/pages/trade/trade.page.html + 1179 + + + + 1h + + src/app/pages/token/pages/trade/trade.page.ts + 118 + + + + 4h + + src/app/pages/token/pages/trade/trade.page.ts + 119 + + + + 1d + + src/app/pages/token/pages/trade/trade.page.ts + 120 + + + + 1w + + src/app/pages/token/pages/trade/trade.page.ts + 121 + + + + Bids + + src/app/pages/token/pages/trade/trade.page.ts + 563 + + + + Asks + + src/app/pages/token/pages/trade/trade.page.ts + 567 + + + + Cancelled + + src/app/pages/token/services/helper.service.ts + 201 + + + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 42 + + + + Go to trading pairs to add your favourite tokens. + + src/app/pages/tokens/pages/favourites/favourites.page.html + 47,48 + + + + Add favourites + + src/app/pages/tokens/pages/favourites/favourites.page.html + 56,57 + + + + Tokens - Favourite + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 52 + + + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 53 + + + + Tokens - Launchpad + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 41 + + + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 42 + + + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/tokens/pages/tokens/tokens.page.html + 11,13 + + + + Highlighted Token + + src/app/pages/tokens/pages/tokens/tokens.page.html + 49 + + + + Favorites + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 17 + + + + All tokens + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 20 + + + + Trading pairs + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 21 + + + + Launchpad + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 22 + + + + Tokens - Trading Pairs + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 43 + + + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 44 + + + + AuditOne Validation + + src/app/service-modules/audit-one/components/modal/modal.component.html + 3 + + + + Requested On + + src/app/service-modules/audit-one/components/modal/modal.component.html + 22 + + + + Last Update + + src/app/service-modules/audit-one/components/modal/modal.component.html + 23 + + + + There are no records. + + src/app/service-modules/audit-one/components/modal/modal.component.html + 52 + + + + AuditOne + + src/app/service-modules/audit-one/components/widget/widget.component.html + 11 + + + + Verified + + src/app/service-modules/audit-one/components/widget/widget.component.html + 47 + + + + See more + + src/app/service-modules/audit-one/components/widget/widget.component.html + 52 + + + + + diff --git a/src/locale/messages.zh-CN.xlf b/src/locale/messages.zh-CN.xlf new file mode 100644 index 0000000..7b75263 --- /dev/null +++ b/src/locale/messages.zh-CN.xlf @@ -0,0 +1,13267 @@ + + + + + + Top Members + + src/app/@core/services/filter-storage/filter-storage.service.ts + 97 + + 最佳成员 + + + Recent + + src/app/@core/services/filter-storage/filter-storage.service.ts + 98 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 116 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 133 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 147 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 165 + + 最新 + + + Oldest + + src/app/@core/services/filter-storage/filter-storage.service.ts + 99 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 117 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 134 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 148 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 166 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 188 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 209 + + 最早的 + + + Ending Soon + + src/app/@core/services/filter-storage/filter-storage.service.ts + 115 + + 即将结束 + + + Ending SOON + + src/app/@core/services/filter-storage/filter-storage.service.ts + 164 + + 即将结束 + + + Available Date + + src/app/@core/services/filter-storage/filter-storage.service.ts + 182 + + 上市日期 + + + Recently Created + + src/app/@core/services/filter-storage/filter-storage.service.ts + 183 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 208 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 57 + + 最近创建 + + + Price: Low to High + + src/app/@core/services/filter-storage/filter-storage.service.ts + 184 + + 价格: 从低到高 + + + Price: High to Low + + src/app/@core/services/filter-storage/filter-storage.service.ts + 185 + + 价格: 从高到低 + + + Top Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 186 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 206 + + 顶级交易 + + + Recently Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 187 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 207 + + 最近交易 + + + Public Vote + + src/app/@core/services/filter-storage/filter-storage.service.ts + 202 + + 公开投票 + + + Community Rank + + src/app/@core/services/filter-storage/filter-storage.service.ts + 203 + + 社区排名 + + + SOON on Sale + + src/app/@core/services/filter-storage/filter-storage.service.ts + 204 + + 即将开售 + + + Recently Minted + + src/app/@core/services/filter-storage/filter-storage.service.ts + 205 + + 最近铸造 + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 74 + + 返回 + + + Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products. + + src/app/@core/services/seo/seo.service.ts + 7 + + Soonaverse是一个平台,供社区在IOTA网络的无手续费基础设施上创建和管理分散的自治组织(DAO)、NFTs、项目、公司和市场。任何组织都可以通过我们的Marketplace、Launchpad和Token Exchange产品推出和交易流动资产。 + + + Bill Payment + + src/app/@core/services/transaction/transaction.service.ts + 18 + + 支付 + + + Bill (royalty) + + src/app/@core/services/transaction/transaction.service.ts + 20 + + 账单(版权) + + + Credit + + src/app/@core/services/transaction/transaction.service.ts + 26 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 336 + + 权益 + + + Payment + + src/app/@core/services/transaction/transaction.service.ts + 28 + + 付款 + + + Credit NFT + + src/app/@core/services/transaction/transaction.service.ts + 30 + + 记号 NFT + + + Mint Collection + + src/app/@core/services/transaction/transaction.service.ts + 32 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 36 + + 锻造专辑 + + + Mint Token + + src/app/@core/services/transaction/transaction.service.ts + 34 + + + src/app/pages/space/pages/manage/manage.page.html + 116 + + 铸造代币 + + + Withdraw Asset + + src/app/@core/services/transaction/transaction.service.ts + 36 + + 提取资产 + + + Unlock + + src/app/@core/services/transaction/transaction.service.ts + 38 + + 解锁 + + + Vote + + src/app/@core/services/transaction/transaction.service.ts + 40 + + 投票 + + + Order + + src/app/@core/services/transaction/transaction.service.ts + 42 + + 订单 + + + (Mint Alias) + + src/app/@core/services/transaction/transaction.service.ts + 49 + + (锻造别名) + + + (Mint NFTs) + + src/app/@core/services/transaction/transaction.service.ts + 51 + + (铸造NFT) + + + (Mint Foundry) + + src/app/@core/services/transaction/transaction.service.ts + 53 + + (锻造工厂) + + + (Send Alias to Guardian) + + src/app/@core/services/transaction/transaction.service.ts + 55 + + (发送别名到守护者) + + + (Lock Collection) + + src/app/@core/services/transaction/transaction.service.ts + 57 + + (锁定专辑) + + + Discover + + src/app/@shell/ui/header/header.component.html + 76 + + + src/app/components/auth/services/auth.service.ts + 83 + + 发现 + + + Create new + + src/app/@shell/ui/header/header.component.html + 91 + + 新建 + + + Space + + src/app/@shell/ui/header/header.component.html + 97 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100 + + + src/app/pages/collection/pages/collection/collection.page.html + 110 + + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 206,205 + + + src/app/pages/token/pages/new/summary/summary.component.html + 242,241 + + 空间 + + + Proposal + + src/app/@shell/ui/header/header.component.html + 103 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 29 + + 提案 + + + Award + + src/app/@shell/ui/header/header.component.html + 106 + + + src/app/pages/award/pages/award/award.page.html + 29 + + + src/app/pages/award/pages/award/award.page.ts + 100 + + 奖项 + + + Collection + + src/app/@shell/ui/header/header.component.html + 110 + + + src/app/@shell/ui/header/header.component.html + 129 + + + src/app/pages/collection/pages/collection/collection.page.html + 37 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136 + + + src/app/pages/nft/pages/new/single/single.page.html + 346 + + + src/app/pages/space/pages/collections/collections.page.html + 49 + + 专辑 + + + Token + + src/app/@shell/ui/header/header.component.html + 113 + + + src/app/@shell/ui/header/header.component.html + 132 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 321 + + + src/app/pages/token/pages/token/token.page.html + 29 + + + src/app/pages/token/pages/token/token.page.ts + 99 + + + src/app/pages/token/pages/trade/trade.page.ts + 274 + + 代币 + + + To unlock more features you have to stake SOON token. + + src/app/@shell/ui/header/header.component.html + 124,126 + + 若要解锁更多功能, 您必须质押SOON代币。 + + + VIP LEVEL + + src/app/@shell/ui/header/header.component.html + 197,198 + + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 37,38 + + + src/app/pages/member/pages/activity/activity.page.html + 146,147 + + VIP等级 + + + None. + + src/app/@shell/ui/header/header.component.html + 232 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 77 + + + + + My Profile + + src/app/@shell/ui/header/header.component.html + 240 + + + src/app/components/auth/services/auth.service.ts + 551 + + 个人资料 + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 265,266 + + 购买尚未完成 + + + You have + + src/app/@shell/ui/header/header.component.html + 270 + + 您有 + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 272 + + 以完成您的交易 + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 282,283 + + 打开结帐 + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 334 + + 你赢得了NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 335 + + 你是一个新的 NFT 的自豪拥有者。恭喜! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 342 + + 您的出价输了! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 343 + + 您的出价在 + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 344 + + 已过期。请重试! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 351 + + 刚刚出价 + + + for + + src/app/@shell/ui/header/header.component.ts + 352 + + + src/app/components/timeline/timeline.component.html + 171 + + + + + Your + + src/app/@shell/ui/header/header.component.ts + 353 + + 您的 + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 354 + + 已收到新的出价: + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 377 + + 暂不支持 + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 378 + + 此通知暂不支持您的语言。 + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27,28 + + 空间 + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 38,39 + + 提案 + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 49,50 + + 奖项 + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 60,61 + + 专辑 + + + Token + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 70,71 + + 代币 + + + Stake more SOON to create tokens and collections. + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 81,84 + + 质押更多SOON 来创建 代币和NFT专辑. + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 57,58 + + 连接到您的 Metamask 钱包 + + + Connect via TanglePay + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 73 + + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 47 + + 通过 TanglePay 连接 + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 97 + + 退出登录 + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 103 + + 技术支持: + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8 + + 找不到您要的页面。 + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 9,11 + + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + 探索 Soonaverse + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 19 + + 网络状态 + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 30,31 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 84,85 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 140,141 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 197,198 + + 网络状态 + + + Operational + + src/app/@shell/ui/sider/network-status/network-status.component.html + 36 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 90 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 146 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 203 + + 运行中 + + + Degraded Performance + + src/app/@shell/ui/sider/network-status/network-status.component.html + 43 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 97 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 153 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 210 + + 性能降级 + + + Down + + src/app/@shell/ui/sider/network-status/network-status.component.html + 50 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 104 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 160 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 217 + + 下移 + + + Last milestone + + src/app/@shell/ui/sider/network-status/network-status.component.html + 57,58 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 111,112 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 170,171 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 224,225 + + 上一个里程碑 + + + Devnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 78,79 + + + src/app/components/network/components/select-network/select-network.component.html + 61,63 + + Devnet + + + Shimmer Mainnet Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 132,133 + + Shimmer 主网即将到来 + + + Testnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 191,192 + + + src/app/components/network/components/select-network/select-network.component.html + 33,35 + + 测试网 + + + Assembly + + src/app/@shell/ui/sider/network-status/network-status.component.html + 237 + + Assembly + + + Assembly Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 244,245 + + Assembly 即将到来 + + + Shimmer EVM Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 266,267 + + Shimmer EVM 即将到来 + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 48 + + 参阅文档 + + + Show more + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 47 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 27 + + + src/app/components/timeline/timeline.component.html + 304 + + 显示更多 + + + Show less + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 48 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 28 + + + src/app/components/timeline/timeline.component.html + 303 + + 显示更少 + + + Search here... + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 50 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 30 + + 此处搜索······ + + + Reset + + + src/app/components/algolia/algolia-clear/algolia-clear.component.html + 5,7 + + 重置 + + + Search + + src/app/components/algolia/search/search.component.html + 20,19 + + + src/app/components/collection/components/select-collection/select-collection.component.html + 95,94 + + + src/app/components/space/components/select-space/select-space.component.html + 95,94 + + 搜索 + + + Start typing... + + src/app/components/algolia/search/search.component.html + 36 + + 开始输入... + + + Open + + src/app/components/algolia/services/algolia.service.ts + 32 + + 开启 + + + Guardians of Space Only + + src/app/components/algolia/services/algolia.service.ts + 34 + + 仅限空间守护者 + + + Members of Space Only + + src/app/components/algolia/services/algolia.service.ts + 36 + + 仅限空间成员 + + + Members With Badge Only + + src/app/components/algolia/services/algolia.service.ts + 38 + + 仅限持有徽章的成员 + + + Members With NFT only + + src/app/components/algolia/services/algolia.service.ts + 40 + + 仅限持有NFT的成员 + + + Unavailable for sale + + src/app/components/algolia/services/algolia.service.ts + 53 + + 不可销售 + + + On Auction + + src/app/components/algolia/services/algolia.service.ts + 55 + + 拍卖中 + + + Available + + src/app/components/algolia/services/algolia.service.ts + 57 + + + src/app/components/award/components/award-status/award-status.component.html + 23 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 61 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 162 + + + src/app/pages/space/pages/collections/collections.page.ts + 31 + + + src/app/pages/token/pages/token/token.page.ts + 256 + + 可购买 + + + On Sale + + src/app/components/algolia/services/algolia.service.ts + 59 + + 在售 + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 19 + + MetaMask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23 + + 连接到您的 Metamask 钱包 + + + TanglePay + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 43 + + TanglePay + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 67 + + 请确保您在 Metamask 中选择了公共的IOTA EVM 链。 + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 69 + + 网络名称:IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 70 + + RPC URL: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 71 + + 链条ID:1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 89,90 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 120,121 + + 取消 + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 8,10 + + 连接 + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + 断开连接 + + + Staking + + src/app/components/auth/services/auth.service.ts + 90 + + 质押 + + + Tokens + + src/app/components/auth/services/auth.service.ts + 97 + + + src/app/pages/discover/pages/awards/awards.page.html + 145,144 + + + src/app/pages/member/pages/member/member.page.ts + 66 + + + src/app/pages/member/pages/tokens/tokens.page.html + 49 + + + src/app/pages/member/pages/tokens/tokens.page.html + 235 + + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 41 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 2 + + 代币 + + + Swap + + src/app/components/auth/services/auth.service.ts + 104 + + 兑换 + + + Pool + + src/app/components/auth/services/auth.service.ts + 111 + + 资金池 + + + Marketplace + + src/app/components/auth/services/auth.service.ts + 118 + + 市场 + + + My Overview + + src/app/components/auth/services/auth.service.ts + 125 + + + src/app/pages/dashboard/dashboard.page.html + 2 + + 我的总览 + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 232 + + 无法签名交易。请尝试重新加载页面。 + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 278 + + 您必须先解锁您的MetaMask! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 290 + + 您必须启用访问权限以读取您的帐户地址。 + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 298 + + 请确保您在MetaMask中已选择了一个地址! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 307 + + + src/app/components/auth/services/auth.service.ts + 378 + + 无法获取 nonce 进行身份验证! + + + Unable to connect your TanglePay wallet. + + src/app/components/auth/services/auth.service.ts + 343 + + + src/app/components/auth/services/auth.service.ts + 482 + + 无法连接您的TanglePay钱包。 + + + Unable to detect address in TanglePay! + + src/app/components/auth/services/auth.service.ts + 349 + + 无法在 TanglePay中检测到地址! + + + You have to open Soonaverse in wallet app. + + src/app/components/auth/services/auth.service.ts + 443 + + 您必须在钱包应用中打开“Soonaverse”。 + + + Failed to initialize wallet, try to reload page. + + src/app/components/auth/services/auth.service.ts + 445 + + 初始化钱包失败,尝试重新加载页面。 + + + Give badges + + src/app/components/award/components/award-awards/award-awards.component.html + 11 + + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 16 + + 给予徽章 + + + Once issued, this badge is sent to the rewarded participant's wallet. + + src/app/components/award/components/award-awards/award-awards.component.html + 36 + + 一旦发放,这个徽章将发给受奖参与人的钱包。 + + + Upload CSV + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 31,32 + + 上传 CSV + + + Download CSV template + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 34 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 85 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 10 + + 下载 CSV 模板 + + + You can create badge airdrops for any user. You can upload CSV with users addresses and they will be properly reward. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 42,44 + + You can create badge airdrops for any user. You can upload CSV with users addresses and they will be properly reward. + + + If you don’t know how to prepare CSV file, you can download our template made for you. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 50,51 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 101,102 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 25,26 + + 如果你不知道如何准备CSV文件,你可以下载我们为你制作的模板。 + + + Confirm schedule + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 77 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 128 + + 确认计划 + + + Address + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 97 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 21 + + 地址 + + + Action + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 98 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 288 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 153 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 22 + + + src/app/pages/token/pages/trade/trade.page.html + 214 + + + src/app/pages/token/pages/trade/trade.page.html + 288 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 24 + + 操作 + + + Badge + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 104 + + + src/app/pages/award/pages/new/new.page.html + 298,297 + + 奖章 + + + Submitted. + + src/app/components/award/components/award-give-badges/award-give-badges.component.ts + 103 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 137 + + 已提交 + + + Fund Award & Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 3 + + 创建奖励 & 锻造 + + + Reward Token + + src/app/components/award/components/award-mint/award-mint.component.html + 21 + + 奖励代币 + + + Reward to be funded + + src/app/components/award/components/award-mint/award-mint.component.html + 43 + + 被充入的奖励 + + + Confirm & Start + + src/app/components/award/components/award-mint/award-mint.component.html + 98,99 + + 确认 & 开始 + + + Once you agree with the terms, the generated address will remain active during the whole process. + + src/app/components/award/components/award-mint/award-mint.component.html + 105,107 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 181,183 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 93,95 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 146,148 + + 一旦您同意条款, 生成的地址将在整个过程中保持有效状态。 + + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + src/app/components/award/components/award-mint/award-mint.component.html + 120,121 + + 使用 deepplink 进行传输。不幸的是,没有Firefly 支持的手动条目。 + + + Transaction history + + src/app/components/award/components/award-mint/award-mint.component.html + 159 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 252 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 246 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 134 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 176 + + + src/app/components/space/components/space-claim/space-claim.component.html + 113 + + + src/app/components/space/components/space-claim/space-claim.component.html + 135 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 122 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 144 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 207 + + + src/app/components/token/components/token-bid/token-bid.component.html + 212 + + + src/app/components/token/components/token-bid/token-bid.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 256 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 249 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 254 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 276 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 209 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 269 + + + src/app/components/token/components/token-stake/token-stake.component.html + 319 + + + src/app/components/token/components/token-stake/token-stake.component.html + 341 + + + src/app/components/token/components/token-vote/token-vote.component.html + 271 + + + src/app/components/token/components/token-vote/token-vote.component.html + 293 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 110 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 146 + + 交易记录 + + + Transaction complete. Congratulations. + + src/app/components/award/components/award-mint/award-mint.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 271 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 235 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 277 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 294 + + 交易完成。祝贺您。 + + + Finish Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 191,192 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 289,290 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 281,282 + + 完成铸造 + + + Funding info + + src/app/components/award/components/award-mint/award-mint.component.ts + 83 + + 储入信息 + + + Make transaction + + src/app/components/award/components/award-mint/award-mint.component.ts + 84 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 92 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 87 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 101 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 77 + + 进行交易 + + + Wait for confirmation + + src/app/components/award/components/award-mint/award-mint.component.ts + 85 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 93 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 87 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 109 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 88 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 102 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 78 + + 等待确认 + + + Confirmed + + src/app/components/award/components/award-mint/award-mint.component.ts + 86 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 94 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 88 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 110 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 89 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 103 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 79 + + 已确认 + + + Payment received. + + src/app/components/award/components/award-mint/award-mint.component.ts + 141 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 150 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 196 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 136 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 136 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 145 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 155 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 140 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 159 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 157 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 131 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 224 + + 付款已收到 + + + Confirming transaction. + + src/app/components/award/components/award-mint/award-mint.component.ts + 158 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 167 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 213 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 164 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 189 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 153 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 153 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 162 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 172 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 157 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 176 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 174 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 148 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 241 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 208 + + 确认中的交易 + + + Transaction confirmed. + + src/app/components/award/components/award-mint/award-mint.component.ts + 167 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 176 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 222 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 173 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 198 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 162 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 162 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 171 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 181 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 166 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 185 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 183 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 157 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 250 + + 交易已确认 + + + Invalid amount received. Refunding transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 186 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 203 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 258 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 182 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 190 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 210 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 186 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 204 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 212 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 190 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 270 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 247 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 159 + + 收到的金额无效,正在退款... + + + Invalid transaction.You must gift storage deposit. + + src/app/components/award/components/award-mint/award-mint.component.ts + 209 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 218 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 281 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 206 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 205 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 213 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 225 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 209 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 227 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 227 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 206 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 293 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 262 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 175 + + 无效的交易。您必须赠送存储押金。 + + + Invalid payment refunded. + + src/app/components/award/components/award-mint/award-mint.component.ts + 224 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 233 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 296 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 220 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 228 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 241 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 224 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 242 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 243 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 221 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 308 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 279 + + 无效的付款已退款。 + + + Waiting for transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 300 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 321 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 442 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 290 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 317 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 311 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 316 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 306 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 348 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 327 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 319 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 350 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 336 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 415 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 398 + + 等待交易中... + + + Pending Funding + + + src/app/components/award/components/award-status/award-status.component.html + 5,6 + + 等待储入 + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 11,12 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 11,12 + + 被拒绝 + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 17 + + + src/app/pages/space/pages/awards/awards.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 32 + + 已完成 + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 570 + + 仅限空间成员 + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 557 + + 仅限空间守护者 + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 29 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 583 + + 仅限带徽章的空间成员 + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 39 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 595 + + 至少有专辑中的一个NFT + + + Specific members only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 53 + + 仅限特定成员 + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 28 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 95 + + + src/app/components/token/components/token-card/token-card.component.html + 70 + + 开始于 + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 30 + + + src/app/components/countdown/countdown.component.html + 56 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 109 + + + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 33 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 122 + + 今天开始 + + + Collection is not yet migrated to the decentralized network. + + src/app/components/collection/components/collection-card/collection-card.component.html + 59 + + 专辑尚未迁移到去中心化的网络。 + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 76 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 611 + + 限量版 + + + Floor Price + + src/app/components/collection/components/collection-card/collection-card.component.html + 104 + + + src/app/pages/collection/pages/collection/collection.page.html + 207 + + 地板价 + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 56 + + 等待批准 + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 66 + + + src/app/pages/space/pages/awards/awards.page.ts + 33 + + + src/app/pages/space/pages/collections/collections.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 33 + + 被拒绝 + + + Remaining + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 42 + + 剩余 + + + NFTs + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 49 + + + src/app/pages/market/pages/market/market.page.ts + 13 + + + src/app/pages/market/pages/market/market.page.ts + 34 + + + src/app/pages/member/pages/member/member.page.ts + 67 + + NFT + + + Mint collection on network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 3 + + 在网络上铸造专辑 + + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 43,45 + + 一旦铸成,这个专辑的所有NFT将可由其所有者迁移到选定的网络。 + + + Unsold NFT's + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 60,61 + + 未出售的 NFT + + + Decide what should happen with all NFTs that were not sold yet. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 67 + + 决定应该如何处理所有尚未出售的NFT。 + + + Keep the same price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 76 + + 保持同一价格 + + + Take Ownership + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 86 + + 取得所有权 + + + Set new price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 96 + + 设置新价格 + + + Burn all unsold + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 103 + + 焚烧所有未售出 + + + Note that the collection ownership will be granted only to your profile. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 130,131 + + 请注意,专辑所有权将只能授予您的账户。 + + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 141,143 + + 一旦铸成,就不能编辑专辑,也不能将新的NFT添加到该专辑中。 + + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 150 + + 通过勾选此框,您确认此系列的NFT的所有有效销售将被取消。 + + + Confirm & Start minting + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 174,175 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 139,140 + + 确认并开始铸造 + + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 196,198 + + 一旦交易被登记,我们将取消所有正在销售的藏品的NFT,我们将烧毁所有未售出的NFT(如果被选定)。 + + + remaining to make the transfer. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 171 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 90 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 132 + + + src/app/components/space/components/space-claim/space-claim.component.html + 78 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 87 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 140 + + + src/app/components/token/components/token-bid/token-bid.component.html + 170 + + + src/app/components/token/components/token-claim/token-claim.component.html + 199 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 194 + + + src/app/components/token/components/token-stake/token-stake.component.html + 279 + + + src/app/components/token/components/token-vote/token-vote.component.html + 209 + + 剩余来进行转账。 + + + Expired + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 213 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 174 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 93 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 135 + + + src/app/components/space/components/space-claim/space-claim.component.html + 81 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 90 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 143 + + + src/app/components/token/components/token-bid/token-bid.component.html + 173 + + + src/app/components/token/components/token-claim/token-claim.component.html + 202 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 197 + + + src/app/components/token/components/token-stake/token-stake.component.html + 282 + + + src/app/components/token/components/token-vote/token-vote.component.html + 212 + + + src/app/pages/token/services/helper.service.ts + 204 + + 已过期 + + + NFT's from this collection are now being migrated. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 284,285 + + 来自此专辑的 NFT正在迁移。 + + + NFT's in collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 308,309 + + 专辑中的NFT + + + Total Storage Fee + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 318 + + 存储费用合计 + + + (NFTs Storage Fee + Collection Storage Fee) + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 319 + + (NFT存储费 +专辑存储费) + + + Select network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 91 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 86 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 100 + + 选择网络 + + + Pending + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5,6 + + 待处理 + + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 4 + + + src/app/pages/nft/pages/new/single/single.page.html + 352 + + 专辑是必填项。 + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 13 + + 选择专辑 + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 83 + + 选择一个专辑 + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 114 + + + src/app/components/space/components/select-space/select-space.component.html + 114 + + 没有结果: + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 20 + + 所有专辑 + + + + + + + src/app/components/confirm-modal/confirm-modal.component.html + 48,50 + + + src/app/components/confirm-modal/confirm-modal.component.html + 51,53 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 246,251 + + + src/app/components/token/components/token-vote/token-vote.component.html + 46,47 + + + src/app/pages/collection/pages/collection/collection.page.html + 130,131 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 55,56 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 71,72 + + + + + Are you sure? + + src/app/components/confirm-modal/confirm-modal.component.ts + 30 + + 您确定吗? + + + Close + + src/app/components/confirm-modal/confirm-modal.component.ts + 33 + + 关闭 + + + Confirm + + src/app/components/confirm-modal/confirm-modal.component.ts + 34 + + + src/app/components/token/components/token-bid/token-bid.component.html + 146 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 170 + + + src/app/components/token/components/token-vote/token-vote.component.html + 181 + + 确定 + + + Connect wallet + + src/app/components/connect-wallet/connect-wallet.component.html + 7 + + 连接钱包 + + + d + + src/app/components/countdown/countdown.component.html + 55 + + + + + h + + src/app/components/countdown/countdown.component.html + 68 + + + + + hours + + src/app/components/countdown/countdown.component.html + 69 + + 小时 + + + m + + src/app/components/countdown/countdown.component.html + 81 + + + + + min + + src/app/components/countdown/countdown.component.html + 82 + + 分钟 + + + s + + src/app/components/countdown/countdown.component.html + 94 + + + + + sec + + src/app/components/countdown/countdown.component.html + 95 + + + + + Ends + + src/app/components/date-tag/date-tag.component.ts + 11 + + 结束 + + + Price + + src/app/components/iota-input/iota-input.component.html + 3 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 139 + + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 81 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 19 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 124 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 49 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 75 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 37 + + + src/app/pages/token/pages/trade/trade.page.html + 209 + + + src/app/pages/token/pages/trade/trade.page.html + 283 + + + src/app/pages/token/pages/trade/trade.page.html + 372 + + + src/app/pages/token/pages/trade/trade.page.html + 659 + + + src/app/pages/token/pages/trade/trade.page.html + 846 + + 价格 + + + Verified addresses + + src/app/components/member/components/member-about/member-about.component.html + 90 + + 已验证地址 + + + Manage + + src/app/components/member/components/member-about/member-about.component.html + 96 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 297 + + + src/app/pages/space/pages/space/space.page.ts + 53 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 18 + + 管理 + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 119 + + 最近加入的空间 + + + All + + src/app/components/member/components/member-about/member-about.component.html + 124 + + 全部 + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 155 + + 暂无贡献 + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 74 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 22 + + 奖项 + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 14 + + 显示名称 + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19 + + 设置一个显示名称。这不会更改您的用户名。 + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 26 + + 显示名称 (可选) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 36 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 208 + + + src/app/pages/space/pages/space/space.page.ts + 44 + + 关于 + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 41 + + 显示在您的个人资料上的自己的简要描述。 + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 48 + + 描述 (可选) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 57 + + + src/app/pages/space/pages/upsert/upsert.page.html + 166 + + 头像 + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 62 + + 自定义您的Soonaverse头像。 + + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,78 + + 为你的个人资料图片生成一个免费的独特头像。新的超级稀有的高级头像种类和头像收藏品/配件,都可以进行交易,很快就会到来。 + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 92 + + 哇!看起来你得到了最漂亮的一个头像。祝贺你。 + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 97 + + + src/app/pages/space/pages/upsert/upsert.page.html + 54 + + 网络 + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 99 + + + src/app/pages/space/pages/upsert/upsert.page.html + 61 + + 无效的 Github 用户名。 + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 105 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67 + + 请输入您的 Github 帐户用户名 + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 117 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 177 + + + src/app/pages/space/pages/upsert/upsert.page.html + 78 + + 无效的Twitter用户名。 + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 123 + + + src/app/pages/space/pages/upsert/upsert.page.html + 84 + + 输入您的Twitter账户用户名 + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 135 + + 只支持 用户名#1234 格式。 + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 141 + + 输入您的 Discord 账户用户名 + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 155 + + 设置 + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 157,158 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 123,124 + + 保存更改 + + + + + + + src/app/components/network/components/select-network/select-network.component.html + 4,6 + + + + + + Shimmer + + src/app/components/network/components/select-network/select-network.component.html + 17 + + + src/app/components/network/components/select-network/select-network.component.html + 28 + + + src/app/components/network/components/selected-network/selected-network.component.html + 11 + + + src/app/pages/award/pages/award/award.page.html + 44 + + + src/app/pages/collection/pages/collection/collection.page.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 575 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 169 + + Shimmer + + + IOTA + + src/app/components/network/components/select-network/select-network.component.html + 45 + + + src/app/components/network/components/select-network/select-network.component.html + 56 + + + src/app/components/network/components/selected-network/selected-network.component.html + 19 + + + src/app/pages/award/pages/award/award.page.html + 52 + + + src/app/pages/collection/pages/collection/collection.page.html + 59 + + + src/app/pages/nft/pages/nft/nft.page.html + 583 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 177 + + IOTA + + + Selected Network + + src/app/components/network/components/selected-network/selected-network.component.html + 4,6 + + 选定的网络 + + + Shimmer Testnet + + src/app/components/network/components/selected-network/selected-network.component.html + 15 + + + src/app/pages/award/pages/award/award.page.html + 48 + + + src/app/pages/collection/pages/collection/collection.page.html + 55 + + + src/app/pages/nft/pages/nft/nft.page.html + 579 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 173 + + Shimmer 测试网 + + + IOTA Devnet + + src/app/components/network/components/selected-network/selected-network.component.html + 23 + + + src/app/pages/award/pages/award/award.page.html + 56 + + + src/app/pages/collection/pages/collection/collection.page.html + 63 + + + src/app/pages/nft/pages/nft/nft.page.html + 587 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 181 + + IOTA Devnet + + + Send + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + 发送 + + + to following address: + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + 至以下地址: + + + Copied + + src/app/components/network/components/send-funds/send-funds.component.html + 25 + + + src/app/components/share/share.component.html + 27 + + + src/app/components/wallet-address/wallet-address.component.html + 29 + + 已复制 + + + Copy + + src/app/components/network/components/send-funds/send-funds.component.html + 26 + + 复制 + + + Do not send funds from an exchange, always use wallets you fully control. + + + src/app/components/network/components/send-funds/send-funds.component.html + 34,36 + + 不要从交易所发送资金,始终使用你完全控制的钱包。 + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 3 + + 出价 + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 15 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 16 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 25 + + NFT 图像 + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 38 + + 结束 + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 48 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 36 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46 + + 版税 + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 55 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 43 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 53 + + 版税将被自动扣除并支付给艺术家。 + + + Royalties goes to + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 73,74 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 61,62 + + 版税给与 + + + + + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 75,76 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 63,64 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 262,263 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 188,189 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 264,265 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 306,307 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 344,345 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 45 + + + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 109 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + 当前最高出价 + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 111 + + + src/app/pages/nft/pages/nft/nft.page.html + 111 + + 最低出价 + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 127 + + + src/app/pages/nft/pages/nft/nft.page.html + 116 + + 您的出价最高。 + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 172,173 + + 当前价格正在实时刷新 + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 208,209 + + 你想要的NTF的地址将在整个拍卖过程中为你锁定。付款后,您的出价将被锁定,如果有更高的出价,您将立即得到退款。 + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 216,218 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,257 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 321,323 + + 如果有更高的出价,你将立即得到退款。如果你想再次出价,请直接发送更高的金额到同一地址。 + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 237,238 + + 出价 + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 278 + + 你的交易 + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 286 + + 发送日期 + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 287 + + + src/app/pages/token/pages/trade/trade.page.html + 854 + + 时间 + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 289 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 33 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 110 + + + src/app/pages/member/pages/tokens/tokens.page.html + 328 + + + src/app/pages/member/pages/transactions/transactions.page.html + 25 + + + src/app/pages/nft/pages/nft/nft.page.html + 323 + + + src/app/pages/nft/pages/nft/nft.page.html + 385 + + + src/app/pages/nft/pages/nft/nft.page.html + 435 + + + src/app/pages/token/pages/trade/trade.page.html + 200 + + + src/app/pages/token/pages/trade/trade.page.html + 274 + + + src/app/pages/token/pages/trade/trade.page.html + 363 + + + src/app/pages/token/pages/trade/trade.page.html + 664 + + + src/app/pages/token/pages/trade/trade.page.html + 851 + + 金额 + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 55 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 96 + + 详情 + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 311,310 + + + src/app/pages/nft/pages/nft/nft.page.html + 324 + + + src/app/pages/nft/pages/nft/nft.page.html + 360,359 + + + src/app/pages/nft/pages/nft/nft.page.html + 386 + + + src/app/pages/nft/pages/nft/nft.page.html + 410,409 + + + src/app/pages/nft/pages/nft/nft.page.html + 436 + + + src/app/pages/nft/pages/nft/nft.page.html + 460,459 + + 链接 + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 345 + + 恭喜你赢得了这个NFT。 + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 357,358 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 283,284 + + + src/app/components/token/components/token-bid/token-bid.component.html + 271,272 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 313,314 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 306,307 + + + src/app/components/token/components/token-vote/token-vote.component.html + 330,331 + + 关闭结账 + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 368,369 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 294,295 + + 显示我的NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 384 + + 出价已过期。祝您下次好运:) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 272 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 459 + + 生成的 NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 274 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 461 + + SFT + + + NFT is not yet migrated to the decentralized network. + + src/app/components/nft/components/nft-card/nft-card.component.html + 65 + + NFT 尚未迁移到去中心化的网络。 + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 118 + + + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 156 + + 当前出价 + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 191 + + + src/app/pages/nft/pages/nft/nft.page.html + 594 + + 拥有者 + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 229,231 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 167 + + 新 NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 3 + + 结账 + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 74,75 + + 总价 + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150,151 + + 确认并锁定 + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 156 + + 您的 NFT 将被锁定进行购买 + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + 分钟 + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 185 + + 我们收到的金额无效。请重试。 + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 237,238 + + 正在验证您的交易... + + + Order created. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 437 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 332 + + 订单已创建 + + + Deposit NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 215 + + 存入NFT + + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 46,48 + + 您可以将NFT存回即可进行交易。一旦处理完毕,NFT将被锁定在Soonaverse。您可以随时提取它。 + + + Confirm & Start deposit + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 76,77 + + 确认!开始存入... + + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 113,115 + + 如果NFT在 Soonaverse 中无法识别,我们将创建新的专辑并与之相关联的空间。 如果你是原作者,请不要忘记认领这个空间。 + + + NFT has been deposited. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 165 + + NFT已经存入。 + + + See NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 169,170 + + 查看 NFT + + + Terms & Conditions + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 85 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 107 + + 条款及细则 + + + Send NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 86 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 108 + + 发送 NFT + + + NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 147 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 172 + + 已收 NFT + + + Invalid NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 191 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 216 + + 收到无效的 NFT + + + Invalid NFT refunded. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 205 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 230 + + 无效NFT已退还 + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 19 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 37 + + 预览 + + + Sale Starts + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 57 + + + src/app/pages/nft/services/helper.service.ts + 142 + + 销售开始 + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 60 + + + src/app/pages/nft/pages/nft/nft.page.html + 70 + + 当前价格 + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 80 + + 作者 + + + System info + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 119 + + + src/app/pages/nft/pages/nft/nft.page.html + 634 + + 系统信息 + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 130 + + + src/app/pages/nft/pages/nft/nft.page.html + 654 + + 当前地址还未连接到一个活跃的主网。 只要IOTA/Shimmer 支持该功能,您就可以一次点击将此 NFT 迁移到您选择的网络。 + + + Properties + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 135 + + + src/app/pages/nft/pages/new/single/single.page.html + 90 + + 属性 + + + Stats + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 139 + + + src/app/pages/nft/pages/new/single/single.page.html + 193,192 + + 数据 + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149 + + + src/app/pages/nft/pages/new/single/single.page.html + 301 + + + src/app/pages/nft/pages/nft/nft.page.html + 27 + + NFT 图像 + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + IPFS 元数据 + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + IPFS 图像 + + + Available once minted... + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 64 + + + src/app/pages/nft/pages/nft/nft.page.ts + 81 + + 一旦创建,可使用... + + + Set your floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 6,7 + + 设置您的底价 + + + Available time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 42,43 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 42,43 + + 可用时间 + + + NOW + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 54,55 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 54,55 + + 现在! + + + Select Date/Time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + 选择日期/时间 + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 71 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 71 + + + src/app/pages/nft/pages/new/single/single.page.html + 69 + + 可售的开关必须打开 + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 80 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 80 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 70 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 81 + + + src/app/pages/nft/pages/new/single/single.page.html + 68 + + + src/app/pages/nft/pages/new/single/single.page.html + 79 + + 可售 + + + Auction length + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 91,92 + + 拍卖时长 + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 98 + + 一旦社区投票完成,在下一个开发冲刺中,我们将支持各种拍卖时长。 + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 115 + + 拍卖持续时间为3天 + + + Auction can't be canceled after start date + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 125 + + 竞拍开始后不可取消 + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 129 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 145 + + 一旦您的上架完成,您将收到一封确认信息。 + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 138,139 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 154,155 + + 确认上架 + + + Set your price + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 6,7 + + 设置价格 + + + Sale type + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + 销售类型 + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 103,104 + + 开放销售 + + + Specific member(s) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 113,114 + + 特定成员 + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2 + + + src/app/pages/token/pages/trade/trade.page.html + 110 + + 交易历史 + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 8,10 + + 该商品是你的且仅属于你。 + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 16 + + 这将使您的物品无法出售。 + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 17 + + 停止销售! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 15 + + 列出要销售的商品 + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 80 + + 非卖品 + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 88 + + + src/app/pages/token/services/new.service.ts + 29 + + 一口价 + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 96 + + 拍卖 + + + Stake NFT + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 221 + + 质押 NFT + + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 46,48 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 147,149 + + 你的NFT将被送回给你,并有时间锁定。请注意,你必须为时间锁提供足够的存储押金。只需在你的钱包中设置标签为 "soonaverse"。 + + + For how long you want to stake? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 56,57 + + + src/app/components/token/components/token-stake/token-stake.component.html + 174,175 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 57,58 + + 您想质押多久? + + + Stake type? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 77,78 + + 质押类型? + + + Confirm & Start Stake + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 118,119 + + 确认 & 开始质押 + + + NFT has been staked. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 207 + + NFT 已被质押。 + + + See Collection + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 218,219 + + 查看专辑 + + + Dynamic + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 76 + + 动态 + + + Static + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 80 + + 静态 + + + More + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 97,98 + + 更多 + + + Pending + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 6,7 + + + src/app/pages/token/pages/token/token.page.html + 36 + + + src/app/pages/token/pages/trade/trade.page.html + 524 + + 待处理 + + + Rejected + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 12,13 + + + src/app/pages/token/pages/token/token.page.html + 42 + + 已拒绝 + + + Commencing + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 18,19 + + 展开 + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 24,25 + + 进行中 + + + Completed + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 31,32 + + 已完成 + + + Share + + src/app/components/share/share.component.html + 16 + + + src/app/components/share/share.component.html + 39 + + + src/app/pages/token/pages/trade/trade.page.html + 64 + + + src/app/pages/token/pages/trade/trade.page.html + 635,634 + + 分享 + + + Copy to clipboard + + src/app/components/share/share.component.html + 28 + + 复制到剪贴板 + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 4 + + + src/app/pages/award/pages/new/new.page.html + 121 + + + src/app/pages/proposal/pages/new/new.page.html + 211 + + 空间是必需的。 + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 13 + + 选择空间 + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 83 + + + src/app/pages/award/pages/new/new.page.html + 152 + + + src/app/pages/proposal/pages/new/new.page.html + 242 + + 选择一个空间 + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 20 + + 所有空间 + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 19,20 + + 已加入 + + + members + + src/app/components/space/components/space-card/space-card.component.html + 44 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 23 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + 成员 + + + Space Claim + + src/app/components/space/components/space-claim/space-claim.component.html + 3 + + 空间认领 + + + Confirm and generate address + + src/app/components/space/components/space-claim/space-claim.component.html + 54,55 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 52,53 + + + src/app/components/token/components/token-claim/token-claim.component.html + 138,139 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 96,97 + + + src/app/components/token/components/token-stake/token-stake.component.html + 251,252 + + 确认并生成地址 + + + Claim complete. Congratulations. + + src/app/components/space/components/space-claim/space-claim.component.html + 160 + + + src/app/components/token/components/token-claim/token-claim.component.html + 281 + + 认领完成,祝贺你! + + + Close + + src/app/components/space/components/space-claim/space-claim.component.html + 172,173 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 181,182 + + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 29,30 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 79,80 + + + src/app/components/token/components/token-claim/token-claim.component.html + 293,294 + + + src/app/components/token/components/token-stake/token-stake.component.html + 378,379 + + 关闭 + + + Invalid amount or invalid senders address. Refunding transaction... + + src/app/components/space/components/space-claim/space-claim.component.ts + 183 + + 无效的金额或无效的发件人地址。交易退回中... + + + Funds refunded. + + src/app/components/space/components/space-claim/space-claim.component.ts + 222 + + 储入已退回 + + + Space claim submitted. + + src/app/components/space/components/space-claim/space-claim.component.ts + 306 + + 空间认领已提交。 + + + Token Reward Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 16 + + 代币奖励计划 + + + Existing Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 29 + + 现有计划 + + + Upload New + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 37 + + 上传新的 + + + Vault address: + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 55,64 + + 金库地址: + + + Schedule a new Reward + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 82,83 + + 安排一个新奖励 + + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 93,95 + + 你可以在这里安排新的质押奖励。要做到这一点,请上传一个包含用户地址和分配细节的.csv文件。 + + + Start Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 148 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 24 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 24 + + 开始日期 + + + End Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 149 + + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 19 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 25 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 25 + + 结束日期 + + + Vesting Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 150 + + 锁定日期 + + + Tokens to Distribute + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 151 + + 待分配的代币 + + + Status + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 152 + + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 110,109 + + + src/app/pages/token/pages/trade/trade.page.html + 376 + + 状态 + + + Proposal created to remove the reward. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 154 + + 为删除奖励而创建的提案。 + + + By checking this box, you agree with + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 12 + + 通过勾选此框,您同意 + + + Terms and Conditions + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 13 + + 条款及细则 + + + Timeline + + src/app/components/timeline/timeline.component.html + 2 + + + src/app/components/timeline/timeline.component.html + 8 + + 时间轴 + + + Earned Badge + + src/app/components/timeline/timeline.component.html + 66 + + 获得奖章 + + + with + + src/app/components/timeline/timeline.component.html + 66 + + + + + Listed by + + src/app/components/timeline/timeline.component.html + 109 + + 上架者 + + + Made available for auction by + + src/app/components/timeline/timeline.component.html + 112 + + 拍卖方: + + + Purchased by + + src/app/components/timeline/timeline.component.html + 170 + + 购买者: + + + See + + src/app/components/timeline/timeline.component.html + 181 + + 查看 + + + Hide + + src/app/components/timeline/timeline.component.html + 182 + + 隐藏 + + + Listed by space + + src/app/components/timeline/timeline.component.html + 287 + + 上架空间: + + + Refund blocked funds + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 3 + + 退还冻结资金 + + + Total available tokens to refund + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 29 + + 可退款代币总额 + + + Refund complete. Congratulations. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 169 + + 退款成功,恭喜你。 + + + Credit refund submitted. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 309 + + 退款已提交。 + + + Airdrop tokens on the network + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 3 + + 在网络上空投代币 + + + Tokens to airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 56,57 + + 待空投代币 + + + Confirm & Start Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 86,87 + + 确认!开始空投... + + + Tokens to Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 120,121 + + 待空投代币 + + + Finish Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 239,240 + + 完成空投 + + + Detail + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 60,61 + + 详情 + + + Trade + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 70,71 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 201,202 + + 交易 + + + Price (USD) + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 101 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 145 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 86 + + 价格 (USD) + + + 24h Change + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 126,127 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 115,116 + + 24h 涨跌幅 + + + 24h Volume + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 154 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 146 + + 24h成交量 + + + M. Cap + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 172 + + 市值 + + + Open buy order + + src/app/components/token/components/token-bid/token-bid.component.html + 3 + + 开启买单 + + + Summary + + src/app/components/token/components/token-bid/token-bid.component.html + 29,30 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 39,40 + + + src/app/components/token/components/token-offer/token-offer.component.html + 46,47 + + 概要 + + + Token amount to buy + + src/app/components/token/components/token-bid/token-bid.component.html + 34,35 + + 要购买的代币数量 + + + Offered price per token + + src/app/components/token/components/token-bid/token-bid.component.html + 44,45 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 44,45 + + + src/app/components/token/components/token-offer/token-offer.component.html + 51,52 + + 代币开价 + + + Token amount to send + + src/app/components/token/components/token-bid/token-bid.component.html + 73,74 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 117,118 + + 要发送的代币数量 + + + ~ + + src/app/components/token/components/token-bid/token-bid.component.html + 89,98 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 60,69 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 90,99 + + + src/app/pages/token/pages/trade/trade.page.html + 553,556 + + ~ + + + I agree with + + src/app/components/token/components/token-bid/token-bid.component.html + 129 + + + src/app/components/token/components/token-claim/token-claim.component.html + 115 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 153 + + + src/app/components/token/components/token-offer/token-offer.component.html + 133 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 78 + + + src/app/components/token/components/token-refund/token-refund.component.html + 65 + + 我同意 + + + Token terms and Conditions + + src/app/components/token/components/token-bid/token-bid.component.html + 131 + + + src/app/components/token/components/token-claim/token-claim.component.html + 117 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 155 + + + src/app/components/token/components/token-offer/token-offer.component.html + 135 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 80 + + + src/app/components/token/components/token-refund/token-refund.component.html + 67 + + 代币的条款及细则 + + + and generate address + + src/app/components/token/components/token-bid/token-bid.component.html + 147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 171 + + + src/app/components/token/components/token-vote/token-vote.component.html + 182 + + 并生成地址 + + + Once you agree with the terms, the generated address will remain active during the whole sale. + + src/app/components/token/components/token-bid/token-bid.component.html + 154,155 + + + src/app/components/token/components/token-claim/token-claim.component.html + 146,147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 178,179 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 103,104 + + 一旦您同意条款, 生成的地址将在整个销售过程中保持有效状态。 + + + Buy complete. Congratulations. + + src/app/components/token/components/token-bid/token-bid.component.html + 259 + + 购买完成。恭喜。 + + + Bid created. + + src/app/components/token/components/token-bid/token-bid.component.ts + 344 + + 竞价已产生 + + + Are you sure you want to cancel the sale? + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 17 + + 您确定要取消订单吗? + + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 23,25 + + 一旦销售被取消,程序将自动触发,所有投资者将立即得到退款。 + + + Cancel sale + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 32,33 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 74,75 + + 取消销售 + + + Canceled public sale. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts + 56 + + 已取消公共销售。 + + + Total () + + src/app/components/token/components/token-cancel/token-cancel.component.html + 51,52 + + 总计 () + + + Are you sure you want to cancel your buy order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 66 + + 你确定要取消你的买单吗? + + + Are you sure you want to cancel your sell order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 69 + + 你确定要取消你的买单吗? + + + Confirm + + src/app/components/token/components/token-cancel/token-cancel.component.html + 76,77 + + 确认 + + + Cancelled. + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 48 + + + src/app/pages/token/pages/trade/trade.page.ts + 589 + + 已取消 + + + Cancel your buy + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 80 + + 取消购买 + + + Cancel your sell + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 81 + + 取消卖单 + + + Ongoing sale + + src/app/components/token/components/token-card/token-card.component.html + 22 + + 进行中的销售 + + + Sale ends soon + + src/app/components/token/components/token-card/token-card.component.html + 23 + + 销售即将结束 + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 24 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 21 + + 冷静期结束 + + + Sale starts + + src/app/components/token/components/token-card/token-card.component.html + 55,57 + + 销售开始 + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 115,117 + + + src/app/components/token/components/token-card/token-card.component.html + 175,177 + + 销售结束 + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 130 + + + src/app/components/token/components/token-card/token-card.component.html + 190 + + + src/app/components/token/components/token-card/token-card.component.html + 250 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 176 + + + src/app/components/token/components/token-row/token-row.component.html + 79 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 20 + + 销售结束 + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 235,237 + + 冷静期结束 + + + Token Claim + + src/app/components/token/components/token-claim/token-claim.component.html + 3 + + 代币认领 + + + Total available tokens to claim as of today + + src/app/components/token/components/token-claim/token-claim.component.html + 42 + + + src/app/components/token/components/token-claim/token-claim.component.html + 56 + + 至今可供认领的代币总数 + + + Tokens available from + + src/app/components/token/components/token-claim/token-claim.component.html + 76 + + 代币可用于 + + + Total tokens to claim + + src/app/components/token/components/token-claim/token-claim.component.html + 84 + + 待认领的代币总数 + + + Token claim submitted. + + src/app/components/token/components/token-claim/token-claim.component.ts + 320 + + 代币认领已提交 + + + Guardian's of the space will be able to decide where this token will be minted. + + src/app/components/token/components/token-info/token-info-description.component.html + 41 + + 空间的守护者将能够决定这种代币在哪里Mint。 + + + Icon + + src/app/components/token/components/token-info/token-info-description.component.ts + 25 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 24 + + 图标 + + + Name + + src/app/components/token/components/token-info/token-info-description.component.ts + 26 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 25 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 31,30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 74 + + + src/app/pages/nft/pages/new/single/single.page.html + 21 + + + src/app/pages/nft/pages/new/single/single.page.html + 27,26 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 15 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 21,20 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 25 + + 名称 + + + Symbol + + src/app/components/token/components/token-info/token-info-description.component.ts + 27 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 30 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 39,38 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 26 + + 符号 + + + Launchpad Price + + src/app/components/token/components/token-info/token-info-description.component.ts + 28 + + 启动板价格 + + + Network + + src/app/components/token/components/token-info/token-info-description.component.ts + 29 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 20 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 5,4 + + + src/app/pages/nft/pages/nft/nft.page.html + 542 + + + src/app/pages/nft/pages/nft/nft.page.html + 564 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 119 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 160 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 28 + + 网络 + + + Total supply + + src/app/components/token/components/token-info/token-info-description.component.ts + 30 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 29 + + 总供应量 + + + Current distribution + + src/app/components/token/components/token-info/token-info-description.component.ts + 31 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 30 + + 当前分布 + + + Type + + src/app/components/token/components/token-info/token-info-description.component.ts + 32 + + + src/app/pages/member/pages/tokens/tokens.page.html + 58 + + + src/app/pages/member/pages/tokens/tokens.page.html + 325 + + + src/app/pages/member/pages/transactions/transactions.page.html + 24 + + + src/app/pages/nft/pages/nft/nft.page.html + 384 + + + src/app/pages/nft/pages/nft/nft.page.html + 434 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 31 + + + src/app/pages/token/pages/trade/trade.page.html + 361 + + 类型 + + + Coming soon + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 91,92 + + 即将到来 + + + In Cooldown + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 98,99 + + + src/app/components/token/components/token-row/token-row.component.html + 245,246 + + 冷静期中… + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 108,109 + + + src/app/components/token/components/token-row/token-row.component.html + 256,257 + + + src/app/pages/token/pages/trade/trade.page.html + 456 + + + src/app/pages/token/pages/trade/trade.page.html + 467 + + + src/app/pages/token/pages/trade/trade.page.html + 909,910 + + 购买 + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 116 + + + src/app/pages/token/pages/trade/trade.page.html + 387 + + + src/app/pages/token/pages/trade/trade.page.html + 1210 + + 购买 + + + Sale starts + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 167 + + + src/app/components/token/components/token-row/token-row.component.html + 70 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 19 + + 售出开始 + + + Cooldown period ends + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 187,188 + + + src/app/components/token/components/token-row/token-row.component.html + 90,91 + + 冷却期结束于 + + + Mint token on network + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 3 + + 铸造代币在网络 + + + Public sale will no longer be available after bringing token to a network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 45,46 + + 在将代币迁移到网络后,公共销售将不再有效。 + + + Once minted all owners will have the option to migrate their tokens to the selected network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 56,58 + + 一旦铸成,任何持有者将可以选择将他们的代币迁移到选定的网络。 + + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 68,70 + + 请注意,所有权和所有未分配的代币将被存入你的会员档案。 + + + Tokens to migrate + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 92,93 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 173,174 + + 待迁移代币 + + + Locked public tokens + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 107,108 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 189,190 + + 已锁定的公共代币 + + + Open sale order + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 3 + + 开启销售订单 + + + Token ID + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 30,31 + + + src/app/components/token/components/token-offer/token-offer.component.html + 27,28 + + 代币 ID + + + You will receive + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 74,75 + + + src/app/components/token/components/token-offer/token-offer.component.html + 73,74 + + + src/app/pages/token/pages/trade/trade.page.html + 1132,1133 + + 您将收到 + + + Fee + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 103 + + + src/app/components/token/components/token-offer/token-offer.component.html + 101 + + + src/app/pages/token/pages/trade/trade.page.html + 1172 + + 费用 + + + No FEES! + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 110,111 + + + src/app/components/token/components/token-offer/token-offer.component.html + 108,109 + + + src/app/pages/token/pages/trade/trade.page.html + 1188,1189 + + 免费! + + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 232,234 + + + src/app/components/token/components/token-vote/token-vote.component.html + 249,251 + + 请确保在发送代币时检查你的Fifrefly钱包中的赠送存储存款选项。 + + + Sell complete. Congratulations. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 301 + + + src/app/components/token/components/token-vote/token-vote.component.html + 318 + + 销售完成。恭喜。 + + + Offer order created. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 346 + + 报价订单已创建。 + + + Open Token Sell + + src/app/components/token/components/token-offer/token-offer.component.html + 3 + + 开放代币销售 + + + Your Balance + + src/app/components/token/components/token-offer/token-offer.component.html + 35,36 + + 您的余额 + + + Offered amount of tokens + + src/app/components/token/components/token-offer/token-offer.component.html + 64,65 + + 已开价的代币总额 + + + Create a Sell Order + + src/app/components/token/components/token-offer/token-offer.component.html + 151,152 + + 创建一个卖单 + + + Offer created. + + src/app/components/token/components/token-offer/token-offer.component.ts + 102 + + 报价已生成 + + + Public sale info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 4 + + 公开销售信息 + + + Start date is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 7 + + 开始日期是必填的。 + + + Start date for the token offering + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 16 + + 代币竞价开始日期 + + + Offering length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 23 + + 竞价时长是必填的。 + + + Select token offering length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 48 + + 选择代币竞价时长(默认2天) + + + Token allocation info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 63 + + 代币分配信息 + + + Sale Setup + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 81 + + 销售设置 + + + Enable Cooldown period + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 87,88 + + 启用冷却期 + + + Enable Cooldown with refund option. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 98,99 + + 启用含退款选项的冷却期 + + + Cooldown period length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 103 + + 冷却期的长度是必需的。 + + + Select token cooldown length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 129 + + 选择代币冷却期时长(默认2天) + + + No Cooldown. Participants can’t refund. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 149,150 + + 没有冷却期。参与者将无法退款。 + + + Enable Oversale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 160,161 + + 允许超售 + + + No Oversale. Sale ends with 100% reached. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 171,172 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 54,55 + + 无超售,销售达到100%后结束。 + + + Sale continues after 100% reached + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 179,180 + + 到达100%以后继续销售 + + + Confirm and schedule sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 195,196 + + 确认并预约销售 + + + Price per token + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 106 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 34 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 42 + + 每个代币价格 + + + Public sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 135 + + + src/app/pages/token/pages/new/summary/summary.component.html + 214 + + 公开发售 + + + Purchase token + + src/app/components/token/components/token-purchase/token-purchase.component.html + 3 + + 购买代币 + + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 113 + + 输入您想要购买的代币数量。IOTA的价格将被计算在内。 + + + Enter how much you want to spend. Amount of tokens will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 116 + + 输入您想要花销多少,代币的金额将会被计算。 + + + Purchased tokens + + src/app/components/token/components/token-purchase/token-purchase.component.html + 243,244 + + 已买到的代币 + + + Price + + src/app/components/token/components/token-purchase/token-purchase.component.html + 260,261 + + 价格 + + + Cooldown period ends + + src/app/components/token/components/token-refund/token-refund.component.html + 23 + + 冷静期结束 + + + Confirm and refund + + src/app/components/token/components/token-refund/token-refund.component.html + 82,83 + + 确认并退款 + + + Refund token + + src/app/components/token/components/token-refund/token-refund.component.ts + 61 + + 退款代币 + + + Initial Price + + src/app/components/token/components/token-row/token-row.component.html + 39 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 27 + + 初始价格 + + + Avg. Price + + src/app/components/token/components/token-row/token-row.component.html + 47 + + 平均价格 + + + Change (24h) + + src/app/components/token/components/token-row/token-row.component.html + 107,108 + + 变化 (24小时) + + + Volume 24h + + src/app/components/token/components/token-row/token-row.component.html + 150 + + 交易量(24h) + + + Market Cap + + src/app/components/token/components/token-row/token-row.component.html + 166 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 169 + + + src/app/pages/token/pages/trade/trade.page.html + 582 + + 市值 + + + Claim + + src/app/components/token/components/token-row/token-row.component.html + 210,211 + + 认领 + + + Refund + + src/app/components/token/components/token-row/token-row.component.html + 222,223 + + 退款 + + + Launching soon + + src/app/components/token/components/token-row/token-row.component.html + 238,239 + + 即将启动 + + + Buy / Sell + + src/app/components/token/components/token-row/token-row.component.html + 259,260 + + 买入 / 卖出 + + + Stake your token + + src/app/components/token/components/token-stake/token-stake.component.html + 3 + + 质押您的代币 + + + Select or define the amount you want to stake and the period for how long you want to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 13,15 + + 选择或定义您想要质押的金额以及质押多久的时间。 + + + Since you are a guardian you can also + + src/app/components/token/components/token-stake/token-stake.component.html + 17 + + 因为你是守护者你同样可以 + + + - Choose an amount and for how long you’d like to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 50 + + - 选择一个你想锁定的数量和时间。 + + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + src/app/components/token/components/token-stake/token-stake.component.html + 52,54 + + - 你的资金留在你的钱包里,但在质押期间你将不能使用它们。 + + + - You will get staked points based on your input. + + src/app/components/token/components/token-stake/token-stake.component.html + 56,57 + + - 您将根据您的投入获得质押点数。 + + + See Staking reward page for more info + + src/app/components/token/components/token-stake/token-stake.component.html + 62 + + 更多信息请查看质押奖励页面 + + + here. + + src/app/components/token/components/token-stake/token-stake.component.html + 63 + + 这里。 + + + How it works + + src/app/components/token/components/token-stake/token-stake.component.html + 71 + + 工作原理 + + + How much you want to stake? + + src/app/components/token/components/token-stake/token-stake.component.html + 87,88 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 21,22 + + 你想质押多少 ? + + + Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 192 + + 奖励倍数 + + + Staking Value + + src/app/components/token/components/token-stake/token-stake.component.html + 210,219 + + 质押价值 + + + Staked amount * Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 216 + + + src/app/pages/member/pages/activity/activity.page.html + 36 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 107 + + 质押数量 * 奖励倍数 + + + You will earn + + src/app/components/token/components/token-stake/token-stake.component.html + 230 + + 您将获取 + + + Stake complete. Congratulations. + + src/app/components/token/components/token-stake/token-stake.component.html + 366 + + 质押完成,恭喜你! + + + Token stake submitted. + + src/app/components/token/components/token-stake/token-stake.component.ts + 410 + + 代币质押已提交 + + + Trade details + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 3 + + 交易详情 + + + Traded amount + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 29,30 + + 交易金额 + + + Price per token + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 48,49 + + + src/app/pages/token/pages/new/summary/summary.component.html + 69,70 + + 代币单价 + + + Date and Time + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 79,80 + + 日期和时间 + + + Fullfilled + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 94,95 + + 已完成 + + + Date + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 109 + + + src/app/pages/member/pages/transactions/transactions.page.html + 22 + + + src/app/pages/nft/pages/nft/nft.page.html + 383 + + + src/app/pages/nft/pages/nft/nft.page.html + 433 + + + src/app/pages/proposal/pages/votes/votes.page.html + 15 + + + src/app/pages/token/pages/trade/trade.page.html + 198 + + + src/app/pages/token/pages/trade/trade.page.html + 272 + + + src/app/pages/token/pages/trade/trade.page.html + 360 + + 日期 + + + State + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 111 + + 状态 + + + Storage deposit fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 144 + + 存储押金 + + + Fullfilment + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 171 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 252 + + 完成情况 + + + Seller + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 176 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 247 + + 卖方 + + + Transaction + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 204 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 280 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 314 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 358 + + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 41 + + + src/app/pages/member/pages/transactions/transactions.page.html + 74 + + 交易 + + + Non Transferable + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 153 + + + src/app/pages/member/pages/transactions/transactions.page.html + 77 + + 不可转让 + + + Processing... + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 155 + + + src/app/pages/member/pages/transactions/transactions.page.html + 87 + + 处理中... + + + Soonaverse Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 170 + + Soonaverse费用 + + + Exchange Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 172 + + 交易费 + + + 24h change/Price + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 46 + + 24h 价格波动 + + + Markets + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 6 + + + src/app/pages/token/pages/trade/trade.page.html + 1242 + + 市场 + + + No Tokens + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 38,39 + + + src/app/pages/tokens/pages/favourites/favourites.page.html + 25,26 + + 无代币 + + + Cast Vote + + src/app/components/token/components/token-vote/token-vote.component.html + 3 + + 投票 + + + Question + + src/app/components/token/components/token-vote/token-vote.component.html + 16,17 + + 问题 + + + Selected option + + src/app/components/token/components/token-vote/token-vote.component.html + 23,24 + + 已选选项 + + + How do you set your votes? + + src/app/components/token/components/token-vote/token-vote.component.html + 33,34 + + 您如何设置您的投票? + + + Total native tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 88,89 + + 原生代币总计 + + + Total staked tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 105,106 + + 质押代币总计 + + + Voting is active on + + src/app/components/token/components/token-vote/token-vote.component.html + 119,120 + + 投票已启用于 + + + Your total voting weight + + src/app/components/token/components/token-vote/token-vote.component.html + 131,132 + + 您的总投票权重 + + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + src/app/components/token/components/token-vote/token-vote.component.html + 151,153 + + 请注意,已质押的代币只能用于一次投票。如果你在其他提案上使用已质押的代币,你的投票权重将被分割。 + + + Cast Votes + + src/app/components/token/components/token-vote/token-vote.component.html + 193 + + 投票 + + + Send Native Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 124 + + 发送原生代币 + + + Use Staked Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 128 + + 使用质押代币 + + + Vote received. + + src/app/components/token/components/token-vote/token-vote.component.ts + 191 + + 收到投票。 + + + Transaction confirmed and funds refunded. + + src/app/components/token/components/token-vote/token-vote.component.ts + 217 + + 交易已确认并退还资金。 + + + Token vote executed. + + src/app/components/token/components/token-vote/token-vote.component.ts + 375 + + 代币投票已执行。 + + + Token vote order created. + + src/app/components/token/components/token-vote/token-vote.component.ts + 392 + + 代币投票订单已创建。 + + + Type + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 13,14 + + 类型 + + + Date + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 22,23 + + 日期 + + + Manage addresses + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 3 + + 管理地址 + + + Not yet verified + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 59 + + 未验证 + + + Change + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 66 + + 变更 + + + Verify + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 67 + + 验证 + + + You will be asked to send funds to the new + + src/app/components/wallet-address/verify-address/verify-address.component.html + 33 + + 您需要发送资金给新的 + + + address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/verify-address/verify-address.component.html + 36,37 + + 地址来完成验证流程。您发送资金的地址将被链接到您的 + + + space + + src/app/components/wallet-address/verify-address/verify-address.component.html + 41 + + 空间 + + + profile + + src/app/components/wallet-address/verify-address/verify-address.component.html + 43 + + 个人资料 + + + for future transactions. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 44 + + 为将来的交易 + + + Generate new address + + src/app/components/wallet-address/verify-address/verify-address.component.html + 55,56 + + 生成新地址 + + + Send a small + + src/app/components/wallet-address/verify-address/verify-address.component.html + 66 + + 发送一个小的 + + + amount to validate your address. This expires in + + src/app/components/wallet-address/verify-address/verify-address.component.html + 67 + + 金额来验证您的地址。它将过期于 + + + Expired. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 70 + + 已过期. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/verify-address/verify-address.component.html + 106,107 + + 等待交易被验证。一旦完成,我们将返还您的交易。 + + + Validating address... + + src/app/components/wallet-address/verify-address/verify-address.component.html + 136 + + 正在验证地址... + + + Now you can deal with NFTs and participate in token trading. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 174 + + 现在您可以处理 NFT 并参与代币交易。 + + + Your new address has been verified! + + src/app/components/wallet-address/verify-address/verify-address.component.html + 176 + + 您的新地址已经被验证。 + + + Finish Verification + + src/app/components/wallet-address/verify-address/verify-address.component.html + 181,182 + + 完成验证 + + + Generate address + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 76 + + 生成地址 + + + Refunding your payment... + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 192 + + 退还您的付款... + + + Address is not verified + + src/app/components/wallet-address/wallet-address.component.html + 4 + + 地址未验证 + + + wallet + + src/app/components/wallet-address/wallet-address.component.html + 25 + + 钱包 + + + Copy address + + src/app/components/wallet-address/wallet-address.component.html + 30 + + 复制地址 + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + 验证您的 + + + address + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + 地址 + + + This network is currently not enabled. + + src/app/components/wallet-address/wallet-address.component.ts + 82 + + 此网络目前未启用。 + + + Award Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + 奖励信息 + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 20 + + 拥有者 + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 18 + + 已使用/可用的奖章 + + + Badge lock period + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 20 + + 徽章锁定期 + + + Award info + + src/app/pages/award/pages/award/award.page.html + 3 + + + src/app/pages/award/pages/new/new.page.html + 17 + + 奖项信息 + + + Minted on: + + src/app/pages/award/pages/award/award.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 47 + + 已铸造: + + + Fund Award + + src/app/pages/award/pages/award/award.page.html + 121,122 + + 充入奖励 + + + Minting in Progress + + src/app/pages/award/pages/award/award.page.html + 129,130 + + 正在铸造... + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 136 + + + src/app/pages/award/pages/award/award.page.html + 210 + + 兑现奖励 + + + Reject Award + + src/app/pages/award/pages/award/award.page.html + 157 + + 撤回奖励 + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 166 + + 确认您的参与 + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 174,176 + + 整个沟通现在只能在平台之外进行,请让奖项创建者知道如何联系你。 + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 180 + + 为您的工作提供描述或者链接。 + + + Submit + + src/app/pages/award/pages/award/award.page.html + 188 + + 提交 + + + Cancel + + src/app/pages/award/pages/award/award.page.html + 189 + + + src/app/pages/token/pages/trade/trade.page.html + 245 + + + src/app/pages/token/pages/trade/trade.page.html + 333 + + 取消 + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 41 + + + src/app/pages/token/pages/new/new.page.ts + 34 + + + src/app/pages/token/pages/token/token.page.ts + 36 + + 概览 + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 105 + + 参与者 + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2 + + 新奖项 + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14 + + + src/app/pages/award/pages/new/new.page.html + 77 + + + src/app/pages/proposal/pages/new/new.page.html + 24 + + “标题”为必填字段。 + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19 + + 标题和描述将包含在奖项上。结束日期决定奖项的持续时间。 + + + Title + + src/app/pages/award/pages/new/new.page.html + 23 + + + src/app/pages/award/pages/new/new.page.html + 29,28 + + + src/app/pages/award/pages/new/new.page.html + 76 + + + src/app/pages/award/pages/new/new.page.html + 83,82 + + + src/app/pages/proposal/pages/new/new.page.html + 23 + + + src/app/pages/proposal/pages/new/new.page.html + 29,28 + + + src/app/pages/proposal/pages/new/new.page.html + 103 + + + src/app/pages/proposal/pages/new/new.page.html + 109,108 + + + src/app/pages/proposal/pages/new/new.page.html + 156 + + + src/app/pages/proposal/pages/new/new.page.html + 162,161 + + + src/app/pages/space/pages/upsert/upsert.page.html + 24 + + + src/app/pages/space/pages/upsert/upsert.page.html + 30,29 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 106 + + + src/app/pages/token/pages/new/overview/overview.component.html + 22 + + + src/app/pages/token/pages/new/overview/overview.component.html + 29,28 + + + src/app/pages/token/pages/new/overview/overview.component.html + 65 + + + src/app/pages/token/pages/new/overview/overview.component.html + 72,71 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 9 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 16,15 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 55 + + 标题 + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 24 + + 您必须输入名称。 + + + End + + src/app/pages/award/pages/new/new.page.html + 36 + + + src/app/pages/award/pages/new/new.page.html + 47,46 + + + src/app/pages/proposal/pages/new/new.page.html + 56 + + + src/app/pages/proposal/pages/new/new.page.html + 68,67 + + 结束 + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 37 + + + src/app/pages/proposal/pages/new/new.page.html + 57 + + 结束日期是必填的 + + + Description + + src/app/pages/award/pages/new/new.page.html + 52 + + + src/app/pages/award/pages/new/new.page.html + 58 + + + src/app/pages/award/pages/new/new.page.html + 91 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 40 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 45 + + + src/app/pages/nft/pages/new/single/single.page.html + 33 + + + src/app/pages/nft/pages/new/single/single.page.html + 38 + + + src/app/pages/proposal/pages/new/new.page.html + 76 + + + src/app/pages/proposal/pages/new/new.page.html + 82 + + + src/app/pages/proposal/pages/new/new.page.html + 119 + + + src/app/pages/proposal/pages/new/new.page.html + 124 + + + src/app/pages/proposal/pages/new/new.page.html + 171 + + + src/app/pages/proposal/pages/new/new.page.html + 176 + + + src/app/pages/space/pages/upsert/upsert.page.html + 36 + + + src/app/pages/space/pages/upsert/upsert.page.html + 41 + + + src/app/pages/token/pages/new/overview/overview.component.html + 37 + + + src/app/pages/token/pages/new/overview/overview.component.html + 43 + + + src/app/pages/token/pages/new/overview/overview.component.html + 80 + + + src/app/pages/token/pages/new/overview/overview.component.html + 86 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 21 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 67 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 21 + + 描述 + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 69 + + 奖章定义 + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 71 + + 标题和描述将包含在奖章上。 + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 97 + + 奖章描述 + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 115 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 369 + + + src/app/pages/proposal/pages/new/new.page.html + 205 + + 空间信息 + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 117 + + 这是列出该奖项的空间。 + + + Reward info + + src/app/pages/award/pages/new/new.page.html + 170 + + 奖项信息 + + + You need to fund this award with native token. Select which token will be used as reward. + + src/app/pages/award/pages/new/new.page.html + 172 + + 您需要用原生代币为该奖励充值。选择哪种代币将被用作奖励。 + + + Token is required. + + src/app/pages/award/pages/new/new.page.html + 176 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 247 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 324 + + 代币是必填的 + + + Select a token + + src/app/pages/award/pages/new/new.page.html + 207 + + 选择一种代币 + + + Defines the amount of tokens for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 222,223 + + 设定每个徽章的代币数量和可用徽章的数量。 + + + Invalid token amount per badge + + src/app/pages/award/pages/new/new.page.html + 226 + + 每个徽章的代币数量无效 + + + Tokens per badge + + src/app/pages/award/pages/new/new.page.html + 234 + + 每个徽章代币 + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 251 + + + src/app/pages/award/pages/new/new.page.html + 338 + + 最小值1和最大值10000。 + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 273 + + 你想为这个奖项提供的奖章数量。这也可以被认为是你想颁发的奖品的份数。 + + + Total to be funded + + src/app/pages/award/pages/new/new.page.html + 284,285 + + 待充入总额 + + + Upload image that will be used as a Reward Badge. + + src/app/pages/award/pages/new/new.page.html + 299 + + 上传将被用作奖励徽章的图像。 + + + Badge is required. + + src/app/pages/award/pages/new/new.page.html + 328,329 + + 徽章是必需的。 + + + Set the duration for which the badge will be locked in the Firefly wallet. + + src/app/pages/award/pages/new/new.page.html + 334,335 + + 设置徽章锁定在 Firefly 钱包中的持续时间。 + + + Create award + + src/app/pages/award/pages/new/new.page.html + 369,370 + + 新增奖项 + + + Award - New + + src/app/pages/award/pages/new/new.page.ts + 119 + + + src/app/pages/award/pages/new/new.page.ts + 134 + + 奖项 - 新建 + + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/award/pages/new/new.page.ts + 120 + + + src/app/pages/award/pages/new/new.page.ts + 135 + + 为您的DAO和数字社区创造参与和增长。奖项、无手续费投票、一键式设置。今天就加入吧。 + + + Member seems to log out during the file upload request. + + src/app/pages/award/pages/new/new.page.ts + 184 + + + src/app/pages/collection/pages/upsert/upsert.page.ts + 403 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 240 + + + src/app/pages/nft/pages/new/single/single.page.ts + 180 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 131 + + + src/app/pages/token/services/new.service.ts + 202 + + 在文件上传请求期间,成员似乎已经登出。 + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2 + + 奖项描述 + + + Award - + + src/app/pages/award/pages/overview/overview.page.ts + 17 + + + src/app/pages/award/pages/participants/participants.page.ts + 83 + + 奖项 - + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 49 + + + src/app/pages/award/pages/participants/participants.page.html + 63 + + + src/app/pages/proposal/pages/participants/participants.page.html + 49 + + + src/app/pages/proposal/pages/participants/participants.page.html + 63 + + 查找参与者 + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 72 + + + src/app/pages/proposal/pages/participants/participants.page.html + 72 + + + src/app/pages/space/pages/members/members.page.html + 92 + + 只显示顶部的几条记录... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 90,91 + + + src/app/pages/proposal/pages/participants/participants.page.html + 90,91 + + 没有参与者 + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 118,119 + + 奖励 + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 138,139 + + 再次奖励 + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 50 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 158 + + + src/app/pages/space/pages/awards/awards.page.ts + 30 + + + src/app/pages/space/pages/collections/collections.page.ts + 30 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 30 + + 待处理 + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 51 + + 已颁发 + + + See all participants within the award. + + src/app/pages/award/pages/participants/participants.page.ts + 84 + + + src/app/pages/proposal/pages/overview/overview.page.ts + 60 + + 查看获奖的所有参与者。 + + + applied on + + src/app/pages/award/pages/participants/participants.page.ts + 257 + + 应用于 + + + Make NFT’s from this collection available on decentralised network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 12,13 + + 在去中心化的网络上提供这个专辑的NFT。 + + + Minting + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 29 + + 铸造中 + + + NFTs left + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 32 + + NFT 剩余 + + + Collection is not yet migrated to the decentralized network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 47,48 + + 专辑尚未迁移到去中心化的网络。 + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 611 + + 谁可以购买? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 63,64 + + 开始销售 + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 76,77 + + 仅限空间成员 + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89,90 + + 仅限空间守护者 + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 102,103 + + 仅限带徽章的空间成员 + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 118,119 + + 必须至少拥有一个每个选定的专辑的NFT + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 126,127 + + (每会员仅限一个 NFT) + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 175 + + 成员折扣 + + + discount for members with rewards from this space in total value of + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 190 + + 给从此空间奖励的会员折扣总值为 + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 5 + + 专辑介绍 + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 22,23 + + 限量版 + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 81,82 + + + src/app/pages/collection/pages/collection/collection.page.html + 301,302 + + 发布专辑 + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 93,94 + + + src/app/pages/collection/pages/collection/collection.page.html + 313,314 + + 编辑专辑 + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + 版税给与 + + + Rank + + src/app/pages/collection/pages/collection/collection.page.html + 170,171 + + + src/app/pages/token/pages/token/token.page.html + 73,74 + + 等级 + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 189 + + 开始于 + + + Deposited + + src/app/pages/collection/pages/collection/collection.page.html + 200 + + 已存入 + + + Staked + + src/app/pages/collection/pages/collection/collection.page.html + 218 + + 已质押 + + + Links + + src/app/pages/collection/pages/collection/collection.page.html + 227 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 154,153 + + + src/app/pages/token/pages/new/overview/overview.component.html + 160,159 + + + src/app/pages/token/pages/new/summary/summary.component.html + 307,306 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 79 + + 链接 + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 330 + + + src/app/pages/collection/pages/collection/collection.page.html + 376 + + 退回专辑 + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 346 + + + src/app/pages/collection/pages/collection/collection.page.html + 392 + + 取消专辑 + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 413 + + + src/app/pages/nft/pages/new/new.page.html + 2 + + 新建 NFT + + + Rank amount must be between + + src/app/pages/collection/pages/collection/collection.page.ts + 285 + + + src/app/pages/token/pages/token/token.page.ts + 195 + + 等级金额必须介于 + + + records + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 13 + + + src/app/pages/discover/pages/awards/awards.page.html + 13 + + + src/app/pages/discover/pages/members/members.page.html + 13 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 13 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 13 + + + src/app/pages/market/pages/collections/collections.page.html + 13 + + + src/app/pages/member/pages/nfts/nfts.page.html + 13 + + 记录 + + + Filters&Sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 30 + + + src/app/pages/discover/pages/awards/awards.page.html + 30 + + + src/app/pages/discover/pages/members/members.page.html + 30 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 30 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 30 + + + src/app/pages/market/pages/collections/collections.page.html + 30 + + 筛选及排序 + + + Filters&sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 71 + + + src/app/pages/discover/pages/awards/awards.page.html + 78 + + + src/app/pages/discover/pages/members/members.page.html + 78 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 78 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 79 + + + src/app/pages/market/pages/collections/collections.page.html + 79 + + 筛选及排序 + + + Sort by + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 93,92 + + + src/app/pages/discover/pages/awards/awards.page.html + 94,93 + + + src/app/pages/discover/pages/members/members.page.html + 94,93 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 94,93 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 95,94 + + + src/app/pages/market/pages/collections/collections.page.html + 95,94 + + 排序: + + + Price range + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 131 + + 价格范围 + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2 + + 创建新的专辑 + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3 + + 编辑专辑 + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18 + + 专辑信息 + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20 + + 名称和描述将包含在专辑中。 + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 58 + + + src/app/pages/nft/pages/new/single/single.page.html + 51 + + 销售信息 + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 60 + + 时间将根据用户所在的时区进行显示。对于生成型的 NFT 和SFT ,价格只能在此设置,不能在 单个NFT 上更改。 经典型 NFT 专辑的价格只是指导性的,可以在每个NFT上单独设定。 + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 90 + + 版税 + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 93,95 + + 版税税率将适用于 NFT 的的首次铸造和所有二级销售。 由于IOTA议定的粉尘防御机制,收取版税的IOTA地址必须拥有最低1Mi的余额。 + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 106 + + 版税税率 + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 116 + + 例如:10%,20%,等等。 + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 124 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 131 + + 税率收取到另一个空间 + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 155 + + 链接将被包含在 NFT 详细信息上。为Twitter 和 Discord (name#id)项显示帐户的用户名。 + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 160 + + 无效的URL + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 167,166 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 312,311 + + + src/app/pages/token/pages/new/overview/overview.component.html + 175,174 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 91,90 + + URL + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 183 + + 连接你的Twitter帐户 + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + 无效的 Discord 用户名。 + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 200 + + 连接您的Discord账户 + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 215 + + 折扣 + + + The discount applies only to members who have earned tokens from awards issued by this space. + + src/app/pages/collection/pages/upsert/upsert.page.html + 217 + + 折扣仅适用于从本空间颁发的奖励中获得代币的会员。 + + + Token amount higher than + + src/app/pages/collection/pages/upsert/upsert.page.html + 231 + + 代币数量大于 + + + Type awarded token... + + src/app/pages/collection/pages/upsert/upsert.page.html + 257 + + Type awarded token... + + + Discount % + + src/app/pages/collection/pages/upsert/upsert.page.html + 271 + + 折扣 % + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 299 + + 折扣 + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 310 + + 折扣 XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 330,331 + + 折扣金额 + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 356 + + 增加折扣等级 + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 371 + + 这是将铸造 NFT 专辑的空间。只有拥有经过验证的钱包的空间才会显示在下拉列表中。请确保你选择正确的空间,因为 NFT 销售的所有资金将进入这个空间的已验证钱包。 + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 389 + + 专辑类型 + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 391 + + 每种类型有不同的特性。创建后不能更改。 + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 423,422 + + + src/app/pages/space/pages/upsert/upsert.page.html + 200 + + 横幅广告 + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 453,454 + + 横幅广告是必需的。 + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 463 + + 占位符 + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 493,494 + + 占位符是必须的。 + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 503 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 516 + + + src/app/pages/market/pages/collections/collections.page.html + 177 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138 + + 类别 + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 505 + + 类别用于对内容进行过滤。 + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 509 + + 类别. + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 534 + + 专辑设置 + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 536 + + 谁可以访问指定的专辑。 + + + Open Sale + + src/app/pages/collection/pages/upsert/upsert.page.html + 545 + + 开放销售 + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 551 + + 任何人都可以访问这个专辑。 + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 563 + + 只有空间守护者才能访问。 + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 576 + + 只有空间成员可以访问。 + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 589 + + 只有拥有徽章的空间成员才能访问。 + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 607 + + 专辑选项 + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 625 + + 每位成员只能有一个 NFT + + + Select collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 650 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 147 + + + src/app/pages/nft/pages/new/single/single.page.html + 361 + + 选择专辑 + + + Select award + + src/app/pages/collection/pages/upsert/upsert.page.html + 669 + + 选择奖项 + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 691,692 + + 创建专辑 + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 704,705 + + 保存专辑 + + + Check out collection + + src/app/pages/collection/services/helper.service.ts + 68 + + 专辑结算 + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 5 + + 待处理的会员申请 + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 16 + + 您的空间 + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 32,33 + + 暂无空间 + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 41,42 + + 探索空间 + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 56 + + 有效奖励 + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 68 + + 现行提案 + + + Spaces + + src/app/pages/discover/pages/awards/awards.page.html + 115,114 + + + src/app/pages/discover/pages/discover/discover.page.ts + 9 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 115,114 + + + src/app/pages/market/pages/collections/collections.page.html + 146,145 + + + src/app/pages/member/pages/member/member.page.ts + 65 + + 空间 + + + Discover - Awards + + src/app/pages/discover/pages/awards/awards.page.ts + 58 + + 发现——奖励 + + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/discover/pages/awards/awards.page.ts + 59 + + 探索DAO社区参与和发展的最佳方法。奖励、无手续费投票、1键设置。今天就加入吧。 + + + Awards + + src/app/pages/discover/pages/discover/discover.page.ts + 10 + + + src/app/pages/member/pages/member/member.page.ts + 64 + + + src/app/pages/space/pages/space/space.page.ts + 47 + + 奖项 + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 11 + + + src/app/pages/space/pages/space/space.page.ts + 46 + + 提案 + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 12 + + + src/app/pages/space/pages/space/space.page.ts + 48 + + 成员 + + + Discover - Members + + src/app/pages/discover/pages/members/members.page.ts + 51 + + 发现 - 成员 + + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + src/app/pages/discover/pages/members/members.page.ts + 52 + + 成为加密货币中最有活力和发展最快的社区的一份子。您只需使用Metamask几秒钟就可以加入。 + + + Discover - Proposals + + src/app/pages/discover/pages/proposals/proposals.page.ts + 57 + + 发现 - 提案 + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + src/app/pages/discover/pages/proposals/proposals.page.ts + 58 + + 创建提案并投票,帮助塑造DAO和metaverse的未来。只需1次点击即可完成设置。今天就加入吧。 + + + Discover - Spaces + + src/app/pages/discover/pages/spaces/spaces.page.ts + 54 + + 发现 - 空间 + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/discover/pages/spaces/spaces.page.ts + 55 + + 您可以在几分钟内通过我们的一键式创建Dao的工具来完成注册,链上投票也是免费的,在Soonaverse您可以发现各种奇妙的Dao。 + + + Sale type + + src/app/pages/market/pages/collections/collections.page.html + 115 + + 销售类型 + + + Collections - NFT + + src/app/pages/market/pages/collections/collections.page.ts + 68 + + 专辑 - NFT + + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + src/app/pages/market/pages/collections/collections.page.ts + 69 + + 一个完全免费的Non-Fungible Tokens(NFTs),数字收藏品、数字艺术、所有权等的市场。 + + + NFT Collections + + src/app/pages/market/pages/market/market.page.html + 2 + + 专辑 + + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/market/pages/market/market.page.html + 11,13 + + 有些专辑可能还没有迁移到去中心化的网络。请确保您知道您在购买什么。 + + + I understand + + src/app/pages/market/pages/market/market.page.html + 22,23 + + + src/app/pages/member/pages/tokens/tokens.page.html + 43,44 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 22,23 + + 我已知悉 + + + Collections + + src/app/pages/market/pages/market/market.page.ts + 12 + + + src/app/pages/market/pages/market/market.page.ts + 33 + + + src/app/pages/space/pages/space/space.page.ts + 45 + + 专辑 + + + Total staked + + src/app/pages/member/pages/activity/activity.page.html + 17,18 + + 质押总数 + + + Staking Value: + + src/app/pages/member/pages/activity/activity.page.html + 29,39 + + 质押价值: + + + Claimable Reward + + src/app/pages/member/pages/activity/activity.page.html + 47,48 + + 可认领奖励 + + + Stake more + + src/app/pages/member/pages/activity/activity.page.html + 104,105 + + 质押更多 + + + Stake + + src/app/pages/member/pages/activity/activity.page.html + 107,108 + + 质押 + + + My Staking + + src/app/pages/member/pages/activity/activity.page.html + 133 + + 我的质押 + + + until + + src/app/pages/member/pages/activity/activity.page.html + 138 + + + + + My Favourites + + src/app/pages/member/pages/activity/activity.page.html + 152 + + 我的收藏 + + + View All + + src/app/pages/member/pages/activity/activity.page.html + 155 + + 查看全部 + + + Profile Options + + src/app/pages/member/pages/activity/activity.page.html + 172 + + 个人资料选项 + + + Edit Profile + + src/app/pages/member/pages/activity/activity.page.html + 185 + + 编辑个人资料 + + + Manage Addresses + + src/app/pages/member/pages/activity/activity.page.html + 191 + + + src/app/pages/space/pages/manage/manage.page.html + 27 + + 管理地址 + + + Export All Transactions + + src/app/pages/member/pages/activity/activity.page.html + 202 + + 导出所有交易 + + + Request Verification + + src/app/pages/member/pages/activity/activity.page.html + 227 + + + src/app/pages/space/pages/manage/manage.page.html + 85 + + 请求验证 + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + 待处理 + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 18,19 + + 已颁发 + + + No Awards + + src/app/pages/member/pages/awards/awards.page.html + 34,35 + + + src/app/pages/space/pages/awards/awards.page.html + 63,64 + + 暂无奖项 + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 44,45 + + 探索奖项 + + + Reputation + + src/app/pages/member/pages/badges/badges.page.html + 2 + + + src/app/pages/member/pages/member/member.page.ts + 63 + + 声望 + + + Spaces + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + 空间 + + + Awards + + src/app/pages/member/pages/badges/badges.page.html + 27,28 + + 奖项 + + + Total Rewards + + src/app/pages/member/pages/badges/badges.page.html + 33,34 + + 总奖励 + + + My profile + + src/app/pages/member/pages/member/member.page.html + 13 + + 个人资料 + + + Profile + + src/app/pages/member/pages/member/member.page.html + 15 + + 个人资料 + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 27,28 + + 资料信息 + + + Joined + + src/app/pages/member/pages/member/member.page.html + 49 + + 已加入 + + + Member - + + src/app/pages/member/pages/member/member.page.ts + 83 + + 成员 - + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 145 + + 活动 + + + Transactions + + src/app/pages/member/pages/member/member.page.ts + 147 + + + src/app/pages/member/pages/transactions/transactions.page.html + 18 + + 交易 + + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + src/app/pages/member/pages/nfts/nfts.page.html + 25,26 + + 将NFT从其他网络带到Soonaverse,并解锁它的交易选项。 + + + Deposit NFT + + src/app/pages/member/pages/nfts/nfts.page.html + 29,30 + + 存入NFT + + + No NFTs + + src/app/pages/member/pages/nfts/nfts.page.html + 59,60 + + + src/app/pages/nft/pages/nft/nft.page.html + 744,745 + + 没有 NFT + + + Tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 11,12 + + 代币 + + + Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 20,21 + + 质押 + + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + src/app/pages/member/pages/tokens/tokens.page.html + 32,34 + + 此处您只能找到能被申领或还没铸造的代币。已铸造的代币只会出现在你对应的Firefly或Tanglepay钱包中。 + + + Item + + src/app/pages/member/pages/tokens/tokens.page.html + 57 + + + src/app/pages/member/pages/tokens/tokens.page.html + 324 + + + src/app/pages/member/pages/transactions/transactions.page.html + 23 + + 商品 + + + Total + + src/app/pages/member/pages/tokens/tokens.page.html + 59 + + + src/app/pages/token/pages/trade/trade.page.html + 204 + + + src/app/pages/token/pages/trade/trade.page.html + 278 + + + src/app/pages/token/pages/trade/trade.page.html + 367 + + + src/app/pages/token/pages/trade/trade.page.html + 668 + + 总共 + + + Owned + + src/app/pages/member/pages/tokens/tokens.page.html + 87 + + + src/app/pages/member/pages/tokens/tokens.page.html + 170 + + + src/app/pages/nft/pages/nft/nft.page.html + 17 + + 已拥有 + + + Airdropped + + src/app/pages/member/pages/tokens/tokens.page.html + 118 + + + src/app/pages/member/pages/tokens/tokens.page.html + 172 + + 已空投 + + + from + + src/app/pages/member/pages/tokens/tokens.page.html + 120 + + + + + Deposit for purchase + + src/app/pages/member/pages/tokens/tokens.page.html + 215 + + 存款以买入 + + + No tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 258,259 + + 暂无代币 + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 297 + + 生效的质押 + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 300 + + 失效的预约 + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 307,308 + + 生效的质押 + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 310,311 + + 失效的质押 + + + Staked From + + src/app/pages/member/pages/tokens/tokens.page.html + 326 + + 质押开始于 + + + Staked Until + + src/app/pages/member/pages/tokens/tokens.page.html + 327 + + 质押结束至 + + + Multiplier + + src/app/pages/member/pages/tokens/tokens.page.html + 329 + + 倍数 + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 330 + + 质押价值 + + + Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 380 + + 质押 + + + No Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 403,404 + + 暂无质押 + + + Staked from - to + + src/app/pages/member/pages/tokens/tokens.page.html + 432,433 + + 质押周期 + + + Amount (Multiplier) + + src/app/pages/member/pages/tokens/tokens.page.html + 445,446 + + 数量 (倍数) + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 457,458 + + 质押价值 + + + Claim + + src/app/pages/member/pages/tokens/tokens.page.ts + 57 + + 认领 + + + Refund + + src/app/pages/member/pages/tokens/tokens.page.ts + 58 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 19 + + 退款 + + + Export CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 9 + + 导出 CSV + + + Exporting CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 13 + + 正在导出 CSV + + + No transactions + + src/app/pages/member/pages/transactions/transactions.page.html + 120,121 + + 无交易 + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 40 + + 一些文件尚未上传 + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 51,52 + + 请仅使用 a-z, A-Z, _, -, 0-9 等字符。 + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + 已上传的 CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 67 + + 有些 NFT 有错误! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 73 + + 文件名 + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 101 + + 错误 + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 160 + + 上传现有的 CSV + + + Upload back once you generate below + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 162 + + 一旦您在下面生成,请上传回来。 + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 193,194 + + 您必须先上传图片。 + + + Generate CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 211 + + 生成 CSV + + + Publish NFTs + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 212 + + 发布 NFT + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 224,225 + + 要创建多个经典型 NFT,您必须使用 Web 版本的 Soonaverse。 + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + 单个 + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + 多个 + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14 + + NFT 信息 + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16 + + 名称和描述将包含在 NFT 上。 + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 22 + + 名称是必填项。 + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 34 + + + src/app/pages/proposal/pages/new/new.page.html + 77 + + 描述是必填项。 + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 53 + + 时间将根据用户所在的时区进行显示。对于生成型的 NFT 和SFT ,价格是按专辑设置的,不能在这里更改。 + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 92 + + 属性将在您的商品下方显示。 + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 102 + + 属性名称 (例如:Character) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 103 + + 值 (例如: Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 115 + + + src/app/pages/nft/pages/new/single/single.page.html + 151 + + + src/app/pages/nft/pages/new/single/single.page.html + 158 + + 属性名称 + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 126,125 + + + src/app/pages/nft/pages/new/single/single.page.html + 163 + + + src/app/pages/nft/pages/new/single/single.page.html + 171,170 + + + src/app/pages/nft/pages/new/single/single.page.html + 228,227 + + + src/app/pages/nft/pages/new/single/single.page.html + 266 + + + src/app/pages/nft/pages/new/single/single.page.html + 272,271 + + + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 142 + + 属性 + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 185 + + 添加属性 + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 194 + + 数据将在您的商品下方显示。 + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + 数据名称(譬如:Stamina) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 205 + + 数值(例如, 10, 1/10 , 等) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 217 + + + src/app/pages/nft/pages/new/single/single.page.html + 254 + + + src/app/pages/nft/pages/new/single/single.page.html + 261 + + 数据名称 + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 245 + + 数据 + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287 + + 新增数据 + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 303 + + 上传您的 NFT 图像。支持的文件类型:PNG,JPEG,WEBP,MP4,最大尺寸:100 MB。 + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 333 + + 媒体文件是必需的。 + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 348 + + 选择要显示此 NFT 的一个专辑。 + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 383,384 + + 新建 NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 393,394 + + 预览 NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 168 + + 文件名 无效。 + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 7 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 48 + + + src/app/pages/nft/pages/nft/nft.page.html + 516 + + Nft 结算 + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 109 + + 当前最高出价 + + + remaining + + src/app/pages/nft/pages/nft/nft.page.html + 155 + + 剩余 + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 165 + + 销售已结束 + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 173 + + 销售尚未开始 + + + NFT is pending other member's transaction + + src/app/pages/nft/pages/nft/nft.page.html + 181 + + NFT 正在等待其他成员的交易 + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 190 + + 待批准的专辑 + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 198 + + 专辑被驳回! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 213 + + 出售NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 218 + + 变更一口价 + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 223 + + 变更拍卖 + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 240,241 + + 出价 + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 263,264 + + 立即购买 + + + Bidding + + src/app/pages/nft/pages/nft/nft.page.html + 281 + + 竞标 + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 290 + + 当前出价 + + + Past bids + + src/app/pages/nft/pages/nft/nft.page.html + 298 + + 以往出价 + + + My biddings + + src/app/pages/nft/pages/nft/nft.page.html + 307 + + 我的出价 + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 321 + + 成员 + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 322 + + 出价于 + + + There are no current bids + + src/app/pages/nft/pages/nft/nft.page.html + 369,370 + + 目前没有出价 + + + There are no past bids + + src/app/pages/nft/pages/nft/nft.page.html + 419,420 + + 没有过去的出价 + + + There are no records. + + src/app/pages/nft/pages/nft/nft.page.html + 469,470 + + 没有记录 + + + Withdraw NFT + + src/app/pages/nft/pages/nft/nft.page.html + 509,510 + + 提取NFT + + + History + + src/app/pages/nft/pages/nft/nft.page.html + 522 + + 历史记录 + + + Minting in Progress + + src/app/pages/nft/pages/nft/nft.page.html + 556 + + 正在铸造... + + + Available for specific Member Only + + src/app/pages/nft/pages/nft/nft.page.html + 619 + + 仅限特定成员 + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 647 + + 在 Tangle 上查看此 NFT 的所有交易详细信息 + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 685 + + 专辑介绍 + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 694 + + 显示 + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 695 + + 专辑 + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 707,706 + + + + + Are you sure you want to withdraw NFT from Soonaverse? + + src/app/pages/nft/pages/nft/nft.page.html + 800 + + 您确定要从soonaverse中提取出NFT吗? + + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + src/app/pages/nft/pages/nft/nft.page.html + 802 + + 一旦NFT被提取,它将不能在Soonaverse中流通,它将只出现在你的Firefly钱包中。你可以在以后将NFT存回Soonaverse。 + + + Confirm with Metamask + + src/app/pages/nft/pages/nft/nft.page.html + 804 + + 用Metamask 确认 + + + View + + src/app/pages/nft/pages/nft/nft.page.ts + 82 + + 查看 + + + NFT Withdrawn. + + src/app/pages/nft/pages/nft/nft.page.ts + 688 + + NFT 已提取 + + + Oops, it's in another universe + + src/app/pages/nft/pages/not-found/not-found.page.html + 8 + + 糟糕,它在这个宇宙没有踪影.... + + + NFT you are looking for no longer exists on Soonaverse. + + src/app/pages/nft/pages/not-found/not-found.page.html + 12,14 + + 你要找的NFT在Soonaverse上已经不存在了。 + + + Back to Marketplace + + src/app/pages/nft/pages/not-found/not-found.page.html + 22,24 + + 返回市场 + + + Auction Starts + + src/app/pages/nft/services/helper.service.ts + 145 + + 拍卖开始 + + + Auction Ends + + src/app/pages/nft/services/helper.service.ts + 148 + + 拍卖结束 + + + Pool by + + src/app/pages/pool/pages/market/pool.page.html + 3,12 + + 池子 by + + + What is Pool? + + src/app/pages/pool/pages/market/pool.page.html + 20,21 + + 什么是池? + + + Anyone can become a liquidity provider (LP) by depositing an equivalent value of each underlying token in return for pool tokens. These tokens track pro-rata LP shares of the total reserves, and can be redeemed for the underlying assets at any time. + + src/app/pages/pool/pages/market/pool.page.html + 23,26 + + 任何人都可以成为流动性提供者(LP),通过存入每个基础代币的同等价值来换取池子里的代币。这些代币跟踪总储备中按比例的LP份额,并可以在任何时候赎回基础资产。 + + + Coming SOON + + src/app/pages/pool/pages/market/pool.page.html + 35 + + + src/app/pages/swap/pages/market/swap.page.html + 35 + + 即将推出 + + + See Pool on iotabee + + src/app/pages/pool/pages/market/pool.page.html + 37,39 + + 在 iotabee 上查看池 + + + What is iotabee? + + src/app/pages/pool/pages/market/pool.page.html + 49 + + + src/app/pages/swap/pages/market/swap.page.html + 49 + + 什么是iotabee? + + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + src/app/pages/pool/pages/market/pool.page.html + 51,54 + + + src/app/pages/swap/pages/market/swap.page.html + 51,54 + + Iotabee是一种去中心化的点对点的DEX协议和半去中心化的跨链SWAP的组合,人们可以用来在IOTA, Shimmer EVM 和其他EVM 链,如BSC上创建流动性和交易代币。 + + + iotabee.com + + src/app/pages/pool/pages/market/pool.page.html + 61,62 + + + src/app/pages/swap/pages/market/swap.page.html + 61,62 + + iotabee.com + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2 + + 新的提案 + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 3 + + 提案信息 + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19 + + 标题和说明将包含在提案中。开始日期和结束日期决定提案的持续时间。 + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 39 + + + src/app/pages/proposal/pages/new/new.page.html + 50,49 + + 开始 + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 40 + + 开始日期是必填的。 + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 93 + + 提问信息 + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 95 + + 标题和描述将只显示于此提问。 + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 104 + + 问题标题是必填项。 + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 143 + + 每个回答的文本和描述。 + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 157 + + 答案内容是必填项。 + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 192 + + 添加选择 + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 207 + + 这是列出提案的空间。 + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 259 + + 提案设置 + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 261 + + 定义谁有权使用提案以及表决方法 + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 269 + + 目标参与者 + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 276 + + 所有守护者 + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 283 + + 只有守护者可对此提案进行表决 + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 289 + + 所有成员 + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 296 + + 所有成员都可以对此提案进行投票 + + + Space's Native Token + + src/app/pages/proposal/pages/new/new.page.html + 302 + + + src/app/pages/proposal/services/helper.service.ts + 23 + + 空间原生代币 + + + You must have minted token linked to your space first! + + src/app/pages/proposal/pages/new/new.page.html + 313 + + 首先你必须已经铸造了连接到你空间的代币! + + + All token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 321 + + 所有代币持有者都可以投票。 + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 343,344 + + 创建提案 + + + Proposal - New + + src/app/pages/proposal/pages/new/new.page.ts + 136 + + + src/app/pages/proposal/pages/new/new.page.ts + 151 + + 提案 - 新增 + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + src/app/pages/proposal/pages/new/new.page.ts + 137 + + + src/app/pages/proposal/pages/new/new.page.ts + 152 + + 创建并投票表决有助于塑造DAO和metaverse的未来的提案。即时的一键式设置。今天就加入。 + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 321 + + 选择 + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 328 + + 奖章 + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 332 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 5 + + 最终结果 + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 74 + + 提案描述 + + + Proposal - + + src/app/pages/proposal/pages/overview/overview.page.ts + 59 + + 提案 - + + + Change Vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 23,24 + + Change Vote + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 26,27 + + Vote Now + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 38 + + 投票开始 + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 51 + + 你不能参与投票。 + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 55 + + 为了投票,您必须在提案创建前加入空间。 + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 64 + + 登录进行投票 + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 68 + + 您必须先登录才能投票。 + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 79 + + 等待守护者批准 + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 83 + + 这项提案尚未获得任何守护者的批准。 + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 102 + + 权重 + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 48 + + 未决投票 + + + Voted + + src/app/pages/proposal/pages/participants/participants.page.ts + 49 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 156 + + 已投票 + + + Proposal - Participants + + src/app/pages/proposal/pages/participants/participants.page.ts + 83 + + 提议——参与者 + + + See all participants within the proposal + + src/app/pages/proposal/pages/participants/participants.page.ts + 84 + + 查看提案的所有参与者 + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 151 + + 加入soonaverse于 + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 12,13 + + 批准 + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 23,24 + + 拒绝 + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 67 + + 提案投票方法 + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 75 + + 本提案中所有参与者的总权重 + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 22 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 22 + + 当前里程碑 + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 23 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 23 + + 开始日期 + + + Voting Type + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 26 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 26 + + 投票方式 + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 27 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 27 + + 总权重 + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 79 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 152 + + 查看提案 + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 87 + + 当前结果 + + + (weight: ) + + src/app/pages/proposal/pages/proposal/proposal.page.html + 101,102 + + (weight: ) + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 124 + + 选定的奖章 + + + Votes + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 42 + + 票数 + + + Voter + + src/app/pages/proposal/pages/votes/votes.page.html + 14 + + 投票者 + + + Option (Weight) + + src/app/pages/proposal/pages/votes/votes.page.html + 16 + + 选项 (权重) + + + Expired On + + src/app/pages/proposal/pages/votes/votes.page.html + 18 + + 失效日期 + + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + src/app/pages/proposal/pages/votes/votes.page.html + 24 + + 一旦退还的代币输出被消耗,你的投票就会过期,并按比例进行加权。你将不得不再次投票来投你的票 + + + One Member One Vote + + src/app/pages/proposal/services/helper.service.ts + 25 + + 一个成员一票 + + + XP Reputation - Space + + src/app/pages/proposal/services/helper.service.ts + 27 + + XP 声望值 - 空间 + + + XP Reputation - Selected Badges + + src/app/pages/proposal/services/helper.service.ts + 29 + + XP 声望值 - 选定的徽章 + + + Staking + + src/app/pages/soon-staking/pages/staking/staking.page.html + 3,4 + + 质押 + + + How much I earn? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 13 + + 我能赚多少? + + + How it works? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 135 + + 工作原理 + + + Stake your tokens to earn rewards and unlock new features. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 137,139 + + 将您的 代币用于获得奖励并解锁新功能。 + + + Unique Perks for stakers + + src/app/pages/soon-staking/pages/staking/staking.page.html + 160 + + 质押者特权 + + + Rewards + + src/app/pages/soon-staking/pages/staking/staking.page.html + 167,168 + + 奖励 + + + Trading Bonuses + + src/app/pages/soon-staking/pages/staking/staking.page.html + 180 + + 交易优惠 + + + Unique Features + + src/app/pages/soon-staking/pages/staking/staking.page.html + 193 + + 独特功能 + + + Earn more er than you think + + src/app/pages/soon-staking/pages/staking/staking.page.html + 209 + + 赚取更多 超过你预期 + + + The more you hold, the more rewards you get. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 214,215 + + 你持有 越多, 你获得的奖励也越多. + + + New + + src/app/pages/space/pages/awards/awards.page.html + 43 + + + src/app/pages/space/pages/collections/collections.page.html + 48 + + + src/app/pages/space/pages/proposals/proposals.page.html + 42 + + 新的 + + + award + + src/app/pages/space/pages/awards/awards.page.html + 44 + + 奖项 + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 31 + + + src/app/pages/space/pages/members/members.page.html + 45 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 31 + + 进行中的 + + + Space - Awards + + src/app/pages/space/pages/awards/awards.page.ts + 54 + + 空间 - 奖项 + + + Space's awards + + src/app/pages/space/pages/awards/awards.page.ts + 55 + + 空间奖项 + + + No Collections + + src/app/pages/space/pages/collections/collections.page.html + 69,70 + + 暂无专辑 + + + Space - Collections + + src/app/pages/space/pages/collections/collections.page.ts + 65 + + 空间 - 合集 + + + Space's collections + + src/app/pages/space/pages/collections/collections.page.ts + 66 + + 空间合集 + + + Space Options + + src/app/pages/space/pages/manage/manage.page.html + 2 + + 空间选项 + + + Token Options + + src/app/pages/space/pages/manage/manage.page.html + 6 + + 代币选项 + + + Edit Space + + src/app/pages/space/pages/manage/manage.page.html + 21 + + 编辑空间 + + + Manage Guardians + + src/app/pages/space/pages/manage/manage.page.html + 38 + + 管理守护者 + + + Export Current Members + + src/app/pages/space/pages/manage/manage.page.html + 44 + + 导出当前成员 + + + Create New Award + + src/app/pages/space/pages/manage/manage.page.html + 57 + + 创建新奖励 + + + Create New Proposal + + src/app/pages/space/pages/manage/manage.page.html + 68 + + 创建新提案 + + + Create New Collection + + src/app/pages/space/pages/manage/manage.page.html + 79 + + 创建新专辑 + + + Edit Token + + src/app/pages/space/pages/manage/manage.page.html + 105 + + 编辑代币 + + + Create Airdrop + + src/app/pages/space/pages/manage/manage.page.html + 127 + + 创建空投 + + + Staking Reward Schedule + + src/app/pages/space/pages/manage/manage.page.html + 135 + + 质押奖励计划 + + + Export Current Stakers + + src/app/pages/space/pages/manage/manage.page.html + 141 + + 导出当前质押者 + + + Active + + src/app/pages/space/pages/members/members.page.html + 18,19 + + 进行中的 + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 35,36 + + 已屏蔽 + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 52 + + 已屏蔽 + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 67 + + + src/app/pages/space/pages/members/members.page.html + 82 + + 查找成员 + + + No Members + + src/app/pages/space/pages/members/members.page.html + 110,111 + + 暂无成员 + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 118 + + 加入空间于 + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 161,162 + + 移除守护者 + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 174,175 + + 设置为守护者 + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 184,185 + + 屏蔽成员 + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 187,188 + + 接受成员 + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 190,191 + + 解除屏蔽会员 + + + Space - Members + + src/app/pages/space/pages/members/members.page.ts + 76 + + 空间 - 成员 + + + Space's members + + src/app/pages/space/pages/members/members.page.ts + 77 + + 空间成员 + + + Upcoming Sale + + src/app/pages/space/pages/overview/overview.page.html + 7 + + 即将进行的销售 + + + Live Token Sale + + src/app/pages/space/pages/overview/overview.page.html + 9 + + 实时代币销售 + + + Space - + + src/app/pages/space/pages/overview/overview.page.ts + 55 + + 空间 - + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 43 + + 提案 + + + No Proposals + + src/app/pages/space/pages/proposals/proposals.page.html + 62,63 + + 暂无提案 + + + Space - Proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 54 + + 空间 - 提案 + + + Space's proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 55 + + 空间提案 + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 34 + + 查看空间 + + + pending + + src/app/pages/space/pages/space/space-about/space-about.component.html + 153 + + 待处理 + + + Export members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 168 + + 导出成员 + + + Exporting members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 172 + + 导出成员 + + + Open to join instantly + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + 开放可即时加入 + + + Requires approval to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 183 + + 加入需要批准 + + + Requires + + src/app/pages/space/pages/space/space-about/space-about.component.html + 187 + + 需要 + + + staked value to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 193 + + 加入的质押价值 + + + Related Links + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 92 + + 相关链接 + + + Claim ownership + + src/app/pages/space/pages/space/space-about/space-about.component.html + 259,260 + + 认领所有权 + + + Space's Wallet Addresses + + src/app/pages/space/pages/space/space-about/space-about.component.html + 290 + + 空间钱包地址 + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 321 + + 退出空间 + + + About space + + src/app/pages/space/pages/space/space.page.html + 3 + + 关于空间 + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 55,56 + + + src/app/pages/space/pages/space/space.page.html + 118,119 + + 加入空间 + + + Pending Request + + src/app/pages/space/pages/space/space.page.html + 68 + + + src/app/pages/space/pages/space/space.page.html + 131 + + 待处理请求 + + + Ask to join Space + + src/app/pages/space/pages/space/space.page.html + 70 + + + src/app/pages/space/pages/space/space.page.html + 133 + + 请求加入空间 + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 82,83 + + + src/app/pages/space/pages/space/space.page.html + 160,161 + + 编辑空间 + + + Stake + + src/app/pages/space/pages/space/space.page.html + 144 + + 质押 + + + to Join + + src/app/pages/space/pages/space/space.page.html + 147 + + 加入 + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2 + + 新增空间 + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3 + + 编辑空间 + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17 + + 空间信息 + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19 + + 标题和描述将显示在空间上。 + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 56 + + 链接将显示在空间详情上。为Github、Twitter和Discord(name#id) 链接使用账户用户名。 + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 97 + + 仅支持Discord 邀请码 (例如:RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 104 + + 输入您的 Discord 邀请码 + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 125 + + 空间类型 + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 127 + + 每种类型都有不同的特点。 + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 137,138 + + 任何人都可立即加入 + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 142 + + 需要一个成员批准 + + + Requires stake value (in space's token) + + src/app/pages/space/pages/upsert/upsert.page.html + 146 + + 需要质押价值(空间代币) + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 174 + + 头像是必须的 + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 243,244 + + 创建空间 + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 256,257 + + 保存空间 + + + Space - New + + src/app/pages/space/pages/upsert/upsert.page.ts + 76 + + 空间 - 新建 + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/space/pages/upsert/upsert.page.ts + 77 + + 您可以在几分钟内通过我们的一键式创建Dao的工具来完成注册,链上投票也是免费的,在Soonaverse您可以发现各种奇妙的Dao。 + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 210 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 216 + + 上传新版以替换现有版本。 + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 211 + + 您的品牌是关键的。 + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 217 + + 使它成为个人的。 + + + Swap by + + src/app/pages/swap/pages/market/swap.page.html + 3,12 + + 交换 + + + What is Swap? + + src/app/pages/swap/pages/market/swap.page.html + 20,21 + + 什么是 Swap 互换? + + + See Swap on iotabee + + src/app/pages/swap/pages/market/swap.page.html + 37,39 + + 在 iotabe 上查看SWAP + + + Create airdrop + + src/app/pages/token/pages/airdrops/airdrops.page.html + 8,9 + + 创建空投 + + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/pages/token/pages/airdrops/airdrops.page.html + 17,19 + + 你可以为你的会员创建一个治理令牌空投。要做到这一点,请上传一个包含用户地址和分配细节的.csv文件。 + + + Some rows have been removed + + src/app/pages/token/pages/airdrops/airdrops.page.html + 92 + + 某些行已经被移除 + + + Submit airdrop + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 118,119 + + 提交空投 + + + + row is not valid + + src/app/pages/token/pages/airdrops/airdrops.page.ts + 73 + + 此行无效 + + + Breakdown + + src/app/pages/token/pages/metrics/metrics.page.html + 1 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 284 + + 分解 + + + Token distribution + + src/app/pages/token/pages/metrics/metrics.page.html + 5 + + 代币分配 + + + Total token supply + + src/app/pages/token/pages/metrics/metrics.page.ts + 56 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 96 + + 代币总供应量 + + + Launchpad price per token + + src/app/pages/token/pages/metrics/metrics.page.ts + 67 + + 启动板代币价格 + + + Initial Cap + + src/app/pages/token/pages/metrics/metrics.page.ts + 74 + + 初始市值 + + + Total melted tokens + + src/app/pages/token/pages/metrics/metrics.page.ts + 82 + + 全部熔化代币 + + + You can create only ONE token per space and it can never be changed. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 14,15 + + 你在每个空间只能创建一个令牌,而且永远不能改变。 + + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 23,26 + + 在Soonaverse创建代币的重要信息:如果您想在Soonaverse交易所进行公开销售或上架您的代币,请阅读说明并填写本屏幕上的申请表格。 + + + Continue + + src/app/pages/token/pages/new/introduction/introduction.component.html + 38,39 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 191,192 + + + src/app/pages/token/pages/new/overview/overview.component.html + 104,105 + + 继续 + + + Token Sale Requirements + + src/app/pages/token/pages/new/introduction/introduction.component.html + 50 + + 代币销售要求 + + + To create a public sale or use the Token Exchange you must complete our KYC process. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 52 + + 要创建一个公开销售或使用代币交易所,请填写以下表格,以开始我们的KYC程序。 + + + Begin Process + + src/app/pages/token/pages/new/introduction/introduction.component.html + 58 + + 开始流程 + + + Continue + + + src/app/pages/token/pages/new/introduction/introduction.component.html + 73,74 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 330,331 + + + src/app/pages/token/pages/new/overview/overview.component.html + 214,215 + + 继续 + + + + Token info + + src/app/pages/token/pages/new/metrics/metrics.component.html + 9 + + + src/app/pages/token/pages/new/summary/summary.component.html + 14 + + + src/app/pages/token/pages/token/token.page.html + 3 + + 代币信息 + + + Name is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 16 + + 名称无效。 + + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + src/app/pages/token/pages/new/metrics/metrics.component.html + 33 + + 符号无效(长度必须是 3 - 5, 字母必须是 A-Z)。 + + + Token supply + + src/app/pages/token/pages/new/metrics/metrics.component.html + 47 + + + src/app/pages/token/pages/new/summary/summary.component.html + 53 + + 代币供应 + + + Price per token (MIOTA) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 53 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 58 + + 代币单价 (MIOTA) + + + Price is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 54 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 38 + + 价格无效。 + + + Total token supply (up to 6 decimals are supported) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 68 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 74 + + 总代币供应量(最多支持6位小数) + + + Total supply is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 69 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 107 + + 总供应量无效。 + + + Allocation title + + src/app/pages/token/pages/new/metrics/metrics.component.html + 111 + + 分配标题 + + + % of tokens for sale + + src/app/pages/token/pages/new/metrics/metrics.component.html + 121 + + 待销售代币的百分比 + + + Percentage of tokens is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 122 + + 代币的百分比无效。 + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 126 + + 用于销售的代币百分比(默认100%) + + + Only 1 of the allocations can be public + + src/app/pages/token/pages/new/metrics/metrics.component.html + 149 + + 只有一个分配可以是公开的 + + + Sum of the percentages must be 100 + + src/app/pages/token/pages/new/metrics/metrics.component.html + 155 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 166 + + 百分比的总和必须是 100 + + + Invalid sum of percentages + + src/app/pages/token/pages/new/metrics/metrics.component.html + 160 + + 百分比的合计无效 + + + Add allocation + + src/app/pages/token/pages/new/metrics/metrics.component.html + 179 + + 添加分配 + + + Token icon + + src/app/pages/token/pages/new/metrics/metrics.component.html + 221 + + + src/app/pages/token/pages/new/summary/summary.component.html + 265 + + 代币图标 + + + (Recomended size: 400 x 400px) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 223 + + (建议尺寸:400 x 400px) + + + Icon is mandatory + + src/app/pages/token/pages/new/metrics/metrics.component.html + 232 + + 图标是必须的 + + + Token price + + src/app/pages/token/pages/new/metrics/metrics.component.html + 264 + + + src/app/pages/token/pages/new/summary/summary.component.html + 283 + + 代币价格 + + + Distribution of the token happens after the token offering end date. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 266 + + + src/app/pages/token/pages/new/summary/summary.component.html + 285 + + 代币的分发将在代币发行结束日期之后。 + + + Configure the token supply first to see breakdown. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 288 + + 请先配置代币供应,才能查看明细。 + + + Token terms and conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 298 + + + src/app/pages/token/pages/new/summary/summary.component.html + 324 + + 代币的条款及细则 + + + Provide link for Terms and Conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 300 + + 提供条款和细则的链接 + + + Terms and Conditions link is invalid. (Start with http:// or https://) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 306 + + 条款和条件链接无效(以 http:// 或 https://开始) + + + Token allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 75 + + + src/app/pages/token/pages/new/summary/summary.component.html + 165 + + 代币分配 + + + Allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 76 + + + src/app/pages/token/pages/new/summary/summary.component.ts + 30 + + 分配 + + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 81,82 + + 请确保有一个市场分配作为公开销售,因为这以后可能会在Soonaverse销售。 + 一旦代币被创建和批准,你可以启动公开销售。 + + + Create token + + src/app/pages/token/pages/new/new.page.html + 2 + + 创建代币 + + + Introduction + + src/app/pages/token/pages/new/new.page.ts + 32 + + 介绍 + + + Metrics + + src/app/pages/token/pages/new/new.page.ts + 33 + + + src/app/pages/token/pages/token/token.page.ts + 38 + + 指标 + + + Summary + + src/app/pages/token/pages/new/new.page.ts + 35 + + 概要 + + + New Token + + src/app/pages/token/pages/new/new.page.ts + 72 + + 新建代币 + + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + src/app/pages/token/pages/new/new.page.ts + 73 + + 在安全、不收费的Shimmer网络上开始你自己的加密货币项目。今天就创建你的代币。 + + + Token description + + src/app/pages/token/pages/new/overview/overview.component.html + 12 + + + src/app/pages/token/pages/new/summary/summary.component.html + 93 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 6 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 27 + + 代币描述 + + + This text will be displayed on the main token page. + + src/app/pages/token/pages/new/overview/overview.component.html + 14 + + 这段文字将显示在代币的主页上。 + + + Title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 23 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 10 + + 名称无效。 + + + Description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 38 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 22 + + 描述无效。 + + + Short description + + src/app/pages/token/pages/new/overview/overview.component.html + 55 + + + src/app/pages/token/pages/new/summary/summary.component.html + 129 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 49 + + 简短描述 + + + Short description of the token which will be displayed on the token trading page. + + src/app/pages/token/pages/new/overview/overview.component.html + 57 + + 代币的简短描述,将显示在代币交易页面。 + + + Short title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 66 + + 简短标题无效。 + + + Short description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 81 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 68 + + 简短描述无效。 + + + Overview graphics + + src/app/pages/token/pages/new/overview/overview.component.html + 121 + + 概览图 + + + Token introductory video / image + + src/app/pages/token/pages/new/overview/overview.component.html + 123 + + 代币介绍视频/图像 + + + Introductionary media is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 132 + + 介绍性媒体无效。 + + + Invalid URL. (Start with http:// or https://) + + src/app/pages/token/pages/new/overview/overview.component.html + 168 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 84 + + 无效的网址(必须以“ http://”或“ https://”开头) + + + Add link + + src/app/pages/token/pages/new/overview/overview.component.html + 191 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 107 + + 添加链接 + + + Edit + + src/app/pages/token/pages/new/summary/summary.component.html + 22,23 + + + src/app/pages/token/pages/new/summary/summary.component.html + 61,62 + + + src/app/pages/token/pages/new/summary/summary.component.html + 101,102 + + + src/app/pages/token/pages/new/summary/summary.component.html + 137,138 + + + src/app/pages/token/pages/new/summary/summary.component.html + 173,174 + + 编辑 + + + Name + + src/app/pages/token/pages/new/summary/summary.component.html + 30,31 + + 名称 + + + Symbol + + src/app/pages/token/pages/new/summary/summary.component.html + 41,42 + + 符号 + + + Total token supply + + src/app/pages/token/pages/new/summary/summary.component.html + 80,81 + + 代币总供应量 + + + Description title + + src/app/pages/token/pages/new/summary/summary.component.html + 109,110 + + 标题描述 + + + Description + + src/app/pages/token/pages/new/summary/summary.component.html + 120,121 + + 描述 + + + Short description title + + src/app/pages/token/pages/new/summary/summary.component.html + 145,146 + + 简短描述的标题 + + + Short description + + src/app/pages/token/pages/new/summary/summary.component.html + 156,157 + + 简短描述 + + + Allocation title + + src/app/pages/token/pages/new/summary/summary.component.html + 187,188 + + 分配标题 + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/summary/summary.component.html + 198,199 + + 用于销售的代币的百分比 (默认100%) + + + Submit token + + src/app/pages/token/pages/new/summary/summary.component.html + 227,228 + + 提交代币 + + + (Recommended size: 400 x 400px) + + src/app/pages/token/pages/new/summary/summary.component.html + 267 + + (建议尺寸:400 x 400px) + + + Some description + + src/app/pages/token/pages/new/summary/summary.component.html + 326 + + 一些描述 + + + Terms&conditions + + src/app/pages/token/pages/new/summary/summary.component.html + 340 + + 条款及细则 + + + Submit token + + + src/app/pages/token/pages/new/summary/summary.component.html + 356,357 + + 提交代币 + + + + Trade token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 15,16 + + 交易代币 + + + Buy Tokens + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 28,29 + + 购买代币 + + + Schedule public sale + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 42,43 + + 预订公开销售 + + + Allow Trading + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 57,58 + + 允许交易 + + + Edit token info + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 86 + + 编辑代币信息 + + + Check out token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 100 + + 检查代币 + + + Mint & Approve Token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 132,133 + + Mint & Approve Token + + + Minting in progress + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 144,145 + + 正在铸造... + + + Token was not made available on decentralised network yet. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 150 + + 代币尚未在分散化网络上提供。 + + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 153,154 + + 代币尚未迁移到分散的网络。请确保您知道您在购买什么。 + + + Trading enabled. + + src/app/pages/token/pages/token/token-buy/token-buy.component.ts + 86 + + 交易已启用。 + + + Short description title is invalid. + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 56 + + 简短描述标题无效。 + + + Short description title + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 61 + + 简短描述的标题 + + + Short token description + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 73 + + 代币简短描述 + + + Sale Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 4 + + 销售信息 + + + Sale schedule + + src/app/pages/token/pages/token/token-info/token-info.component.html + 10 + + 销售计划 + + + During cooldown period you are able to trigger refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 41 + + 在冷静期,你能够提请退款。 + + + No Cooldown. Participants can't refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 75,76 + + 没有冷却期。参与者将无法退款。 + + + Token Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 80 + + + src/app/pages/token/pages/trade/trade.page.html + 57 + + + src/app/pages/token/pages/trade/trade.page.html + 624 + + 代币信息 + + + My purchased tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 4 + + 我购买的代币 + + + + + + + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 78,80 + + + + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 90,92 + + 代币销售目标已达!代币分配将得到公平的计算,超额部分将被退还。 + + + Your Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 21 + + 您的存款 + + + Potential Tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 22 + + 潜力代币 + + + Token Owned + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 23 + + 已拥有代币 + + + Total Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 24 + + 存款总额 + + + Total Participants + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 25 + + 参与总人数 + + + Sale ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 45 + + 销售结束于 + + + Cooldown in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 62 + + 冷静期中 + + + Sale in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 64 + + 正在销售 + + + Sale starts in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 69 + + 销售开始于 + + + Cooldown ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 73 + + 冷静期结束 + + + + + + + src/app/pages/token/pages/token/token.page.html + 47,48 + + + + + Airdrops + + src/app/pages/token/pages/token/token.page.ts + 41 + + 空投 + + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + src/app/pages/token/pages/token/token.page.ts + 100 + + + src/app/pages/token/pages/trade/trade.page.ts + 275 + + 在一个非托管的、安全的L1交易所购买、出售和交易SOON和Shimmer代币。几分钟就可以开始。今天就加入。 + + + Ongoing Sale + + src/app/pages/token/pages/token/token.page.ts + 248 + + 正在销售 + + + Scheduled + + src/app/pages/token/pages/token/token.page.ts + 250 + + 已排期 + + + Cooldown + + src/app/pages/token/pages/token/token.page.ts + 252 + + 冷静期 + + + Processing + + src/app/pages/token/pages/token/token.page.ts + 254 + + 正在处理 + + + Order book + + src/app/pages/token/pages/trade/trade.page.html + 94 + + + src/app/pages/token/pages/trade/trade.page.html + 644 + + 订单簿 + + + Token chart + + src/app/pages/token/pages/trade/trade.page.html + 102 + + + src/app/pages/token/pages/trade/trade.page.html + 795 + + 代币图表 + + + My trading + + src/app/pages/token/pages/trade/trade.page.html + 158 + + 我的交易 + + + Open buy orders + + src/app/pages/token/pages/trade/trade.page.html + 166 + + 打开购买订单 + + + Open sell orders + + src/app/pages/token/pages/trade/trade.page.html + 174 + + 开放销售订单 + + + Order history + + src/app/pages/token/pages/trade/trade.page.html + 182 + + 订单历史 + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 213 + + + src/app/pages/token/pages/trade/trade.page.html + 287 + + 已完成 + + + There are no buys + + src/app/pages/token/pages/trade/trade.page.html + 257,258 + + 没有买单 + + + Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 321,322 + + + src/app/pages/token/pages/trade/trade.page.html + 416,417 + + 已取消 + + + Expired + + src/app/pages/token/pages/trade/trade.page.html + 324,325 + + + src/app/pages/token/pages/trade/trade.page.html + 422,423 + + 已过期 + + + There are no sells + + src/app/pages/token/pages/trade/trade.page.html + 345,346 + + 没有卖单 + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 388 + + + src/app/pages/token/pages/trade/trade.page.html + 1213 + + 出售 + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 404,405 + + 已完成 + + + Partially Fulfilled / Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 410,411 + + 部分完成/取消 + + + Fulfilled / Cancelled (unfulfillable) + + src/app/pages/token/pages/trade/trade.page.html + 419,420 + + 已完成/已取消(未完成) + + + There is no order history + + src/app/pages/token/pages/trade/trade.page.html + 434,435 + + 没有订单历史记录 + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 477,478 + + + src/app/pages/token/pages/trade/trade.page.html + 488,489 + + + src/app/pages/token/pages/trade/trade.page.html + 919,920 + + 出售 + + + Available + + src/app/pages/token/pages/trade/trade.page.html + 530,531 + + 可购买 + + + Current Price + + src/app/pages/token/pages/trade/trade.page.html + 542 + + 当前价格 + + + Change 24h + + src/app/pages/token/pages/trade/trade.page.html + 564,565 + + 24小时变动 + + + ( ~ ) + + src/app/pages/token/pages/trade/trade.page.html + 729,732 + + ( ~ ) + + + current price + + src/app/pages/token/pages/trade/trade.page.html + 737,738 + + 当前价格 + + + There is no activity yet + + src/app/pages/token/pages/trade/trade.page.html + 788,789 + + 还没有任何活动 + + + Trade history + + src/app/pages/token/pages/trade/trade.page.html + 829,830 + + 交易历史 + + + There is no trade history + + src/app/pages/token/pages/trade/trade.page.html + 894,895 + + 没有订单历史记录 + + + You don’t have enough tokens + + src/app/pages/token/pages/trade/trade.page.html + 928 + + 您没有足够的代币 + + + Amount to + + src/app/pages/token/pages/trade/trade.page.html + 935,936 + + Amount to + + + Balance + + src/app/pages/token/pages/trade/trade.page.html + 979 + + 余额 + + + Set your price per 1 + + src/app/pages/token/pages/trade/trade.page.html + 998,1000 + + 设置您的价格每 1 + + + LIMIT PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1009,1010 + + 限定价格 + + + MARKET PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1017,1018 + + 市场价格 + + + ~ + + src/app/pages/token/pages/trade/trade.page.html + 1038,1041 + + + src/app/pages/token/pages/trade/trade.page.html + 1145,1148 + + ~ + + + Set Current Price + + src/app/pages/token/pages/trade/trade.page.html + 1069 + + 设置当前价格 + + + Set BID + + src/app/pages/token/pages/trade/trade.page.html + 1093,1104 + + Set BID + + + The bid price is the highest price that a particular buyer is willing to pay. + + src/app/pages/token/pages/trade/trade.page.html + 1100 + + 出价是某一买方愿意支付的最高价格。 + + + Set ASK + + src/app/pages/token/pages/trade/trade.page.html + 1109,1120 + + Set ASK + + + The asking price is the minimum price that an individual would be willing to sell their asset. + + src/app/pages/token/pages/trade/trade.page.html + 1116 + + 要价是指个人愿意出售其资产的最低价格。 + + + You will spend + + src/app/pages/token/pages/trade/trade.page.html + 1129,1130 + + 您将支出 + + + Minimum total has to be at least + + src/app/pages/token/pages/trade/trade.page.html + 1163 + + 最小总量必须至少为 + + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + src/app/pages/token/pages/trade/trade.page.html + 1179 + + Soonavsese金库收取销售额的2.5%,没有其他隐藏费用。购买代币是免费的。 + + + 1h + + src/app/pages/token/pages/trade/trade.page.ts + 118 + + 1 小时 + + + 4h + + src/app/pages/token/pages/trade/trade.page.ts + 119 + + 4 小时 + + + 1d + + src/app/pages/token/pages/trade/trade.page.ts + 120 + + 1 天 + + + 1w + + src/app/pages/token/pages/trade/trade.page.ts + 121 + + 1 周 + + + Bids + + src/app/pages/token/pages/trade/trade.page.ts + 563 + + 委买单 + + + Asks + + src/app/pages/token/pages/trade/trade.page.ts + 567 + + 卖出价 + + + Cancelled + + src/app/pages/token/services/helper.service.ts + 201 + + 已取消 + + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 42 + + 探索顶级Shimmer、IOTA和SOON加密货币。价格图表,加密货币简介,非托管的、安全的L1交易所! 今天就注册吧。 + + + Go to trading pairs to add your favourite tokens. + + src/app/pages/tokens/pages/favourites/favourites.page.html + 47,48 + + 前往交易对,添加你喜欢的代币。 + + + Add favourites + + src/app/pages/tokens/pages/favourites/favourites.page.html + 56,57 + + 添加收藏 + + + Tokens - Favourite + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 52 + + 代币 - 收藏 + + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 53 + + 购买、交易和保持您最喜欢的Shimmer, IOTA, 和 SOON 代币。我们的非保管、安全的L1交换已经准备好了!即刻注册。 + + + Tokens - Launchpad + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 41 + + 代币 - 启动板 + + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 42 + + 通过Soonaverse Launchpad筹集资金,建立你的追随者,增加你的受众,并推出你的Shimmer代币。今天就加入吧。 + + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/tokens/pages/tokens/tokens.page.html + 11,13 + + 有些代币可能尚未迁移到去中心化的网络。请确保您知道您在购买什么。 + + + Highlighted Token + + src/app/pages/tokens/pages/tokens/tokens.page.html + 49 + + 热门代币 + + + Favorites + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 17 + + 个人收藏 + + + All tokens + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 20 + + 所有代币 + + + Trading pairs + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 21 + + 交易对 + + + Launchpad + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 22 + + Launchpad + + + Tokens - Trading Pairs + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 43 + + 代币 - 交易对 + + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 44 + + Shimmer生态最完整的项目清单、SOON交易对和市场,非托管的安全的L1交易所。马上注册! + + + AuditOne Validation + + src/app/service-modules/audit-one/components/modal/modal.component.html + 3 + + AuditOne 验证 + + + Requested On + + src/app/service-modules/audit-one/components/modal/modal.component.html + 22 + + 申请日期: + + + Last Update + + src/app/service-modules/audit-one/components/modal/modal.component.html + 23 + + 最近更新 + + + There are no records. + + src/app/service-modules/audit-one/components/modal/modal.component.html + 52 + + 没有记录 + + + AuditOne + + src/app/service-modules/audit-one/components/widget/widget.component.html + 11 + + AuditOne + + + Verified + + src/app/service-modules/audit-one/components/widget/widget.component.html + 47 + + 已验证 + + + See more + + src/app/service-modules/audit-one/components/widget/widget.component.html + 52 + + 查看更多 + + + + diff --git a/src/locale/messages.zh-TW.xlf b/src/locale/messages.zh-TW.xlf new file mode 100644 index 0000000..7793756 --- /dev/null +++ b/src/locale/messages.zh-TW.xlf @@ -0,0 +1,13270 @@ + + + + + + Top Members + + src/app/@core/services/filter-storage/filter-storage.service.ts + 96 + + Top Members + + + Recent + + src/app/@core/services/filter-storage/filter-storage.service.ts + 97 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 115 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 132 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 146 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 164 + + 最近 + + + Oldest + + src/app/@core/services/filter-storage/filter-storage.service.ts + 98 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 116 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 133 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 147 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 165 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 187 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 206 + + 最舊的 + + + Ending Soon + + src/app/@core/services/filter-storage/filter-storage.service.ts + 114 + + Ending Soon + + + Ending SOON + + src/app/@core/services/filter-storage/filter-storage.service.ts + 163 + + Ending SOON + + + Available Date + + src/app/@core/services/filter-storage/filter-storage.service.ts + 181 + + Available Date + + + Recently Created + + src/app/@core/services/filter-storage/filter-storage.service.ts + 182 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 205 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 57 + + Recently Created + + + Price: Low to High + + src/app/@core/services/filter-storage/filter-storage.service.ts + 183 + + 價格:由低至高 + + + Price: High to Low + + src/app/@core/services/filter-storage/filter-storage.service.ts + 184 + + 價格:由高至低 + + + Top Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 185 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 203 + + Top Traded + + + Recently Traded + + src/app/@core/services/filter-storage/filter-storage.service.ts + 186 + + + src/app/@core/services/filter-storage/filter-storage.service.ts + 204 + + Recently Traded + + + Public Vote + + src/app/@core/services/filter-storage/filter-storage.service.ts + 199 + + Public Vote + + + Community Rank + + src/app/@core/services/filter-storage/filter-storage.service.ts + 200 + + Community Rank + + + SOON on Sale + + src/app/@core/services/filter-storage/filter-storage.service.ts + 201 + + SOON on Sale + + + Recently Minted + + src/app/@core/services/filter-storage/filter-storage.service.ts + 202 + + Recently Minted + + + Back + + src/app/@core/services/navigation/navigation.service.ts + 74 + + 返回 + + + Soonaverse is a platform for communities to create and manage decentralized autonomous organizations (DAOs), NFTs, projects, companies, and markets, on the feeless infrastructure of the IOTA network. Any organization can launch and trade liquid assets through our Marketplace, Launchpad, and Token Exchange products. + + src/app/@core/services/seo/seo.service.ts + 7 + + Soonaverse 是一個建立在 feeless IOTA 網絡上的平台,讓社群可以創建並管理去中心化自治組織(DAOs)、NFTs、專案、公司和市場。任何組織皆可以透過我們的市場、發射平台和代幣交換產品發表和交易流動資產。 + + + Bill Payment + + src/app/@core/services/transaction/transaction.service.ts + 18 + + Bill Payment + + + Bill (royalty) + + src/app/@core/services/transaction/transaction.service.ts + 20 + + 帳單(版稅) + + + Credit + + src/app/@core/services/transaction/transaction.service.ts + 26 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 336 + + 權益 + + + Payment + + src/app/@core/services/transaction/transaction.service.ts + 28 + + 付款 + + + Credit NFT + + src/app/@core/services/transaction/transaction.service.ts + 30 + + Credit NFT + + + Mint Collection + + src/app/@core/services/transaction/transaction.service.ts + 32 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 36 + + 鑄造收藏品 + + + Mint Token + + src/app/@core/services/transaction/transaction.service.ts + 34 + + + src/app/pages/space/pages/manage/manage.page.html + 116 + + Mint Token + + + Withdraw Asset + + src/app/@core/services/transaction/transaction.service.ts + 36 + + 提領資產 + + + Unlock + + src/app/@core/services/transaction/transaction.service.ts + 38 + + Unlock + + + Vote + + src/app/@core/services/transaction/transaction.service.ts + 40 + + Vote + + + Order + + src/app/@core/services/transaction/transaction.service.ts + 42 + + 訂單 + + + (Mint Alias) + + src/app/@core/services/transaction/transaction.service.ts + 49 + + (Mint Alias) + + + (Mint NFTs) + + src/app/@core/services/transaction/transaction.service.ts + 51 + + (Mint NFTs) + + + (Mint Foundry) + + src/app/@core/services/transaction/transaction.service.ts + 53 + + (Mint Foundry) + + + (Send Alias to Guardian) + + src/app/@core/services/transaction/transaction.service.ts + 55 + + (Send Alias to Guardian) + + + (Lock Collection) + + src/app/@core/services/transaction/transaction.service.ts + 57 + + (Lock Collection) + + + Discover + + src/app/@shell/ui/header/header.component.html + 76 + + + src/app/components/auth/services/auth.service.ts + 83 + + 探索 + + + Create new + + src/app/@shell/ui/header/header.component.html + 91 + + 新增 + + + Space + + src/app/@shell/ui/header/header.component.html + 97 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 100 + + + src/app/pages/collection/pages/collection/collection.page.html + 110 + + + src/app/pages/nft/pages/nft/nft.page.html + 131 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 206,205 + + + src/app/pages/token/pages/new/summary/summary.component.html + 242,241 + + 空間 + + + Proposal + + src/app/@shell/ui/header/header.component.html + 103 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 29 + + 提案 + + + Award + + src/app/@shell/ui/header/header.component.html + 106 + + + src/app/pages/award/pages/award/award.page.html + 29 + + + src/app/pages/award/pages/award/award.page.ts + 98 + + 獎勵 + + + Collection + + src/app/@shell/ui/header/header.component.html + 110 + + + src/app/@shell/ui/header/header.component.html + 129 + + + src/app/pages/collection/pages/collection/collection.page.html + 37 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 136 + + + src/app/pages/nft/pages/new/single/single.page.html + 346 + + + src/app/pages/space/pages/collections/collections.page.html + 50 + + 收藏品 + + + Token + + src/app/@shell/ui/header/header.component.html + 113 + + + src/app/@shell/ui/header/header.component.html + 132 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 321 + + + src/app/pages/token/pages/token/token.page.html + 29 + + + src/app/pages/token/pages/token/token.page.ts + 99 + + + src/app/pages/token/pages/trade/trade.page.ts + 274 + + 代幣 + + + To unlock more features you have to stake SOON token. + + src/app/@shell/ui/header/header.component.html + 124,126 + + To unlock more features you have to stake SOON token. + + + VIP LEVEL + + src/app/@shell/ui/header/header.component.html + 197,198 + + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 37,38 + + + src/app/pages/member/pages/activity/activity.page.html + 146,147 + + VIP LEVEL + + + None. + + src/app/@shell/ui/header/header.component.html + 232 + + + src/app/@shell/ui/mobile-header/mobile-header.component.html + 77 + + None. + + + My Profile + + src/app/@shell/ui/header/header.component.html + 240 + + + src/app/components/auth/services/auth.service.ts + 551 + + 個人檔案 + + + Purchase has not been completed + + src/app/@shell/ui/header/header.component.html + 265,266 + + Purchase has not been completed + + + You have + + src/app/@shell/ui/header/header.component.html + 270 + + 您有 + + + to finish your transaction + + src/app/@shell/ui/header/header.component.html + 272 + + 來結束您的交易 + + + Open Checkout + + src/app/@shell/ui/header/header.component.html + 282,283 + + Open Checkout + + + You won the NFT + + src/app/@shell/ui/header/header.component.ts + 334 + + 您已贏得NFT + + + You are a proud owner of a new NFT. Congratulations! + + src/app/@shell/ui/header/header.component.ts + 335 + + 您是這新NFT驕傲的擁有者,恭喜! + + + You lost your bid! + + src/app/@shell/ui/header/header.component.ts + 342 + + 您的出價輸了! + + + Your bid on + + src/app/@shell/ui/header/header.component.ts + 343 + + 您的出價在 + + + was outbid. Try again! + + src/app/@shell/ui/header/header.component.ts + 344 + + 已出高價,請再試一次! + + + just offered + + src/app/@shell/ui/header/header.component.ts + 351 + + 剛提供 + + + for + + src/app/@shell/ui/header/header.component.ts + 352 + + + src/app/components/timeline/timeline.component.html + 171 + + 為了 + + + Your + + src/app/@shell/ui/header/header.component.ts + 353 + + 您的 + + + has received a new bid for + + src/app/@shell/ui/header/header.component.ts + 354 + + 剛收到一個新出價 + + + Unsupported + + src/app/@shell/ui/header/header.component.ts + 377 + + 不支援 + + + This notification is not yet supported in your language + + src/app/@shell/ui/header/header.component.ts + 378 + + 這個通知尚不支援您的語言 + + + Space + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 27,28 + + 空間 + + + Proposal + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 38,39 + + 提案 + + + Award + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 49,50 + + 獎勵 + + + Collection + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 60,61 + + 收藏品 + + + Token + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 70,71 + + 代幣 + + + Stake more SOON to create tokens and collections. + + src/app/@shell/ui/mobile-header/create-dropdown/create-dropdown.component.html + 81,84 + + Stake more SOON to create tokens and collections. + + + Connect to your MetaMask wallet + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 57,58 + + Connect to your MetaMask wallet + + + Connect via TanglePay + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 73 + + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 47 + + Connect via TanglePay + + + Log out + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 97 + + 登出 + + + Powered by + + src/app/@shell/ui/mobile-menu/mobile-menu.component.html + 103 + + 技術支援 + + + The page you were looking for was not found + + src/app/@shell/ui/not-found/not-found.page.html + 8 + + The page you were looking for was not found + + + Discover Soonaverse + + src/app/@shell/ui/not-found/not-found.page.html + 9,11 + + + src/app/pages/discover/pages/discover/discover.page.html + 2,4 + + 探索 Soonaverse + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 19 + + Network status + + + Network status + + src/app/@shell/ui/sider/network-status/network-status.component.html + 30,31 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 84,85 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 140,141 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 197,198 + + 網路狀態 + + + Operational + + src/app/@shell/ui/sider/network-status/network-status.component.html + 36 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 90 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 146 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 203 + + 運作中 + + + Degraded Performance + + src/app/@shell/ui/sider/network-status/network-status.component.html + 43 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 97 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 153 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 210 + + 性能下降 + + + Down + + src/app/@shell/ui/sider/network-status/network-status.component.html + 50 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 104 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 160 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 217 + + + + + Last milestone + + src/app/@shell/ui/sider/network-status/network-status.component.html + 57,58 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 111,112 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 170,171 + + + src/app/@shell/ui/sider/network-status/network-status.component.html + 224,225 + + 最後的里程碑 + + + Devnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 78,79 + + + src/app/components/network/components/select-network/select-network.component.html + 61,63 + + Devnet + + + Shimmer Mainnet Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 132,133 + + Shimmer 主網即將到來 + + + Testnet + + src/app/@shell/ui/sider/network-status/network-status.component.html + 191,192 + + + src/app/components/network/components/select-network/select-network.component.html + 33,35 + + Testnet + + + Assembly + + src/app/@shell/ui/sider/network-status/network-status.component.html + 237 + + Assembly + + + Assembly Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 244,245 + + Assembly 即將到來 + + + Shimmer EVM Coming SOON + + src/app/@shell/ui/sider/network-status/network-status.component.html + 266,267 + + Shimmer EVM 即將到來 + + + See Docs + + src/app/@shell/ui/sider/sider.component.html + 48 + + 查看文件 + + + Show more + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 47 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 27 + + + src/app/components/timeline/timeline.component.html + 304 + + 顯示更多 + + + Show less + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 48 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 28 + + + src/app/components/timeline/timeline.component.html + 303 + + 顯示較少 + + + Search here... + + src/app/components/algolia/algolia-checkbox/algolia-checkbox.component.ts + 50 + + + src/app/components/algolia/algolia-radio/algolia-radio.component.ts + 30 + + 在此搜尋... + + + Reset + + + src/app/components/algolia/algolia-clear/algolia-clear.component.html + 5,7 + + Reset + + + + Search + + src/app/components/algolia/search/search.component.html + 20,19 + + + src/app/components/collection/components/select-collection/select-collection.component.html + 95,94 + + + src/app/components/space/components/select-space/select-space.component.html + 95,94 + + 搜尋 + + + Start typing... + + src/app/components/algolia/search/search.component.html + 36 + + 從這裡輸入... + + + Open + + src/app/components/algolia/services/algolia.service.ts + 28 + + 開啟 + + + Guardians of Space Only + + src/app/components/algolia/services/algolia.service.ts + 30 + + 空間管理員限定 + + + Members of Space Only + + src/app/components/algolia/services/algolia.service.ts + 32 + + 空間會員限定 + + + Members With Badge Only + + src/app/components/algolia/services/algolia.service.ts + 34 + + 獎章限定 + + + Members With NFT only + + src/app/components/algolia/services/algolia.service.ts + 36 + + 僅限持有NFT的成員 + + + Unavailable for sale + + src/app/components/algolia/services/algolia.service.ts + 49 + + 無法銷售 + + + On Auction + + src/app/components/algolia/services/algolia.service.ts + 51 + + On Auction + + + Available + + src/app/components/algolia/services/algolia.service.ts + 53 + + + src/app/components/award/components/award-status/award-status.component.html + 23 + + + src/app/components/collection/components/collection-card/collection-card.component.ts + 61 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.ts + 162 + + + src/app/pages/space/pages/collections/collections.page.ts + 31 + + + src/app/pages/token/pages/token/token.page.ts + 256 + + 可購買 + + + On Sale + + src/app/components/algolia/services/algolia.service.ts + 55 + + 出售 + + + Metamask + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 19 + + MetaMask + + + Connect to your Metamask wallet + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 23 + + 連結到您的小狐狸(Metamask)錢包 + + + TanglePay + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 43 + + TanglePay + + + Make sure you select public IOTA EVM Chain in MetaMask. + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 67 + + 確保您在MetaMask上選擇公開的IOTA EVM鏈 + + + Network Name: IOTA EVM + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 69 + + 網路名稱: IOTA EVM + + + RPC URL: https://evm.wasp.sc.iota.org/ + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 70 + + RPC URL: https://evm.wasp.sc.iota.org/ + + + Chain ID: 1074 + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 71 + + 區塊鏈身分:1074 + + + Cancel + + src/app/components/auth/components/sign-in-modal/sign-in-modal.component.html + 89,90 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 120,121 + + 取消 + + + Connect + + + src/app/components/auth/components/sign-in/sign-in.component.html + 8,10 + + 連線 + + + + Disconnect + + src/app/components/auth/components/sign-out/sign-out.component.html + 2 + + 中斷連線 + + + Staking + + src/app/components/auth/services/auth.service.ts + 90 + + Staking + + + Tokens + + src/app/components/auth/services/auth.service.ts + 97 + + + src/app/pages/discover/pages/awards/awards.page.html + 145,144 + + + src/app/pages/member/pages/member/member.page.ts + 66 + + + src/app/pages/member/pages/tokens/tokens.page.html + 49 + + + src/app/pages/member/pages/tokens/tokens.page.html + 235 + + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 41 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 2 + + 代幣 + + + Swap + + src/app/components/auth/services/auth.service.ts + 104 + + Swap + + + Pool + + src/app/components/auth/services/auth.service.ts + 111 + + Pool + + + Marketplace + + src/app/components/auth/services/auth.service.ts + 118 + + 市集 + + + My Overview + + src/app/components/auth/services/auth.service.ts + 125 + + + src/app/pages/dashboard/dashboard.page.html + 2 + + 我的總覽 + + + Unable to sign transaction. Please try to reload page. + + src/app/components/auth/services/auth.service.ts + 232 + + 無法簽署交易。請再刷新頁面。 + + + You must unlock your MetaMask first! + + src/app/components/auth/services/auth.service.ts + 278 + + 您必須先解鎖MetaMask! + + + You must enable access to read your account address. + + src/app/components/auth/services/auth.service.ts + 290 + + 您必須允許閱讀帳戶地址權限。 + + + Please make sure you select address in MetaMask! + + src/app/components/auth/services/auth.service.ts + 298 + + 請確認您是在Metamask選擇地址! + + + Unable to get nonce to authenticate! + + src/app/components/auth/services/auth.service.ts + 307 + + + src/app/components/auth/services/auth.service.ts + 378 + + 無法取得隨機數來認證! + + + Unable to connect your TanglePay wallet. + + src/app/components/auth/services/auth.service.ts + 343 + + + src/app/components/auth/services/auth.service.ts + 482 + + Unable to connect your TanglePay wallet. + + + Unable to detect address in TanglePay! + + src/app/components/auth/services/auth.service.ts + 349 + + Unable to detect address in TanglePay! + + + You have to open Soonaverse in wallet app. + + src/app/components/auth/services/auth.service.ts + 443 + + You have to open Soonaverse in wallet app. + + + Failed to initialize wallet, try to reload page. + + src/app/components/auth/services/auth.service.ts + 445 + + Failed to initialize wallet, try to reload page. + + + Give badges + + src/app/components/award/components/award-awards/award-awards.component.html + 11 + + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 16 + + Give badges + + + Once issued, this badge is sent to the rewarded participant's wallet. + + src/app/components/award/components/award-awards/award-awards.component.html + 34 + + Once issued, this badge is sent to the rewarded participant's wallet. + + + Upload CSV + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 31,32 + + Upload CSV + + + Download CSV template + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 34 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 85 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 10 + + 下載CSV模板 + + + You can create badge airdrops for any user. You can upload CSV with users ETH addresses and they will be properly reward. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 42,44 + + You can create badge airdrops for any user. You can upload CSV with users ETH addresses and they will be properly reward. + + + If you don’t know how to prepare CSV file, you can download our template made for you. + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 50,51 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 101,102 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 25,26 + + 若您不清楚如何準備CSV檔案,可下載準備好的範本。 + + + Confirm schedule + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 77 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 128 + + Confirm schedule + + + ETH Address + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 97 + + ETH Address + + + Action + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 98 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 288 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 153 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 22 + + + src/app/pages/token/pages/trade/trade.page.html + 214 + + + src/app/pages/token/pages/trade/trade.page.html + 288 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 24 + + 執行 + + + Badge + + src/app/components/award/components/award-give-badges/award-give-badges.component.html + 104 + + + src/app/pages/award/pages/new/new.page.html + 298,297 + + 徽章 + + + Submitted. + + src/app/components/award/components/award-give-badges/award-give-badges.component.ts + 103 + + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 137 + + Submitted. + + + Fund Award & Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 3 + + Fund Award & Mint + + + Reward Token + + src/app/components/award/components/award-mint/award-mint.component.html + 21 + + Reward Token + + + Reward to be funded + + src/app/components/award/components/award-mint/award-mint.component.html + 43 + + Reward to be funded + + + Confirm & Start + + src/app/components/award/components/award-mint/award-mint.component.html + 98,99 + + Confirm & Start + + + Once you agree with the terms, the generated address will remain active during the whole process. + + src/app/components/award/components/award-mint/award-mint.component.html + 105,107 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 181,183 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 93,95 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 146,148 + + 一旦您同意條款,產出的地址將在整個流程中持續生效。 + + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + src/app/components/award/components/award-mint/award-mint.component.html + 120,121 + + Use deeplink to make the transfer. Unfortunatelly no manual entry supported by Firefly. + + + Transaction history + + src/app/components/award/components/award-mint/award-mint.component.html + 159 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 252 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 246 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 134 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 176 + + + src/app/components/space/components/space-claim/space-claim.component.html + 113 + + + src/app/components/space/components/space-claim/space-claim.component.html + 135 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 122 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 144 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 207 + + + src/app/components/token/components/token-bid/token-bid.component.html + 212 + + + src/app/components/token/components/token-bid/token-bid.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 234 + + + src/app/components/token/components/token-claim/token-claim.component.html + 256 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 249 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 254 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 276 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 209 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 269 + + + src/app/components/token/components/token-stake/token-stake.component.html + 319 + + + src/app/components/token/components/token-stake/token-stake.component.html + 341 + + + src/app/components/token/components/token-vote/token-vote.component.html + 271 + + + src/app/components/token/components/token-vote/token-vote.component.html + 293 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 110 + + + src/app/components/wallet-address/verify-address/verify-address.component.html + 146 + + Transaction history + + + Transaction complete. Congratulations. + + src/app/components/award/components/award-mint/award-mint.component.html + 187 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 271 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 235 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 277 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 294 + + 交易完成,恭喜您! + + + Finish Mint + + src/app/components/award/components/award-mint/award-mint.component.html + 191,192 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 289,290 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 281,282 + + 結束鑄造 + + + Funding info + + src/app/components/award/components/award-mint/award-mint.component.ts + 83 + + Funding info + + + Make transaction + + src/app/components/award/components/award-mint/award-mint.component.ts + 84 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 92 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 87 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 101 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 77 + + 交易 + + + Wait for confirmation + + src/app/components/award/components/award-mint/award-mint.component.ts + 85 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 93 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 87 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 108 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 88 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 102 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 78 + + 等待確認 + + + Confirmed + + src/app/components/award/components/award-mint/award-mint.component.ts + 86 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 94 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 88 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 109 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 89 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 103 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 79 + + 已確認 + + + Payment received. + + src/app/components/award/components/award-mint/award-mint.component.ts + 141 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 150 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 196 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 136 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 136 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 145 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 155 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 140 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 159 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 157 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 131 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 224 + + 已收到付款。 + + + Confirming transaction. + + src/app/components/award/components/award-mint/award-mint.component.ts + 158 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 167 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 213 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 164 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 185 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 153 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 153 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 162 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 172 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 157 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 176 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 174 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 148 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 241 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 208 + + 交易確認中。 + + + Transaction confirmed. + + src/app/components/award/components/award-mint/award-mint.component.ts + 167 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 176 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 222 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 173 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 194 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 162 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 162 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 171 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 181 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 166 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 185 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 183 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 157 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 250 + + 交易已確認。 + + + Invalid amount received. Refunding transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 186 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 203 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 258 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 182 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 190 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 210 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 186 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 204 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 212 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 190 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 270 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 247 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 159 + + 收到無效的金額,退款進行中... + + + Invalid transaction.You must gift storage deposit. + + src/app/components/award/components/award-mint/award-mint.component.ts + 209 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 218 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 281 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 206 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 205 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 213 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 225 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 209 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 227 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 227 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 206 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 293 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 262 + + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 175 + + 無效交易。你必須贈送儲存訂金。 + + + Invalid payment refunded. + + src/app/components/award/components/award-mint/award-mint.component.ts + 224 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 233 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 296 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 220 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 228 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 241 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 224 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 242 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 243 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 221 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 308 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 279 + + 無效的支付已退款。 + + + Waiting for transaction... + + src/app/components/award/components/award-mint/award-mint.component.ts + 300 + + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 321 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 442 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 290 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 313 + + + src/app/components/space/components/space-claim/space-claim.component.ts + 311 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 316 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 306 + + + src/app/components/token/components/token-bid/token-bid.component.ts + 348 + + + src/app/components/token/components/token-claim/token-claim.component.ts + 327 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 319 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 350 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 336 + + + src/app/components/token/components/token-stake/token-stake.component.ts + 415 + + + src/app/components/token/components/token-vote/token-vote.component.ts + 398 + + 等待交易中... + + + Pending Funding + + + src/app/components/award/components/award-status/award-status.component.html + 5,6 + + Pending Funding + + + + Rejected + + + src/app/components/award/components/award-status/award-status.component.html + 11,12 + + + src/app/components/collection/components/collection-status/collection-status.component.html + 11,12 + + 已駁回 + + + + Completed + + src/app/components/award/components/award-status/award-status.component.html + 17 + + + src/app/pages/space/pages/awards/awards.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 32 + + 已完成 + + + Space Members Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 9 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 571 + + 僅限成員 + + + Space Guardians Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 19 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 558 + + 僅限管理員 + + + Space Members with Badge Only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 29 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 584 + + 獎章限定 + + + At least one NFT from Collections + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 39 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 596 + + 收藏品中至少一個NFT + + + Specific members only + + src/app/components/collection/components/collection-access-badge/collection-access-badge.component.html + 53 + + 僅限特定成員 + + + Starts in + + src/app/components/collection/components/collection-card/collection-card.component.html + 28 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 95 + + + src/app/components/token/components/token-card/token-card.component.html + 70 + + 開始於 + + + days + + src/app/components/collection/components/collection-card/collection-card.component.html + 30 + + + src/app/components/countdown/countdown.component.html + 56 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 109 + + + + + Starts today + + src/app/components/collection/components/collection-card/collection-card.component.html + 33 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 122 + + 今天開始 + + + Collection is not yet migrated to the decentralized network. + + src/app/components/collection/components/collection-card/collection-card.component.html + 59 + + Collection is not yet migrated to the decentralized network. + + + Limited Edition + + src/app/components/collection/components/collection-card/collection-card.component.html + 76 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 612 + + 限量版 + + + Floor Price + + src/app/components/collection/components/collection-card/collection-card.component.html + 104 + + + src/app/pages/collection/pages/collection/collection.page.html + 203 + + Floor Price + + + Pending approval + + src/app/components/collection/components/collection-card/collection-card.component.ts + 56 + + 等待核准 + + + Rejected + + src/app/components/collection/components/collection-card/collection-card.component.ts + 66 + + + src/app/pages/space/pages/awards/awards.page.ts + 33 + + + src/app/pages/space/pages/collections/collections.page.ts + 32 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 33 + + 已駁回 + + + Remaining + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 42 + + 剩餘 + + + NFTs + + src/app/components/collection/components/collection-highlight-card/collection-highlight-card.component.html + 49 + + + src/app/pages/market/pages/market/market.page.ts + 14 + + + src/app/pages/market/pages/market/market.page.ts + 35 + + + src/app/pages/member/pages/member/member.page.ts + 67 + + NFT + + + Mint collection on network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 3 + + Mint collection on network + + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 43,45 + + Once minted all NFT’s from this collection will be available to migrate to the selected network by their owners. + + + Unsold NFT's + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 60,61 + + 未售出的 NFTs + + + Decide what should happen with all NFTs that were not sold yet. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 67 + + 決定所有未售出的 NFTs 將如何處理 + + + Keep the same price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 76 + + 保持相同價格 + + + Take Ownership + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 86 + + 取得擁有權 + + + Set new price + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 96 + + 設定新的價格 + + + Burn all unsold + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 103 + + 燒毀所有未售出的品項 + + + Note that the collection ownership will be granted only to your profile. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 130,131 + + Note that the collection ownership will be granted only to your profile. + + + Once minted, a collection cannot be edited and a new NFT cannot be added to that collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 141,143 + + 鑄造完成後,該收藏將不能被編輯和新增 NFT + + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 150 + + By checking this box, you acknowledge that all active sales of this collection’s NFTs will be cancelled. + + + Confirm & Start minting + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 174,175 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 139,140 + + 確定並開始鑄造 + + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 196,198 + + Once the transaction is registered, we will cancel all ongoing sales of collection's NFTs and we will burn all unsold NFT's (if selected). + + + remaining to make the transfer. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 210 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 171 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 90 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 132 + + + src/app/components/space/components/space-claim/space-claim.component.html + 78 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 87 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 140 + + + src/app/components/token/components/token-bid/token-bid.component.html + 170 + + + src/app/components/token/components/token-claim/token-claim.component.html + 199 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 194 + + + src/app/components/token/components/token-stake/token-stake.component.html + 279 + + + src/app/components/token/components/token-vote/token-vote.component.html + 209 + + 剩餘的進行轉移。 + + + Expired + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 213 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 174 + + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 93 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 135 + + + src/app/components/space/components/space-claim/space-claim.component.html + 81 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 90 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 143 + + + src/app/components/token/components/token-bid/token-bid.component.html + 173 + + + src/app/components/token/components/token-claim/token-claim.component.html + 202 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 197 + + + src/app/components/token/components/token-stake/token-stake.component.html + 282 + + + src/app/components/token/components/token-vote/token-vote.component.html + 212 + + + src/app/pages/token/services/helper.service.ts + 204 + + 已過期 + + + NFT's from this collection are now being migrated. + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 284,285 + + NFT's from this collection are now being migrated. + + + NFT's in collection + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 308,309 + + NFT's in collection + + + Total Storage Fee + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 318 + + 總儲存費用 + + + (NFTs Storage Fee + Collection Storage Fee) + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.html + 319 + + (NFTs Storage Fee + Collection Storage Fee) + + + Select network + + src/app/components/collection/components/collection-mint-network/collection-mint-network.component.ts + 91 + + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.ts + 86 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.ts + 100 + + 選擇網路 + + + Pending + + + src/app/components/collection/components/collection-status/collection-status.component.html + 5,6 + + 待處理 + + + + Collection is required. + + src/app/components/collection/components/select-collection/select-collection.component.html + 4 + + + src/app/pages/nft/pages/new/single/single.page.html + 352 + + 必須要有收藏品 + + + Select Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 13 + + 選擇收藏品 + + + Select a Collection + + src/app/components/collection/components/select-collection/select-collection.component.html + 83 + + 選擇一組收藏品 + + + No results for + + src/app/components/collection/components/select-collection/select-collection.component.html + 114 + + + src/app/components/space/components/select-space/select-space.component.html + 114 + + 沒有結果 + + + All Collections + + src/app/components/collection/components/select-collection/select-collection.component.ts + 20 + + 所有收藏品 + + + + + + + src/app/components/confirm-modal/confirm-modal.component.html + 48,50 + + + src/app/components/confirm-modal/confirm-modal.component.html + 51,53 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 246,251 + + + src/app/components/token/components/token-vote/token-vote.component.html + 46,47 + + + src/app/pages/collection/pages/collection/collection.page.html + 130,131 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 55,56 + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 71,72 + + + + + Are you sure? + + src/app/components/confirm-modal/confirm-modal.component.ts + 30 + + 是否確定? + + + Close + + src/app/components/confirm-modal/confirm-modal.component.ts + 33 + + 關閉 + + + Confirm + + src/app/components/confirm-modal/confirm-modal.component.ts + 34 + + + src/app/components/token/components/token-bid/token-bid.component.html + 146 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 170 + + + src/app/components/token/components/token-vote/token-vote.component.html + 181 + + 確認 + + + Connect wallet + + src/app/components/connect-wallet/connect-wallet.component.html + 7 + + 連接錢包 + + + d + + src/app/components/countdown/countdown.component.html + 55 + + + + + h + + src/app/components/countdown/countdown.component.html + 68 + + + + + hours + + src/app/components/countdown/countdown.component.html + 69 + + 小時 + + + m + + src/app/components/countdown/countdown.component.html + 81 + + + + + min + + src/app/components/countdown/countdown.component.html + 82 + + 分鐘 + + + s + + src/app/components/countdown/countdown.component.html + 94 + + + + + sec + + src/app/components/countdown/countdown.component.html + 95 + + + + + Ends + + src/app/components/date-tag/date-tag.component.ts + 11 + + Ends + + + Price + + src/app/components/iota-input/iota-input.component.html + 3 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 139 + + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 81 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 19 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 124 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 49 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 75 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 37 + + + src/app/pages/token/pages/trade/trade.page.html + 209 + + + src/app/pages/token/pages/trade/trade.page.html + 283 + + + src/app/pages/token/pages/trade/trade.page.html + 372 + + + src/app/pages/token/pages/trade/trade.page.html + 659 + + + src/app/pages/token/pages/trade/trade.page.html + 846 + + 價格 + + + Verified addresses + + src/app/components/member/components/member-about/member-about.component.html + 90 + + 驗證地址 + + + Manage + + src/app/components/member/components/member-about/member-about.component.html + 96 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 297 + + + src/app/pages/space/pages/space/space.page.ts + 53 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 18 + + 管理 + + + Recently joined spaces + + src/app/components/member/components/member-about/member-about.component.html + 119 + + 最近加入的空間 + + + All + + src/app/components/member/components/member-about/member-about.component.html + 124 + + 全部 + + + No Contribution Yet. + + src/app/components/member/components/member-about/member-about.component.html + 155 + + 還沒有貢獻 + + + awards + + src/app/components/member/components/member-card/member-card.component.html + 74 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 17 + + + src/app/components/member/components/member-space-row/member-space-row.component.html + 22 + + 獎勵 + + + Display Name + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 14 + + 顯示名稱 + + + Set a display name. This does not change your username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 19 + + 設定顯示名稱。這不會改變您的用戶名。 + + + Display name (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 26 + + 顯示名稱 (選擇性) + + + About + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 36 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 208 + + + src/app/pages/space/pages/space/space.page.ts + 44 + + 關於 + + + A brief description of yourself shown on your profile. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 41 + + 顯示在您個人檔案上的簡短自述。 + + + Your description (optional) + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 48 + + 您的自述 (選填) + + + Avatar + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 57 + + + src/app/pages/space/pages/upsert/upsert.page.html + 166 + + 頭像 + + + Customise your Soonaverse identity. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 62 + + 自訂您的 Soonaverse 身分。 + + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 75,78 + + Generate a free unique avatar for your profile picture. New super rare premium avatar species and avatar collectibles/accessories that can all be traded are coming SOON. + + + WOW! Looks like yours is the prettiest avatar of all. Congratulations. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 92 + + 哇!看起來你的頭像是最棒的,恭喜您。 + + + Networking + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 97 + + + src/app/pages/space/pages/upsert/upsert.page.html + 54 + + 網路 + + + Invalid Github username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 99 + + + src/app/pages/space/pages/upsert/upsert.page.html + 61 + + 無效的 Github 用戶名。 + + + Type your Github account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 105 + + + src/app/pages/space/pages/upsert/upsert.page.html + 67 + + 請輸入您的Github登入名稱 + + + Invalid Twitter username. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 117 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 177 + + + src/app/pages/space/pages/upsert/upsert.page.html + 78 + + 不正確的推特用戶名稱 + + + Type your Twitter account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 123 + + + src/app/pages/space/pages/upsert/upsert.page.html + 84 + + 請輸入您的推特登入名稱 + + + Only username#1234 format supported. + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 135 + + 只支持 username#1234 這種格式 + + + Type your Discord account username + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 141 + + 請輸入您的Discord登入名稱 + + + Settings + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 155 + + 設定 + + + Save changes + + src/app/components/member/components/member-edit-drawer/member-edit-drawer.component.html + 157,158 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 123,124 + + 儲存變更 + + + + + + + src/app/components/network/components/select-network/select-network.component.html + 4,6 + + + + + + Shimmer + + src/app/components/network/components/select-network/select-network.component.html + 17 + + + src/app/components/network/components/select-network/select-network.component.html + 28 + + + src/app/components/network/components/selected-network/selected-network.component.html + 11 + + + src/app/pages/award/pages/award/award.page.html + 44 + + + src/app/pages/collection/pages/collection/collection.page.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 575 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 169 + + Shimmer + + + IOTA + + src/app/components/network/components/select-network/select-network.component.html + 45 + + + src/app/components/network/components/select-network/select-network.component.html + 56 + + + src/app/components/network/components/selected-network/selected-network.component.html + 19 + + + src/app/pages/award/pages/award/award.page.html + 52 + + + src/app/pages/collection/pages/collection/collection.page.html + 59 + + + src/app/pages/nft/pages/nft/nft.page.html + 583 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 177 + + IOTA + + + Selected Network + + src/app/components/network/components/selected-network/selected-network.component.html + 4,6 + + Selected Network + + + Shimmer Testnet + + src/app/components/network/components/selected-network/selected-network.component.html + 15 + + + src/app/pages/award/pages/award/award.page.html + 48 + + + src/app/pages/collection/pages/collection/collection.page.html + 55 + + + src/app/pages/nft/pages/nft/nft.page.html + 579 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 173 + + Shimmer Testnet + + + IOTA Devnet + + src/app/components/network/components/selected-network/selected-network.component.html + 23 + + + src/app/pages/award/pages/award/award.page.html + 56 + + + src/app/pages/collection/pages/collection/collection.page.html + 63 + + + src/app/pages/nft/pages/nft/nft.page.html + 587 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 181 + + IOTA Devnet + + + Send + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + 發送 + + + to following address: + + src/app/components/network/components/send-funds/send-funds.component.html + 6 + + 至以下地址: + + + Copied + + src/app/components/network/components/send-funds/send-funds.component.html + 25 + + + src/app/components/share/share.component.html + 27 + + + src/app/components/wallet-address/wallet-address.component.html + 29 + + 已複製 + + + Copy + + src/app/components/network/components/send-funds/send-funds.component.html + 26 + + 複製 + + + Do not send funds from an exchange, always use wallets you fully control. + + + src/app/components/network/components/send-funds/send-funds.component.html + 34,36 + + Do not send funds from an exchange, always use wallets you fully control. + + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 3 + + 出價 + + + NFT image + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 17 + + + src/app/components/nft/components/nft-card/nft-card.component.html + 15 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 16 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 25 + + NFT圖像 + + + Ends + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 38 + + 結束 + + + Royalties + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 48 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 36 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 46 + + 權利金 + + + Royalties are automatically deducted and paid to artists. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 55 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 166 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 43 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 53 + + 版稅將自動扣除並支付給創作者。 + + + Royalties goes to + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 73,74 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 61,62 + + Royalties goes to + + + + + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 75,76 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 63,64 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 262,263 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 188,189 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 264,265 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 306,307 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 344,345 + + + src/app/service-modules/audit-one/components/widget/widget.component.html + 45 + + + + + Current highest bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 109 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 119 + + 當前最高的出價 + + + Min bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 111 + + + src/app/pages/nft/pages/nft/nft.page.html + 111 + + 最低出價 + + + Your bid is the highest + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 127 + + + src/app/pages/nft/pages/nft/nft.page.html + 116 + + 您的出價是最高的 + + + Current price is refreshing in real time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 172,173 + + Current price is refreshing in real time + + + Adress of your desired NTF will be locked for you for the whole auction. After payment your bid will be locked, if there is a higher bid, you will be refunded immediately. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 208,209 + + 在整個拍賣過程中,您想要的NFT的地址將被鎖定。付款後,您的出價將被鎖定。一旦出現更高的出價,您將會立刻收到退款。 + + + If there is a higher bid, you will be refunded immediately. If you want to make another bid, send higher amount directly to the same address. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 216,218 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 255,257 + + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 321,323 + + 若出價更高,您將會立刻收到退款。若您想再出價,可將更高金額直接發送到相同地址。 + + + Make a bid + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 237,238 + + 出價 + + + Your transactions + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 278 + + Your transactions + + + Sent Date + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 286 + + 發送日期 + + + Time + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 287 + + + src/app/pages/token/pages/trade/trade.page.html + 854 + + 時間 + + + Amount + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 289 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 33 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 110 + + + src/app/pages/member/pages/tokens/tokens.page.html + 328 + + + src/app/pages/member/pages/transactions/transactions.page.html + 25 + + + src/app/pages/nft/pages/nft/nft.page.html + 323 + + + src/app/pages/nft/pages/nft/nft.page.html + 385 + + + src/app/pages/nft/pages/nft/nft.page.html + 435 + + + src/app/pages/token/pages/trade/trade.page.html + 200 + + + src/app/pages/token/pages/trade/trade.page.html + 274 + + + src/app/pages/token/pages/trade/trade.page.html + 363 + + + src/app/pages/token/pages/trade/trade.page.html + 664 + + + src/app/pages/token/pages/trade/trade.page.html + 851 + + 數量 + + + Detail + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 291 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 55 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 96 + + 詳情 + + + Link + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 311,310 + + + src/app/pages/nft/pages/nft/nft.page.html + 324 + + + src/app/pages/nft/pages/nft/nft.page.html + 360,359 + + + src/app/pages/nft/pages/nft/nft.page.html + 386 + + + src/app/pages/nft/pages/nft/nft.page.html + 410,409 + + + src/app/pages/nft/pages/nft/nft.page.html + 436 + + + src/app/pages/nft/pages/nft/nft.page.html + 460,459 + + 連結 + + + Congratulations you won the NFT. + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 345 + + 恭喜您贏得NFT。 + + + Close checkout + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 357,358 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 283,284 + + + src/app/components/token/components/token-bid/token-bid.component.html + 271,272 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 313,314 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 306,307 + + + src/app/components/token/components/token-vote/token-vote.component.html + 330,331 + + 關閉結帳 + + + Show my NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 368,369 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 294,295 + + 顯示我的NFT + + + Bidding is expired. Good luck next time :) + + src/app/components/nft/components/nft-bid/nft-bid.component.html + 384 + + Bidding is expired. Good luck next time :) + + + Generated NFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 272 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 459 + + 生成NFT + + + SFT + + src/app/components/nft/components/nft-bid/nft-bid.component.ts + 274 + + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 461 + + 半同質化代幣 + + + NFT is not yet migrated to the decentralized network. + + src/app/components/nft/components/nft-card/nft-card.component.html + 65 + + NFT 尚未轉移至去中心化網路。 + + + day + + src/app/components/nft/components/nft-card/nft-card.component.html + 118 + + + + + Current bid + + src/app/components/nft/components/nft-card/nft-card.component.html + 156 + + 當前出價 + + + Owned by + + src/app/components/nft/components/nft-card/nft-card.component.html + 191 + + + src/app/pages/nft/pages/nft/nft.page.html + 594 + + 擁有者 + + + + + + + + src/app/components/nft/components/nft-card/nft-card.component.html + 229,231 + + + + + New NFT + + src/app/components/nft/components/nft-card/nft-card.component.ts + 167 + + 新的NFT + + + Checkout + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 3 + + 結帳 + + + Total price + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 74,75 + + Total price + + + Confirm and Lock + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 150,151 + + 確認並鎖定 + + + Your NFT will be locked for purchase for + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 156 + + 您的 NFT 將被鎖定進行購買 + + + minutes + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 157 + + 分鐘 + + + We received invalid amount. Try again. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 185 + + 收到了不正確的數量。請重試。 + + + Validating your transaction... + + src/app/components/nft/components/nft-checkout/nft-checkout.component.html + 237,238 + + 正在驗證你的交易... + + + Order created. + + src/app/components/nft/components/nft-checkout/nft-checkout.component.ts + 437 + + + src/app/components/token/components/token-purchase/token-purchase.component.ts + 332 + + 訂單已建立。 + + + Deposit NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 215 + + 存入 NFT + + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 46,48 + + You can deposit NFT back to Soonaverse to allow trading. Once processed your NFT will be locked in Soonaverse. You can withdraw anytime. + + + Confirm & Start deposit + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 76,77 + + Confirm & Start deposit + + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 113,115 + + If NFT is not recognised within Soonaverse. We will create new Collection and it’s associated Space. Don’t forget to claim this space if you are the original author. + + + NFT has been deposited. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 165 + + NFT has been deposited. + + + See NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.html + 169,170 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 211,212 + + 查看 NFT + + + Terms & Conditions + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 85 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 106 + + Terms & Conditions + + + Send NFT + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 86 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 107 + + 傳送 NFT + + + NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 147 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 168 + + 已收到 NFT。 + + + Invalid NFT received. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 191 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 212 + + Invalid NFT received. + + + Invalid NFT refunded. + + src/app/components/nft/components/nft-deposit/nft-deposit.component.ts + 205 + + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 226 + + Invalid NFT refunded. + + + Preview + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 19 + + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 37 + + 預覽 + + + Sale Starts + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 57 + + + src/app/pages/nft/services/helper.service.ts + 142 + + 開始販售 + + + Current price + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 68 + + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 60 + + + src/app/pages/nft/pages/nft/nft.page.html + 70 + + 當前價格 + + + Author + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 80 + + 作者 + + + System info + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 119 + + + src/app/pages/nft/pages/nft/nft.page.html + 634 + + 系統資訊 + + + The current address is not connected to a live mainnet. As soon as the functionality is supported on IOTA/Shimmer, you will have to ability to one-click migrate this NFT to your network of choice. + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 130 + + + src/app/pages/nft/pages/nft/nft.page.html + 654 + + 目前的地址尚未連結到線上主網。一旦 IOTA / Shimmer 開始支援,你將能夠將 NFT 一鍵遷移到你選擇的網路。 + + + Properties + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 135 + + + src/app/pages/nft/pages/new/single/single.page.html + 90 + + 特性 + + + Stats + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 139 + + + src/app/pages/nft/pages/new/single/single.page.html + 193,192 + + 狀態 + + + NFT Image + + src/app/components/nft/components/nft-preview/nft-preview.component.html + 149 + + + src/app/pages/nft/pages/new/single/single.page.html + 301 + + + src/app/pages/nft/pages/nft/nft.page.html + 27 + + NFT圖像 + + + IPFS Metadata + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + IPFS 元數據 + + + IPFS Image + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 62 + + + src/app/pages/nft/pages/nft/nft.page.ts + 79 + + IPFS圖像 + + + Available once minted... + + src/app/components/nft/components/nft-preview/nft-preview.component.ts + 64 + + + src/app/pages/nft/pages/nft/nft.page.ts + 81 + + Available once minted... + + + Set your floor price + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 6,7 + + 設定你的地板價 + + + Available time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 42,43 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 42,43 + + Available time + + + NOW + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 54,55 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 54,55 + + 立刻 + + + Select Date/Time + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 65,66 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 65,66 + + 選擇 日期/時間 + + + Available On is required. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 71 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 71 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 71 + + + src/app/pages/nft/pages/new/single/single.page.html + 69 + + 可使用開關必須打開 + + + Available on + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 80 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 80 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 70 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 81 + + + src/app/pages/nft/pages/new/single/single.page.html + 68 + + + src/app/pages/nft/pages/new/single/single.page.html + 79 + + 可用於 + + + Auction length + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 91,92 + + Auction length + + + Various auction length coming next sprint once community have a vote! + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 98 + + 在社群投票後,各式各樣的拍賣週期即將釋出! + + + Duration of auction is 3 days + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 115 + + 拍賣期限為三天 + + + Auction can't be canceled after start date + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 125 + + Auction can't be canceled after start date + + + Once your listing is complete, you will get a confirmation message. + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 129 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 145 + + 您將在刊登完成後,收到確認訊息。 + + + Confirm listing + + src/app/components/nft/components/nft-sale/nft-sale-auction/nft-sale-auction.component.html + 138,139 + + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 154,155 + + Confirm listing + + + Set your price + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 6,7 + + 設定你的價格 + + + Sale type + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 92,93 + + 銷售類型 + + + Open Sale + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 103,104 + + 公開發售 + + + Specific member(s) + + src/app/components/nft/components/nft-sale/nft-sale-fixed-price/nft-sale-fixed-price.component.html + 113,114 + + 僅限多位特定成員 + + + Trade history + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 2 + + + src/app/pages/token/pages/trade/trade.page.html + 110 + + Trade history + + + Item is yours and yours only + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 8,10 + + 物品為您的且僅為您所有 + + + This will make your item unavailable for sale. + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 16 + + 這將導致您的物品無法出售。 + + + Stop sale! + + src/app/components/nft/components/nft-sale/nft-sale-not-for-sale/nft-sale-not-for-sale.component.html + 17 + + 停止出售! + + + List Item for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 15 + + 刊登待售品 + + + Not for sale + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 80 + + 非賣品 + + + Fixed price + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 88 + + + src/app/pages/token/services/new.service.ts + 29 + + 定價 + + + Auction + + src/app/components/nft/components/nft-sale/nft-sale.component.html + 96 + + 拍賣 + + + Stake NFT + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 3 + + + src/app/pages/member/pages/activity/activity.page.html + 221 + + Stake NFT + + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 46,48 + + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 147,149 + + Your NFT will be sent back to your with time lock. Please note you have to provide enough storage deposit for timelock. Just set tag to "soonaverse" in your wallet. + + + For how long you want to stake? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 56,57 + + + src/app/components/token/components/token-stake/token-stake.component.html + 174,175 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 57,58 + + For how long you want to stake? + + + Stake type? + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 77,78 + + Stake type? + + + Confirm & Start Stake + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 118,119 + + Confirm & Start Stake + + + NFT has been staked. + + src/app/components/nft/components/nft-stake/nft-stake.component.html + 207 + + NFT has been staked. + + + Dynamic + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 76 + + Dynamic + + + Static + + src/app/components/nft/components/nft-stake/nft-stake.component.ts + 80 + + Static + + + More + + src/app/components/proposal/components/proposal-card/proposal-card.component.html + 97,98 + + 更多 + + + Pending + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 6,7 + + + src/app/pages/token/pages/token/token.page.html + 36 + + + src/app/pages/token/pages/trade/trade.page.html + 524 + + 待處理中 + + + Rejected + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 12,13 + + + src/app/pages/token/pages/token/token.page.html + 42 + + 已駁回 + + + Commencing + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 18,19 + + Commencing + + + In-Progress + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 24,25 + + 進行中 + + + Completed + + src/app/components/proposal/components/proposal-status/proposal-status.component.html + 31,32 + + Completed + + + Share + + src/app/components/share/share.component.html + 16 + + + src/app/components/share/share.component.html + 39 + + + src/app/pages/token/pages/trade/trade.page.html + 64 + + + src/app/pages/token/pages/trade/trade.page.html + 635,634 + + 分享 + + + Copy to clipboard + + src/app/components/share/share.component.html + 28 + + 複製到剪貼簿 + + + Space is required. + + src/app/components/space/components/select-space/select-space.component.html + 4 + + + src/app/pages/award/pages/new/new.page.html + 121 + + + src/app/pages/proposal/pages/new/new.page.html + 211 + + 需要加入空間 + + + Select Space + + src/app/components/space/components/select-space/select-space.component.html + 13 + + 選擇空間 + + + Select a space + + src/app/components/space/components/select-space/select-space.component.html + 83 + + + src/app/pages/award/pages/new/new.page.html + 152 + + + src/app/pages/proposal/pages/new/new.page.html + 242 + + 選擇空間 + + + All Spaces + + src/app/components/space/components/select-space/select-space.component.ts + 20 + + 所有空間 + + + Joined + + src/app/components/space/components/space-card/space-card.component.html + 19,20 + + Joined + + + members + + src/app/components/space/components/space-card/space-card.component.html + 44 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 23 + + + src/app/pages/space/pages/space/space-about/space-about.component.html + 149 + + 成員 + + + Space Claim + + src/app/components/space/components/space-claim/space-claim.component.html + 3 + + Space Claim + + + Confirm and generate address + + src/app/components/space/components/space-claim/space-claim.component.html + 54,55 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 52,53 + + + src/app/components/token/components/token-claim/token-claim.component.html + 138,139 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 96,97 + + + src/app/components/token/components/token-stake/token-stake.component.html + 251,252 + + 確認並生產地址 + + + Claim complete. Congratulations. + + src/app/components/space/components/space-claim/space-claim.component.html + 160 + + + src/app/components/token/components/token-claim/token-claim.component.html + 281 + + 完成認領。恭喜。 + + + Close + + src/app/components/space/components/space-claim/space-claim.component.html + 172,173 + + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 181,182 + + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 29,30 + + + src/app/components/token/components/token-cancel/token-cancel.component.html + 79,80 + + + src/app/components/token/components/token-claim/token-claim.component.html + 293,294 + + + src/app/components/token/components/token-stake/token-stake.component.html + 378,379 + + 關閉 + + + Invalid amount or invalid senders address. Refunding transaction... + + src/app/components/space/components/space-claim/space-claim.component.ts + 183 + + Invalid amount or invalid senders address. Refunding transaction... + + + Funds refunded. + + src/app/components/space/components/space-claim/space-claim.component.ts + 222 + + Funds refunded. + + + Space claim submitted. + + src/app/components/space/components/space-claim/space-claim.component.ts + 306 + + Space claim submitted. + + + Token Reward Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 16 + + Token Reward Schedule + + + Existing Schedule + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 29 + + Existing Schedule + + + Upload New + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 37 + + Upload New + + + Vault address: + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 55,64 + + Vault address: + + + Schedule a new Reward + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 82,83 + + Schedule a new Reward + + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 93,95 + + You can schedule new staking rewards here. To do this, upload a .csv file containing user addresses and allocation details. + + + Start Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 148 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 24 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 24 + + 起始日期 + + + End Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 149 + + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 14 + + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 25 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 25 + + 結束日期 + + + Vesting Date + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 150 + + Vesting Date + + + Tokens to Distribute + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 151 + + Tokens to Distribute + + + Status + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.html + 152 + + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 110,109 + + + src/app/pages/token/pages/trade/trade.page.html + 376 + + 狀態 + + + Proposal created to remove the reward. + + src/app/components/space/components/space-reward-schedule/space-reward-schedule.component.ts + 154 + + Proposal created to remove the reward. + + + By checking this box, you agree with + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 12 + + 點擊此按鈕即表示您同意我們的 + + + Terms and Conditions + + src/app/components/terms-and-conditions/terms-and-conditions.component.ts + 13 + + 條款及細則 + + + Timeline + + src/app/components/timeline/timeline.component.html + 2 + + + src/app/components/timeline/timeline.component.html + 8 + + 時間軸 + + + Earned Badge + + src/app/components/timeline/timeline.component.html + 66 + + 獲得的徽章 + + + with + + src/app/components/timeline/timeline.component.html + 66 + + + + + Listed by + + src/app/components/timeline/timeline.component.html + 109 + + 列出 + + + Made available for auction by + + src/app/components/timeline/timeline.component.html + 112 + + 可供拍賣 + + + Purchased by + + src/app/components/timeline/timeline.component.html + 170 + + 購買者 + + + See + + src/app/components/timeline/timeline.component.html + 181 + + 觀看 + + + Hide + + src/app/components/timeline/timeline.component.html + 182 + + 隱藏 + + + Listed by space + + src/app/components/timeline/timeline.component.html + 287 + + 依照空間列出 + + + Refund blocked funds + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 3 + + Refund blocked funds + + + Total available tokens to refund + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 29 + + Total available tokens to refund + + + Refund complete. Congratulations. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.html + 169 + + Refund complete. Congratulations. + + + Credit refund submitted. + + src/app/components/token/components/locked-token-claim/locked-token-claim.component.ts + 309 + + Credit refund submitted. + + + Airdrop tokens on the network + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 3 + + Airdrop tokens on the network + + + Tokens to airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 56,57 + + Tokens to airdrop + + + Confirm & Start Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 86,87 + + Confirm & Start Airdrop + + + Tokens to Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 120,121 + + Tokens to Airdrop + + + Finish Airdrop + + src/app/components/token/components/token-airdrop-network/token-airdrop-network.component.html + 239,240 + + Finish Airdrop + + + Detail + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 60,61 + + 詳情 + + + Trade + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 70,71 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 201,202 + + 交易 + + + Price (USD) + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 101 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 145 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 86 + + 價格(美元) + + + 24h Change + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 126,127 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 115,116 + + 24 小時變化 + + + 24h Volume + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 154 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 146 + + 24 小時交易量 + + + M. Cap + + src/app/components/token/components/token-all-token-row/token-all-token-row.component.html + 172 + + M. Cap + + + Open buy order + + src/app/components/token/components/token-bid/token-bid.component.html + 3 + + Open buy order + + + Summary + + src/app/components/token/components/token-bid/token-bid.component.html + 29,30 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 39,40 + + + src/app/components/token/components/token-offer/token-offer.component.html + 46,47 + + 摘要 + + + Token amount to buy + + src/app/components/token/components/token-bid/token-bid.component.html + 34,35 + + Token amount to buy + + + Offered price per token + + src/app/components/token/components/token-bid/token-bid.component.html + 44,45 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 44,45 + + + src/app/components/token/components/token-offer/token-offer.component.html + 51,52 + + Offered price per token + + + Token amount to send + + src/app/components/token/components/token-bid/token-bid.component.html + 73,74 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 117,118 + + Token amount to send + + + ~ + + src/app/components/token/components/token-bid/token-bid.component.html + 89,98 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 60,69 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 90,99 + + + src/app/pages/token/pages/trade/trade.page.html + 553,556 + + ~ + + + I agree with + + src/app/components/token/components/token-bid/token-bid.component.html + 129 + + + src/app/components/token/components/token-claim/token-claim.component.html + 115 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 153 + + + src/app/components/token/components/token-offer/token-offer.component.html + 133 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 78 + + + src/app/components/token/components/token-refund/token-refund.component.html + 65 + + 我同意 + + + Token terms and Conditions + + src/app/components/token/components/token-bid/token-bid.component.html + 131 + + + src/app/components/token/components/token-claim/token-claim.component.html + 117 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 155 + + + src/app/components/token/components/token-offer/token-offer.component.html + 135 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 80 + + + src/app/components/token/components/token-refund/token-refund.component.html + 67 + + 代幣條款與條件 + + + and generate address + + src/app/components/token/components/token-bid/token-bid.component.html + 147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 171 + + + src/app/components/token/components/token-vote/token-vote.component.html + 182 + + and generate address + + + Once you agree with the terms, the generated address will remain active during the whole sale. + + src/app/components/token/components/token-bid/token-bid.component.html + 154,155 + + + src/app/components/token/components/token-claim/token-claim.component.html + 146,147 + + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 178,179 + + + src/app/components/token/components/token-purchase/token-purchase.component.html + 103,104 + + 一旦您同意條款,產出的地址將在整個販售過程中持續生效。 + + + Buy complete. Congratulations. + + src/app/components/token/components/token-bid/token-bid.component.html + 259 + + 交易完成,恭喜您! + + + Bid created. + + src/app/components/token/components/token-bid/token-bid.component.ts + 344 + + 出價成立。 + + + Are you sure you want to cancel the sale? + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 17 + + 你確定要取消販售嗎? + + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 23,25 + + Once the sale is cancelled process will trigger automatically and all investors will be refunded immediately. + + + Cancel sale + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.html + 32,33 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 74,75 + + 取消出售 + + + Canceled public sale. + + src/app/components/token/components/token-cancel-sale/token-cancel-sale.component.ts + 56 + + 取消公開販售。 + + + Total () + + src/app/components/token/components/token-cancel/token-cancel.component.html + 51,52 + + Total () + + + Are you sure you want to cancel your buy order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 66 + + 你確定想要取消你的購買單? + + + Are you sure you want to cancel your sell order? + + src/app/components/token/components/token-cancel/token-cancel.component.html + 69 + + 你確定想要取消你的販售單? + + + Confirm + + src/app/components/token/components/token-cancel/token-cancel.component.html + 76,77 + + 確認 + + + Cancelled. + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 48 + + + src/app/pages/token/pages/trade/trade.page.ts + 589 + + 已取消。 + + + Cancel your buy + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 80 + + 取消購買 + + + Cancel your sell + + src/app/components/token/components/token-cancel/token-cancel.component.ts + 81 + + 取消販售 + + + Ongoing sale + + src/app/components/token/components/token-card/token-card.component.html + 22 + + 販售進行中 + + + Sale ends soon + + src/app/components/token/components/token-card/token-card.component.html + 23 + + 即將結束販售 + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 24 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 21 + + 冷卻時間結束 + + + Sale starts + + src/app/components/token/components/token-card/token-card.component.html + 55,57 + + Sale starts + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 115,117 + + + src/app/components/token/components/token-card/token-card.component.html + 175,177 + + Sale ends + + + Sale ends + + src/app/components/token/components/token-card/token-card.component.html + 130 + + + src/app/components/token/components/token-card/token-card.component.html + 190 + + + src/app/components/token/components/token-card/token-card.component.html + 250 + + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 176 + + + src/app/components/token/components/token-row/token-row.component.html + 79 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 20 + + 結束販售 + + + Cooldown ends + + src/app/components/token/components/token-card/token-card.component.html + 235,237 + + Cooldown ends + + + Token Claim + + src/app/components/token/components/token-claim/token-claim.component.html + 3 + + 認領代幣 + + + Total available tokens to claim as of today + + src/app/components/token/components/token-claim/token-claim.component.html + 42 + + + src/app/components/token/components/token-claim/token-claim.component.html + 56 + + Total available tokens to claim as of today + + + Tokens available from + + src/app/components/token/components/token-claim/token-claim.component.html + 76 + + Tokens available from + + + Total tokens to claim + + src/app/components/token/components/token-claim/token-claim.component.html + 84 + + Total tokens to claim + + + Token claim submitted. + + src/app/components/token/components/token-claim/token-claim.component.ts + 320 + + 已提交代幣認領。 + + + Guardian's of the space will be able to decide where this token will be minted. + + src/app/components/token/components/token-info/token-info-description.component.html + 41 + + 空間管理員可決定代幣會在何處鑄造。 + + + Icon + + src/app/components/token/components/token-info/token-info-description.component.ts + 25 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 24 + + 圖示 + + + Name + + src/app/components/token/components/token-info/token-info-description.component.ts + 26 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 25 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 31,30 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 74 + + + src/app/pages/nft/pages/new/single/single.page.html + 21 + + + src/app/pages/nft/pages/new/single/single.page.html + 27,26 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 15 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 21,20 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 25 + + 名稱 + + + Symbol + + src/app/components/token/components/token-info/token-info-description.component.ts + 27 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 30 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 39,38 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 26 + + 符號 + + + Launchpad Price + + src/app/components/token/components/token-info/token-info-description.component.ts + 28 + + Launchpad Price + + + Network + + src/app/components/token/components/token-info/token-info-description.component.ts + 29 + + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 20 + + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 5,4 + + + src/app/pages/nft/pages/nft/nft.page.html + 542 + + + src/app/pages/nft/pages/nft/nft.page.html + 564 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 119 + + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 160 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 28 + + 網路 + + + Total supply + + src/app/components/token/components/token-info/token-info-description.component.ts + 30 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 29 + + 總供應量 + + + Current distribution + + src/app/components/token/components/token-info/token-info-description.component.ts + 31 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 30 + + 當前分佈 + + + Type + + src/app/components/token/components/token-info/token-info-description.component.ts + 32 + + + src/app/pages/member/pages/tokens/tokens.page.html + 58 + + + src/app/pages/member/pages/tokens/tokens.page.html + 325 + + + src/app/pages/member/pages/transactions/transactions.page.html + 24 + + + src/app/pages/nft/pages/nft/nft.page.html + 384 + + + src/app/pages/nft/pages/nft/nft.page.html + 434 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 31 + + + src/app/pages/token/pages/trade/trade.page.html + 361 + + 類別 + + + Coming soon + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 91,92 + + 即將推出 + + + In Cooldown + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 98,99 + + + src/app/components/token/components/token-row/token-row.component.html + 245,246 + + 冷卻中 + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 108,109 + + + src/app/components/token/components/token-row/token-row.component.html + 256,257 + + + src/app/pages/token/pages/trade/trade.page.html + 456 + + + src/app/pages/token/pages/trade/trade.page.html + 467 + + + src/app/pages/token/pages/trade/trade.page.html + 909,910 + + 購買 + + + Buy + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 116 + + + src/app/pages/token/pages/trade/trade.page.html + 387 + + + src/app/pages/token/pages/trade/trade.page.html + 1210 + + Buy + + + Sale starts + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 167 + + + src/app/components/token/components/token-row/token-row.component.html + 70 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 19 + + 開始販售 + + + Cooldown period ends + + src/app/components/token/components/token-launchpad-row/token-launchpad-row.component.html + 187,188 + + + src/app/components/token/components/token-row/token-row.component.html + 90,91 + + 冷卻期結束 + + + Mint token on network + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 3 + + Mint token on network + + + Public sale will no longer be available after bringing token to a network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 45,46 + + Public sale will no longer be available after bringing token to a network. + + + Once minted all owners will have the option to migrate their tokens to the selected network. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 56,58 + + Once minted all owners will have the option to migrate their tokens to the selected network. + + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 68,70 + + Note that the ownership and all undistributed tokens will be deposited to your member profile. + + + Tokens to migrate + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 92,93 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 173,174 + + Tokens to migrate + + + Locked public tokens + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 107,108 + + + src/app/components/token/components/token-mint-network/token-mint-network.component.html + 189,190 + + Locked public tokens + + + Open sale order + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 3 + + Open sale order + + + Token ID + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 30,31 + + + src/app/components/token/components/token-offer/token-offer.component.html + 27,28 + + Token ID + + + You will receive + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 74,75 + + + src/app/components/token/components/token-offer/token-offer.component.html + 73,74 + + + src/app/pages/token/pages/trade/trade.page.html + 1132,1133 + + 你將收到 + + + Fee + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 103 + + + src/app/components/token/components/token-offer/token-offer.component.html + 101 + + + src/app/pages/token/pages/trade/trade.page.html + 1172 + + 費用 + + + No FEES! + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 110,111 + + + src/app/components/token/components/token-offer/token-offer.component.html + 108,109 + + + src/app/pages/token/pages/trade/trade.page.html + 1188,1189 + + No FEES! + + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 232,234 + + + src/app/components/token/components/token-vote/token-vote.component.html + 249,251 + + Make sure the gift storage deposit options in your Firefly wallet is checked when sending tokens. + + + Sell complete. Congratulations. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.html + 301 + + + src/app/components/token/components/token-vote/token-vote.component.html + 318 + + Sell complete. Congratulations. + + + Offer order created. + + src/app/components/token/components/token-offer-mint/token-offer-mint.component.ts + 346 + + Offer order created. + + + Open Token Sell + + src/app/components/token/components/token-offer/token-offer.component.html + 3 + + Open Token Sell + + + Your Balance + + src/app/components/token/components/token-offer/token-offer.component.html + 35,36 + + Your Balance + + + Offered amount of tokens + + src/app/components/token/components/token-offer/token-offer.component.html + 64,65 + + Offered amount of tokens + + + Create a Sell Order + + src/app/components/token/components/token-offer/token-offer.component.html + 151,152 + + 創建一個賣出的訂單 + + + Offer created. + + src/app/components/token/components/token-offer/token-offer.component.ts + 102 + + 已成立訂單。 + + + Public sale info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 4 + + Public sale info + + + Start date is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 7 + + 必須填寫開始日期。 + + + Start date for the token offering + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 16 + + Start date for the token offering + + + Offering length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 23 + + 需要提供長度 + + + Select token offering length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 48 + + Select token offering length (Default 2 days) + + + Token allocation info + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 63 + + Token allocation info + + + Sale Setup + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 81 + + Sale Setup + + + Enable Cooldown period + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 87,88 + + Enable Cooldown period + + + Enable Cooldown with refund option. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 98,99 + + Enable Cooldown with refund option. + + + Cooldown period length is required. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 103 + + Cooldown period length is required. + + + Select token cooldown length (Default 2 days) + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 129 + + Select token cooldown length (Default 2 days) + + + No Cooldown. Participants can’t refund. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 149,150 + + No Cooldown. Participants can’t refund. + + + Enable Oversale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 160,161 + + Enable Oversale + + + No Oversale. Sale ends with 100% reached. + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 171,172 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 54,55 + + No Oversale. Sale ends with 100% reached. + + + Sale continues after 100% reached + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 179,180 + + Sale continues after 100% reached + + + Confirm and schedule sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.html + 195,196 + + 確認及預訂銷售 + + + Price per token + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 106 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 34 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 42 + + 代幣單價 + + + Public sale + + src/app/components/token/components/token-public-sale/token-public-sale.component.ts + 47 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 135 + + + src/app/pages/token/pages/new/summary/summary.component.html + 214 + + 公開發售 + + + Purchase token + + src/app/components/token/components/token-purchase/token-purchase.component.html + 3 + + 購買代幣 + + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 113 + + Enter amount of tokens you want to buy. Price in IOTA will be calculated. + + + Enter how much you want to spend. Amount of tokens will be calculated. + + src/app/components/token/components/token-purchase/token-purchase.component.html + 116 + + 輸入您想花費的金額,將自動計算代幣數量。 + + + Purchased tokens + + src/app/components/token/components/token-purchase/token-purchase.component.html + 243,244 + + Purchased tokens + + + Price + + src/app/components/token/components/token-purchase/token-purchase.component.html + 260,261 + + Price + + + Cooldown period ends + + src/app/components/token/components/token-refund/token-refund.component.html + 23 + + 冷卻期結束 + + + Confirm and refund + + src/app/components/token/components/token-refund/token-refund.component.html + 82,83 + + 確認退款 + + + Refund token + + src/app/components/token/components/token-refund/token-refund.component.ts + 61 + + 退還代幣 + + + Initial Price + + src/app/components/token/components/token-row/token-row.component.html + 39 + + + src/app/pages/token/pages/token/token-info/token-info.component.ts + 27 + + 初始價格 + + + Avg. Price + + src/app/components/token/components/token-row/token-row.component.html + 47 + + Avg. Price + + + Change (24h) + + src/app/components/token/components/token-row/token-row.component.html + 107,108 + + 變化(24小時) + + + Volume 24h + + src/app/components/token/components/token-row/token-row.component.html + 150 + + Volume 24h + + + Market Cap + + src/app/components/token/components/token-row/token-row.component.html + 166 + + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 169 + + + src/app/pages/token/pages/trade/trade.page.html + 582 + + 市值 + + + Claim + + src/app/components/token/components/token-row/token-row.component.html + 210,211 + + Claim + + + Refund + + src/app/components/token/components/token-row/token-row.component.html + 222,223 + + Refund + + + Launching soon + + src/app/components/token/components/token-row/token-row.component.html + 238,239 + + 即將啟動 + + + Buy / Sell + + src/app/components/token/components/token-row/token-row.component.html + 259,260 + + 購買/販售 + + + Stake your token + + src/app/components/token/components/token-stake/token-stake.component.html + 3 + + 質押您的代幣 + + + Select or define the amount you want to stake and the period for how long you want to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 13,15 + + Select or define the amount you want to stake and the period for how long you want to lock it. + + + Since you are a guardian you can also + + src/app/components/token/components/token-stake/token-stake.component.html + 17 + + Since you are a guardian you can also + + + - Choose an amount and for how long you’d like to lock it. + + src/app/components/token/components/token-stake/token-stake.component.html + 50 + + - Choose an amount and for how long you’d like to lock it. + + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + src/app/components/token/components/token-stake/token-stake.component.html + 52,54 + + - Your funds stay at your wallet, but you will not be able to use them during the staking period. + + + - You will get staked points based on your input. + + src/app/components/token/components/token-stake/token-stake.component.html + 56,57 + + - You will get staked points based on your input. + + + See Staking reward page for more info + + src/app/components/token/components/token-stake/token-stake.component.html + 62 + + See Staking reward page for more info + + + here. + + src/app/components/token/components/token-stake/token-stake.component.html + 63 + + here. + + + How it works + + src/app/components/token/components/token-stake/token-stake.component.html + 71 + + How it works + + + How much you want to stake? + + src/app/components/token/components/token-stake/token-stake.component.html + 87,88 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 21,22 + + How much you want to stake? + + + Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 192 + + Rewards Multiplier + + + Staking Value + + src/app/components/token/components/token-stake/token-stake.component.html + 210,219 + + Staking Value + + + Staked amount * Rewards Multiplier + + src/app/components/token/components/token-stake/token-stake.component.html + 216 + + + src/app/pages/member/pages/activity/activity.page.html + 36 + + + src/app/pages/soon-staking/pages/staking/staking.page.html + 107 + + Staked amount * Rewards Multiplier + + + You will earn + + src/app/components/token/components/token-stake/token-stake.component.html + 230 + + You will earn + + + Stake complete. Congratulations. + + src/app/components/token/components/token-stake/token-stake.component.html + 366 + + Stake complete. Congratulations. + + + Token stake submitted. + + src/app/components/token/components/token-stake/token-stake.component.ts + 410 + + Token stake submitted. + + + Trade details + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 3 + + Trade details + + + Traded amount + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 29,30 + + Traded amount + + + Price per token + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 48,49 + + + src/app/pages/token/pages/new/summary/summary.component.html + 69,70 + + 代幣單價 + + + Date and Time + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 79,80 + + 日期和時間 + + + Fullfilled + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 94,95 + + Fullfilled + + + Date + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 109 + + + src/app/pages/member/pages/transactions/transactions.page.html + 22 + + + src/app/pages/nft/pages/nft/nft.page.html + 383 + + + src/app/pages/nft/pages/nft/nft.page.html + 433 + + + src/app/pages/proposal/pages/votes/votes.page.html + 15 + + + src/app/pages/token/pages/trade/trade.page.html + 198 + + + src/app/pages/token/pages/trade/trade.page.html + 272 + + + src/app/pages/token/pages/trade/trade.page.html + 360 + + 日期 + + + State + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 111 + + State + + + Storage deposit fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 144 + + 存入費用 + + + Fullfilment + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 171 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 252 + + Fullfilment + + + Seller + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 176 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 247 + + Seller + + + Transaction + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 204 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 280 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 314 + + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.html + 358 + + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 41 + + + src/app/pages/member/pages/transactions/transactions.page.html + 74 + + 交易 + + + Non Transferable + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 153 + + + src/app/pages/member/pages/transactions/transactions.page.html + 77 + + Non Transferable + + + Processing... + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 155 + + + src/app/pages/member/pages/transactions/transactions.page.html + 87 + + Processing... + + + Soonaverse Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 170 + + Soonaverse 費用 + + + Exchange Fee + + src/app/components/token/components/token-trade-detail-modal/token-trade-detail-modal.component.ts + 172 + + 交易費用 + + + 24h change/Price + + src/app/components/token/components/token-trading-pair-row/token-trading-pair-row.component.html + 46 + + 24h change/Price + + + Markets + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 6 + + + src/app/pages/token/pages/trade/trade.page.html + 1242 + + 市場 + + + No Tokens + + src/app/components/token/components/token-trading-pairs-table/token-trading-pairs-table.component.html + 38,39 + + + src/app/pages/tokens/pages/favourites/favourites.page.html + 25,26 + + No Tokens + + + Cast Vote + + src/app/components/token/components/token-vote/token-vote.component.html + 3 + + Cast Vote + + + Question + + src/app/components/token/components/token-vote/token-vote.component.html + 16,17 + + Question + + + Selected option + + src/app/components/token/components/token-vote/token-vote.component.html + 23,24 + + Selected option + + + How do you set your votes? + + src/app/components/token/components/token-vote/token-vote.component.html + 33,34 + + How do you set your votes? + + + Total native tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 88,89 + + Total native tokens + + + Total staked tokens + + src/app/components/token/components/token-vote/token-vote.component.html + 105,106 + + Total staked tokens + + + Voting is active on + + src/app/components/token/components/token-vote/token-vote.component.html + 119,120 + + Voting is active on + + + Your total voting weight + + src/app/components/token/components/token-vote/token-vote.component.html + 131,132 + + Your total voting weight + + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + src/app/components/token/components/token-vote/token-vote.component.html + 151,153 + + Note tha staked tokens can be used only for one voting. Your voting weight will be split if you use staked tokens on other proposal. + + + Cast Votes + + src/app/components/token/components/token-vote/token-vote.component.html + 193 + + Cast Votes + + + Send Native Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 124 + + Send Native Tokens + + + Use Staked Tokens + + src/app/components/token/components/token-vote/token-vote.component.ts + 128 + + Use Staked Tokens + + + Vote received. + + src/app/components/token/components/token-vote/token-vote.component.ts + 191 + + Vote received. + + + Transaction confirmed and funds refunded. + + src/app/components/token/components/token-vote/token-vote.component.ts + 217 + + Transaction confirmed and funds refunded. + + + Token vote executed. + + src/app/components/token/components/token-vote/token-vote.component.ts + 375 + + Token vote executed. + + + Token vote order created. + + src/app/components/token/components/token-vote/token-vote.component.ts + 392 + + Token vote order created. + + + Type + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 13,14 + + 類別 + + + Date + + src/app/components/transaction/components/transaction-card/transaction-card.component.html + 22,23 + + 日期 + + + Manage addresses + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 3 + + Manage addresses + + + Address + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 21 + + Address + + + Not yet verified + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 59 + + Not yet verified + + + Change + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 66 + + Change + + + Verify + + src/app/components/wallet-address/manage-addresses/manage-addresses.component.html + 67 + + Verify + + + You will be asked to send funds to the new + + src/app/components/wallet-address/verify-address/verify-address.component.html + 33 + + You will be asked to send funds to the new + + + address for the verification process. The address you send funds from will be linked to your + + src/app/components/wallet-address/verify-address/verify-address.component.html + 36,37 + + address for the verification process. The address you send funds from will be linked to your + + + space + + src/app/components/wallet-address/verify-address/verify-address.component.html + 41 + + 空間 + + + profile + + src/app/components/wallet-address/verify-address/verify-address.component.html + 43 + + 個人資料 + + + for future transactions. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 44 + + 為了未來的交易。 + + + Generate new address + + src/app/components/wallet-address/verify-address/verify-address.component.html + 55,56 + + 生成新地址 + + + Send a small + + src/app/components/wallet-address/verify-address/verify-address.component.html + 66 + + 送出一筆小的 + + + amount to validate your address. This expires in + + src/app/components/wallet-address/verify-address/verify-address.component.html + 67 + + 數量來驗證你的地址, 時限在 + + + Expired. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 70 + + 已過期. + + + Wait for transaction to be validated. We will send back your transaction once completed + + src/app/components/wallet-address/verify-address/verify-address.component.html + 106,107 + + 等待驗證交易。你的交易一旦完成,我們會把它回傳給你。 + + + Validating address... + + src/app/components/wallet-address/verify-address/verify-address.component.html + 136 + + Validating address... + + + Now you can deal with NFTs and participate in token trading. + + src/app/components/wallet-address/verify-address/verify-address.component.html + 174 + + Now you can deal with NFTs and participate in token trading. + + + Your new address has been verified! + + src/app/components/wallet-address/verify-address/verify-address.component.html + 176 + + Your new address has been verified! + + + Finish Verification + + src/app/components/wallet-address/verify-address/verify-address.component.html + 181,182 + + 結束認證 + + + Generate address + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 76 + + 產生新地址 + + + Refunding your payment... + + src/app/components/wallet-address/verify-address/verify-address.component.ts + 192 + + 退款中... + + + Address is not verified + + src/app/components/wallet-address/wallet-address.component.html + 4 + + Address is not verified + + + wallet + + src/app/components/wallet-address/wallet-address.component.html + 25 + + wallet + + + Copy address + + src/app/components/wallet-address/wallet-address.component.html + 30 + + Copy address + + + Verify your + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + 驗證你的 + + + address + + src/app/components/wallet-address/wallet-address.component.html + 61 + + + src/app/components/wallet-address/wallet-address.component.html + 85 + + 地址 + + + This network is currently not enabled. + + src/app/components/wallet-address/wallet-address.component.ts + 82 + + 此網路尚未啟用。 + + + Award Info + + src/app/pages/award/pages/award/award-info/award-info.component.html + 1 + + Award Info + + + Owner + + src/app/pages/award/pages/award/award-info/award-info.component.html + 20 + + 擁有者 + + + Badges used / available + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 13 + + 已使用 / 可用的徽章 + + + Badge lock period (months) + + src/app/pages/award/pages/award/award-info/award-info.component.ts + 15 + + Badge lock period (months) + + + Award info + + src/app/pages/award/pages/award/award.page.html + 3 + + + src/app/pages/award/pages/new/new.page.html + 17 + + 獎勵資訊 + + + Minted on: + + src/app/pages/award/pages/award/award.page.html + 40 + + + src/app/pages/collection/pages/collection/collection.page.html + 47 + + Minted on: + + + Fund Award + + src/app/pages/award/pages/award/award.page.html + 121,122 + + Fund Award + + + Minting in Progress + + src/app/pages/award/pages/award/award.page.html + 129,130 + + Minting in Progress + + + Check out award + + src/app/pages/award/pages/award/award.page.html + 136 + + + src/app/pages/award/pages/award/award.page.html + 210 + + 查看獎勵 + + + Reject Award + + src/app/pages/award/pages/award/award.page.html + 157 + + Reject Award + + + Confirm your participation + + src/app/pages/award/pages/award/award.page.html + 166 + + 確認參與 + + + The whole communication is now handled outside the platform, let the award creator know how to contact you. + + src/app/pages/award/pages/award/award.page.html + 174,176 + + 由於所有溝通皆在平台外進行,請讓獎勵創建人知道該如何與您聯絡。 + + + Provide description or link to your work. + + src/app/pages/award/pages/award/award.page.html + 180 + + 為您的作品提供說明或鏈接。 + + + Submit + + src/app/pages/award/pages/award/award.page.html + 188 + + Submit + + + Cancel + + src/app/pages/award/pages/award/award.page.html + 189 + + + src/app/pages/token/pages/trade/trade.page.html + 245 + + + src/app/pages/token/pages/trade/trade.page.html + 333 + + 取消 + + + Overview + + src/app/pages/award/pages/award/award.page.ts + 29 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 35 + + + src/app/pages/token/pages/new/new.page.ts + 34 + + + src/app/pages/token/pages/token/token.page.ts + 36 + + 總覽 + + + Participants + + src/app/pages/award/pages/award/award.page.ts + 30 + + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 99 + + 參與者 + + + New Award + + src/app/pages/award/pages/new/new.page.html + 2 + + 新獎勵 + + + Title is required. + + src/app/pages/award/pages/new/new.page.html + 14 + + + src/app/pages/award/pages/new/new.page.html + 77 + + + src/app/pages/proposal/pages/new/new.page.html + 24 + + 需要輸入標題 + + + Title and description will be included on the Award. End date determines the duration of the Award. + + src/app/pages/award/pages/new/new.page.html + 19 + + 標題和說明將包含在獎勵內。獎勵期間取決於結束時間。 + + + Title + + src/app/pages/award/pages/new/new.page.html + 23 + + + src/app/pages/award/pages/new/new.page.html + 29,28 + + + src/app/pages/award/pages/new/new.page.html + 76 + + + src/app/pages/award/pages/new/new.page.html + 83,82 + + + src/app/pages/proposal/pages/new/new.page.html + 23 + + + src/app/pages/proposal/pages/new/new.page.html + 29,28 + + + src/app/pages/proposal/pages/new/new.page.html + 103 + + + src/app/pages/proposal/pages/new/new.page.html + 109,108 + + + src/app/pages/proposal/pages/new/new.page.html + 156 + + + src/app/pages/proposal/pages/new/new.page.html + 162,161 + + + src/app/pages/space/pages/upsert/upsert.page.html + 24 + + + src/app/pages/space/pages/upsert/upsert.page.html + 30,29 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 106 + + + src/app/pages/token/pages/new/overview/overview.component.html + 22 + + + src/app/pages/token/pages/new/overview/overview.component.html + 29,28 + + + src/app/pages/token/pages/new/overview/overview.component.html + 65 + + + src/app/pages/token/pages/new/overview/overview.component.html + 72,71 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 9 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 16,15 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 55 + + 標題 + + + You must enter name. + + src/app/pages/award/pages/new/new.page.html + 24 + + 您必須輸入名稱。 + + + End + + src/app/pages/award/pages/new/new.page.html + 36 + + + src/app/pages/award/pages/new/new.page.html + 47,46 + + + src/app/pages/proposal/pages/new/new.page.html + 56 + + + src/app/pages/proposal/pages/new/new.page.html + 68,67 + + 結束 + + + End Date is required. + + src/app/pages/award/pages/new/new.page.html + 37 + + + src/app/pages/proposal/pages/new/new.page.html + 57 + + 結束日期是必填的。 + + + Description + + src/app/pages/award/pages/new/new.page.html + 52 + + + src/app/pages/award/pages/new/new.page.html + 58 + + + src/app/pages/award/pages/new/new.page.html + 91 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 40 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 45 + + + src/app/pages/nft/pages/new/single/single.page.html + 33 + + + src/app/pages/nft/pages/new/single/single.page.html + 38 + + + src/app/pages/proposal/pages/new/new.page.html + 76 + + + src/app/pages/proposal/pages/new/new.page.html + 82 + + + src/app/pages/proposal/pages/new/new.page.html + 119 + + + src/app/pages/proposal/pages/new/new.page.html + 124 + + + src/app/pages/proposal/pages/new/new.page.html + 171 + + + src/app/pages/proposal/pages/new/new.page.html + 176 + + + src/app/pages/space/pages/upsert/upsert.page.html + 36 + + + src/app/pages/space/pages/upsert/upsert.page.html + 41 + + + src/app/pages/token/pages/new/overview/overview.component.html + 37 + + + src/app/pages/token/pages/new/overview/overview.component.html + 43 + + + src/app/pages/token/pages/new/overview/overview.component.html + 80 + + + src/app/pages/token/pages/new/overview/overview.component.html + 86 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 21 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 67 + + + src/app/service-modules/audit-one/components/modal/modal.component.html + 21 + + 說明 + + + Badge definition + + src/app/pages/award/pages/new/new.page.html + 69 + + 徽章定義 + + + Title and description will be included on the badge. + + src/app/pages/award/pages/new/new.page.html + 71 + + 標題和說明將包含在徽章上。 + + + Badge description + + src/app/pages/award/pages/new/new.page.html + 97 + + 徽章說明 + + + Space Info + + src/app/pages/award/pages/new/new.page.html + 115 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 370 + + + src/app/pages/proposal/pages/new/new.page.html + 205 + + 空間資訊 + + + This is the space that will list the award. + + src/app/pages/award/pages/new/new.page.html + 117 + + 選出要列出獎勵的空間 + + + Reward info + + src/app/pages/award/pages/new/new.page.html + 170 + + Reward info + + + You need to fund this award with native token. Select which token will be used as reward. + + src/app/pages/award/pages/new/new.page.html + 172 + + You need to fund this award with native token. Select which token will be used as reward. + + + Token is required. + + src/app/pages/award/pages/new/new.page.html + 176 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 247 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 325 + + Token is required. + + + Select a token + + src/app/pages/award/pages/new/new.page.html + 207 + + Select a token + + + Defines the amount of tokens for each badge and the number of badges available. + + src/app/pages/award/pages/new/new.page.html + 222,223 + + Defines the amount of tokens for each badge and the number of badges available. + + + Invalid token amount per badge + + src/app/pages/award/pages/new/new.page.html + 226 + + Invalid token amount per badge + + + Tokens per badge + + src/app/pages/award/pages/new/new.page.html + 234 + + Tokens per badge + + + Minimum 1 and maximum 10000. + + src/app/pages/award/pages/new/new.page.html + 251 + + + src/app/pages/award/pages/new/new.page.html + 338 + + 最小值1和最大值10000 + + + The amount of badges you want to make available for this award. This can also be thought of as how many awards you want to give out. + + src/app/pages/award/pages/new/new.page.html + 273 + + 您要用於此獎勵的徽章數量,也可理解為您想頒發多少獎勵。 + + + Total to be funded + + src/app/pages/award/pages/new/new.page.html + 284,285 + + Total to be funded + + + Upload image that will be used as a Reward Badge. + + src/app/pages/award/pages/new/new.page.html + 299 + + Upload image that will be used as a Reward Badge. + + + Badge is required. + + src/app/pages/award/pages/new/new.page.html + 328,329 + + Badge is required. + + + Set the duration for which the badge will be locked in the Firefly wallet. + + src/app/pages/award/pages/new/new.page.html + 334,335 + + Set the duration for which the badge will be locked in the Firefly wallet. + + + Create award + + src/app/pages/award/pages/new/new.page.html + 369,370 + + 創造獎勵 + + + Award - New + + src/app/pages/award/pages/new/new.page.ts + 119 + + + src/app/pages/award/pages/new/new.page.ts + 134 + + 獎勵 - 新增 + + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/award/pages/new/new.page.ts + 120 + + + src/app/pages/award/pages/new/new.page.ts + 135 + + Create engagement and growth for your DAOs and digital communities. Awards, fee-less voting, 1-click set up. Join today. + + + Member seems to log out during the file upload request. + + src/app/pages/award/pages/new/new.page.ts + 184 + + + src/app/pages/collection/pages/upsert/upsert.page.ts + 361 + + + src/app/pages/nft/pages/new/multiple/multiple.page.ts + 240 + + + src/app/pages/nft/pages/new/single/single.page.ts + 180 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 131 + + + src/app/pages/token/services/new.service.ts + 204 + + 成員似乎在文件上傳請求期間登出。 + + + Award Description + + src/app/pages/award/pages/overview/overview.page.html + 2 + + 獎勵敘述 + + + Award - + + src/app/pages/award/pages/overview/overview.page.ts + 17 + + + src/app/pages/award/pages/participants/participants.page.ts + 83 + + 獎勵 - + + + Find Participant + + src/app/pages/award/pages/participants/participants.page.html + 49 + + + src/app/pages/award/pages/participants/participants.page.html + 63 + + + src/app/pages/proposal/pages/participants/participants.page.html + 49 + + + src/app/pages/proposal/pages/participants/participants.page.html + 63 + + 尋找參與者 + + + Showing only few top records... + + src/app/pages/award/pages/participants/participants.page.html + 72 + + + src/app/pages/proposal/pages/participants/participants.page.html + 72 + + + src/app/pages/space/pages/members/members.page.html + 92 + + 僅顯示前幾則記錄... + + + No Participants + + src/app/pages/award/pages/participants/participants.page.html + 90,91 + + + src/app/pages/proposal/pages/participants/participants.page.html + 90,91 + + 沒有參與者 + + + Reward + + src/app/pages/award/pages/participants/participants.page.html + 118,119 + + 獎勵 + + + Reward again + + src/app/pages/award/pages/participants/participants.page.html + 138,139 + + 再次頒發獎勵 + + + Pending + + src/app/pages/award/pages/participants/participants.page.ts + 50 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 158 + + + src/app/pages/space/pages/awards/awards.page.ts + 30 + + + src/app/pages/space/pages/collections/collections.page.ts + 30 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 30 + + 待處理 + + + Issued + + src/app/pages/award/pages/participants/participants.page.ts + 51 + + 已發行 + + + See all participants within the award. + + src/app/pages/award/pages/participants/participants.page.ts + 84 + + + src/app/pages/proposal/pages/overview/overview.page.ts + 60 + + 查看獎勵的所有參與者. + + + applied on + + src/app/pages/award/pages/participants/participants.page.ts + 257 + + applied on + + + Make NFT’s from this collection available on decentralised network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 12,13 + + Make NFT’s from this collection available on decentralised network. + + + Minting + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 29 + + 鑄造中 + + + NFTs left + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 32 + + NFTs left + + + Collection is not yet migrated to the decentralized network. + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 47,48 + + Collection is not yet migrated to the decentralized network. + + + Who can buy? + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 51 + + + src/app/pages/nft/pages/nft/nft.page.html + 611 + + 誰可購買? + + + Open sale + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 63,64 + + 公開發售 + + + Space Members Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 76,77 + + 僅限成員 + + + Space Guardians Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 89,90 + + 僅限管理員 + + + Space Members with Badge Only + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 102,103 + + 獎章限定 + + + Must hold at least one NFT from each selected Collections + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 118,119 + + 必須在各系列中,至少持有一款NFT + + + (One NFT per member) + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 126,127 + + (每名成員僅能有一個NFT) + + + Member discounts + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 175 + + 會員折扣 + + + discount for members with rewards from this space in total value of + + src/app/pages/collection/pages/collection/collection-about/collection-about.component.html + 190 + + discount for members with rewards from this space in total value of + + + About collection + + src/app/pages/collection/pages/collection/collection.page.html + 5 + + 關於專輯 + + + Limited edition + + src/app/pages/collection/pages/collection/collection.page.html + 22,23 + + 限量版 + + + Publish Collection + + src/app/pages/collection/pages/collection/collection.page.html + 81,82 + + + src/app/pages/collection/pages/collection/collection.page.html + 309,310 + + 發布收藏 + + + Edit Collection + + src/app/pages/collection/pages/collection/collection.page.html + 93,94 + + + src/app/pages/collection/pages/collection/collection.page.html + 321,322 + + 編輯專輯 + + + Royalties goes to + + src/app/pages/collection/pages/collection/collection.page.html + 128 + + 版稅給付至 + + + Rank + + src/app/pages/collection/pages/collection/collection.page.html + 166,167 + + + src/app/pages/token/pages/token/token.page.html + 69,70 + + Rank + + + Starts at + + src/app/pages/collection/pages/collection/collection.page.html + 185 + + 開始於 + + + Deposited + + src/app/pages/collection/pages/collection/collection.page.html + 196 + + Deposited + + + Staked + + src/app/pages/collection/pages/collection/collection.page.html + 214 + + Staked + + + Links + + src/app/pages/collection/pages/collection/collection.page.html + 223 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 154,153 + + + src/app/pages/token/pages/new/overview/overview.component.html + 160,159 + + + src/app/pages/token/pages/new/summary/summary.component.html + 307,306 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 79 + + 連結 + + + Sale in progress + + src/app/pages/collection/pages/collection/collection.page.html + 269 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 64 + + 正在發售 + + + remaining + + src/app/pages/collection/pages/collection/collection.page.html + 271 + + + src/app/pages/nft/pages/nft/nft.page.html + 155 + + 剩餘 + + + Reject Collection + + src/app/pages/collection/pages/collection/collection.page.html + 338 + + + src/app/pages/collection/pages/collection/collection.page.html + 384 + + Reject Collection + + + Cancel Collection + + src/app/pages/collection/pages/collection/collection.page.html + 354 + + + src/app/pages/collection/pages/collection/collection.page.html + 400 + + Cancel Collection + + + Create NFT + + src/app/pages/collection/pages/collection/collection.page.html + 421 + + + src/app/pages/nft/pages/new/new.page.html + 2 + + 創造NFT + + + Rank amount must be between + + src/app/pages/collection/pages/collection/collection.page.ts + 277 + + + src/app/pages/token/pages/token/token.page.ts + 195 + + Rank amount must be between + + + records + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 13 + + + src/app/pages/discover/pages/awards/awards.page.html + 13 + + + src/app/pages/discover/pages/members/members.page.html + 13 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 13 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 13 + + + src/app/pages/market/pages/collections/collections.page.html + 13 + + + src/app/pages/member/pages/nfts/nfts.page.html + 13 + + 記錄 + + + Filters&Sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 30 + + + src/app/pages/discover/pages/awards/awards.page.html + 30 + + + src/app/pages/discover/pages/members/members.page.html + 30 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 30 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 30 + + + src/app/pages/market/pages/collections/collections.page.html + 30 + + Filters&Sort + + + Filters&sort + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 71 + + + src/app/pages/discover/pages/awards/awards.page.html + 78 + + + src/app/pages/discover/pages/members/members.page.html + 78 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 78 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 79 + + + src/app/pages/market/pages/collections/collections.page.html + 79 + + Filters&sort + + + Sort by + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 93,92 + + + src/app/pages/discover/pages/awards/awards.page.html + 94,93 + + + src/app/pages/discover/pages/members/members.page.html + 94,93 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 94,93 + + + src/app/pages/discover/pages/spaces/spaces.page.html + 95,94 + + + src/app/pages/market/pages/collections/collections.page.html + 95,94 + + 排序方式 + + + Price range + + src/app/pages/collection/pages/collection/nfts/nfts.page.html + 131 + + 價格範圍 + + + Create new collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 2 + + 建立新的收藏 + + + Edit collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 3 + + 編輯收藏 + + + Collection info + + src/app/pages/collection/pages/upsert/upsert.page.html + 18 + + 收藏資訊 + + + Name and description will be included on the Collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 20 + + 名稱和敘述會包含在收藏中 + + + Sales info + + src/app/pages/collection/pages/upsert/upsert.page.html + 58 + + + src/app/pages/nft/pages/new/single/single.page.html + 51 + + 銷售資訊 + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set here and cannot be changed on the NFT. Price for classic NFT collection is only indicative and can be changed on the NFT. + + src/app/pages/collection/pages/upsert/upsert.page.html + 60 + + 時間將根據使用者的時區顯示。對於生成型的NFT和SFT價格設定後無法對單個NFT修改,經典NFT收藏品價格是指標性的且可對每個NFT單獨設定。 + + + Royalty + + src/app/pages/collection/pages/upsert/upsert.page.html + 90 + + 權利金 + + + This royalty % will be applied on the initial mint of the NFTs and all secondary sales. The IOTA address that will be receiving royalties must always have a minimum balance of 1 Mi due to the dust protection mechanism of the IOTA protocol. + + src/app/pages/collection/pages/upsert/upsert.page.html + 93,95 + + 版稅 % 將應於NFT初始的鑄造和所有二級銷售上。由於 IOTA 協定的粉塵防禦機制,收取版稅的IOTA地址必須擁有最少1Mi的餘額。 + + + Royalties - Percentage fee + + src/app/pages/collection/pages/upsert/upsert.page.html + 106 + + 版稅 - 百分比費用 + + + Example: 10 % , 20 % , etc.. + + src/app/pages/collection/pages/upsert/upsert.page.html + 116 + + 範例:10%,20%,等等... + + + Royalties goes to a different space + + src/app/pages/collection/pages/upsert/upsert.page.html + 124 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 131 + + 版稅收取到另外一個空間 + + + Links will be included on the NFT detail. Use account usernames for Twitter and Discord (name#id). + + src/app/pages/collection/pages/upsert/upsert.page.html + 155 + + 連結將被包含在NFT的訊息上。使用Twitter和Discord (name#id) 的帳戶使用者名稱。 + + + Invalid URL. + + src/app/pages/collection/pages/upsert/upsert.page.html + 160 + + 無效網址 + + + URL + + src/app/pages/collection/pages/upsert/upsert.page.html + 167,166 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 312,311 + + + src/app/pages/token/pages/new/overview/overview.component.html + 175,174 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 91,90 + + 網址 + + + Link to your Twitter account + + src/app/pages/collection/pages/upsert/upsert.page.html + 183 + + 連結你的 Twitter 帳號 + + + Invalid Discord username. + + src/app/pages/collection/pages/upsert/upsert.page.html + 194 + + 不正確的Discord用戶名稱。 + + + Link to your Discord account + + src/app/pages/collection/pages/upsert/upsert.page.html + 200 + + 連結到您的Discord帳號 + + + Discounts + + src/app/pages/collection/pages/upsert/upsert.page.html + 215 + + 折扣 + + + The discount applies only to members who have earned tokens from awards issued by this space. + + src/app/pages/collection/pages/upsert/upsert.page.html + 217 + + The discount applies only to members who have earned tokens from awards issued by this space. + + + Token amount higher than + + src/app/pages/collection/pages/upsert/upsert.page.html + 231 + + Token amount higher than + + + Select awarded token + + src/app/pages/collection/pages/upsert/upsert.page.html + 257 + + Select awarded token + + + Discount % + + src/app/pages/collection/pages/upsert/upsert.page.html + 271 + + Discount % + + + Discount + + src/app/pages/collection/pages/upsert/upsert.page.html + 299 + + 折扣 + + + Discount XP + + src/app/pages/collection/pages/upsert/upsert.page.html + 310 + + Discount XP + + + Discount Amount + + src/app/pages/collection/pages/upsert/upsert.page.html + 331,332 + + 折扣額 + + + Add discount level + + src/app/pages/collection/pages/upsert/upsert.page.html + 357 + + 增加折扣等級 + + + This is the space that will be minting the NFT collection. Only spaces with verified wallets show up in the dropdown list. Please make sure you choose the correct space because all funds from the NFT sale will go to this space's verified wallet. + + src/app/pages/collection/pages/upsert/upsert.page.html + 372 + + 這空間將會鑄造NFT收藏品,只有驗證過錢包的空間才會顯示在下拉選單中。請確保你選擇正確的空間因為所有NFT銷售得到的資金將轉移至這個空間所驗證的錢包。 + + + Collection Type + + src/app/pages/collection/pages/upsert/upsert.page.html + 390 + + 專輯類別 + + + Each type has different characteristics. This cannot be changed after creation. + + src/app/pages/collection/pages/upsert/upsert.page.html + 392 + + 每一種皆有不同特性,且無法在建立後修改。 + + + Banner + + src/app/pages/collection/pages/upsert/upsert.page.html + 424,423 + + + src/app/pages/space/pages/upsert/upsert.page.html + 200 + + 橫幅 + + + Banner is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 454,455 + + 橫幅是必要項目 + + + Placeholder + + src/app/pages/collection/pages/upsert/upsert.page.html + 464 + + 佔位符 + + + Placeholder is required. + + src/app/pages/collection/pages/upsert/upsert.page.html + 494,495 + + 佔位符是必要項目 + + + Category + + src/app/pages/collection/pages/upsert/upsert.page.html + 504 + + + src/app/pages/collection/pages/upsert/upsert.page.html + 517 + + + src/app/pages/market/pages/collections/collections.page.html + 177 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 138 + + 類別 + + + Category is used when filtering content. + + src/app/pages/collection/pages/upsert/upsert.page.html + 506 + + 類別用於過濾內容 + + + Category. + + src/app/pages/collection/pages/upsert/upsert.page.html + 510 + + 類別 + + + Collection Setup + + src/app/pages/collection/pages/upsert/upsert.page.html + 535 + + 專輯設定 + + + Who has access to a given collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 537 + + 誰有權限訪問指定的收藏品 + + + Open Sale + + src/app/pages/collection/pages/upsert/upsert.page.html + 546 + + 公開發售 + + + Everyone has access to this collection. + + src/app/pages/collection/pages/upsert/upsert.page.html + 552 + + 所有人都有權限訪問這個收藏品 + + + Only Space Guardians can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 564 + + 只限空間管理員訪問 + + + Only Space Members can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 577 + + 只限空間會員訪問 + + + Only Space Members with badge can access. + + src/app/pages/collection/pages/upsert/upsert.page.html + 590 + + 只限有獎章的空間會員訪問 + + + Collection Options + + src/app/pages/collection/pages/upsert/upsert.page.html + 608 + + 專輯選項 + + + One NFT per Member Only + + src/app/pages/collection/pages/upsert/upsert.page.html + 626 + + One NFT per Member Only + + + Select collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 651 + + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 147 + + + src/app/pages/nft/pages/new/single/single.page.html + 361 + + 選擇專輯 + + + Select award + + src/app/pages/collection/pages/upsert/upsert.page.html + 670 + + 選擇獎勵 + + + Create collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 692,693 + + 建立專輯 + + + Save collection + + src/app/pages/collection/pages/upsert/upsert.page.html + 705,706 + + 儲存專輯 + + + Check out collection + + src/app/pages/collection/services/helper.service.ts + 68 + + 查看收藏 + + + Pending Membership Requests + + src/app/pages/dashboard/dashboard.page.html + 5 + + 待處理的會員申請 + + + Your spaces + + src/app/pages/dashboard/dashboard.page.html + 16 + + 您的空間 + + + No Spaces yet + + src/app/pages/dashboard/dashboard.page.html + 32,33 + + 未有空間 + + + Discover Spaces + + src/app/pages/dashboard/dashboard.page.html + 41,42 + + Discover Spaces + + + Active awards + + src/app/pages/dashboard/dashboard.page.html + 56 + + Active awards + + + Active proposals + + src/app/pages/dashboard/dashboard.page.html + 68 + + Active proposals + + + Spaces + + src/app/pages/discover/pages/awards/awards.page.html + 115,114 + + + src/app/pages/discover/pages/discover/discover.page.ts + 9 + + + src/app/pages/discover/pages/proposals/proposals.page.html + 115,114 + + + src/app/pages/market/pages/collections/collections.page.html + 146,145 + + + src/app/pages/member/pages/member/member.page.ts + 65 + + 空間 + + + Discover - Awards + + src/app/pages/discover/pages/awards/awards.page.ts + 58 + + 探索 - 獎勵 + + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + src/app/pages/discover/pages/awards/awards.page.ts + 59 + + Explore the best approach to DAO community engagement and growth. Awards, fee-less voting, 1-click set up. Join today. + + + Awards + + src/app/pages/discover/pages/discover/discover.page.ts + 10 + + + src/app/pages/member/pages/member/member.page.ts + 64 + + + src/app/pages/space/pages/space/space.page.ts + 47 + + 獎勵 + + + Proposals + + src/app/pages/discover/pages/discover/discover.page.ts + 11 + + + src/app/pages/space/pages/space/space.page.ts + 46 + + 提案 + + + Members + + src/app/pages/discover/pages/discover/discover.page.ts + 12 + + + src/app/pages/space/pages/space/space.page.ts + 48 + + 成員 + + + Discover - Members + + src/app/pages/discover/pages/members/members.page.ts + 51 + + 探索 - 成員 + + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + src/app/pages/discover/pages/members/members.page.ts + 52 + + Be a part of the most vibrant and fastest growing communities in crypto. Use metamask to join in seconds. + + + Discover - Proposals + + src/app/pages/discover/pages/proposals/proposals.page.ts + 57 + + 探索 - 提案 + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + src/app/pages/discover/pages/proposals/proposals.page.ts + 58 + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Set up in just 1-click. Join today. + + + Discover - Spaces + + src/app/pages/discover/pages/spaces/spaces.page.ts + 54 + + 探索 - 空間 + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/discover/pages/spaces/spaces.page.ts + 55 + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting. Discover all of the amazing DAO's on the Soonaverse. + + + Sale type + + src/app/pages/market/pages/collections/collections.page.html + 115 + + 銷售類型 + + + Collections - NFT + + src/app/pages/market/pages/collections/collections.page.ts + 68 + + 收藏 - NFT + + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + src/app/pages/market/pages/collections/collections.page.ts + 69 + + A completely fee-less Non-Fungible Tokens (NFTs) marketplace, digital collectibles, digital art, ownership rights, and more. + + + NFT Collections + + src/app/pages/market/pages/market/market.page.html + 2 + + NFT Collections + + + Some collections may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/market/pages/market/market.page.html + 11,13 + + 有些收藏還未能轉移至去中心化網路。請確認你知道所購買的物品。 + + + I understand + + src/app/pages/market/pages/market/market.page.html + 22,23 + + + src/app/pages/member/pages/tokens/tokens.page.html + 43,44 + + + src/app/pages/tokens/pages/tokens/tokens.page.html + 22,23 + + I understand + + + Collections + + src/app/pages/market/pages/market/market.page.ts + 13 + + + src/app/pages/market/pages/market/market.page.ts + 34 + + + src/app/pages/space/pages/space/space.page.ts + 45 + + 收藏 + + + Total staked + + src/app/pages/member/pages/activity/activity.page.html + 17,18 + + Total staked + + + Staking Value: + + src/app/pages/member/pages/activity/activity.page.html + 29,39 + + Staking Value: + + + Claimable Reward + + src/app/pages/member/pages/activity/activity.page.html + 47,48 + + Claimable Reward + + + Stake more + + src/app/pages/member/pages/activity/activity.page.html + 104,105 + + Stake more + + + Stake + + src/app/pages/member/pages/activity/activity.page.html + 107,108 + + Stake + + + My Staking + + src/app/pages/member/pages/activity/activity.page.html + 133 + + My Staking + + + until + + src/app/pages/member/pages/activity/activity.page.html + 138 + + 直到 + + + My Favourites + + src/app/pages/member/pages/activity/activity.page.html + 152 + + 我的最愛 + + + View All + + src/app/pages/member/pages/activity/activity.page.html + 155 + + View All + + + Profile Options + + src/app/pages/member/pages/activity/activity.page.html + 172 + + Profile Options + + + Edit Profile + + src/app/pages/member/pages/activity/activity.page.html + 185 + + Edit Profile + + + Manage Addresses + + src/app/pages/member/pages/activity/activity.page.html + 191 + + + src/app/pages/space/pages/manage/manage.page.html + 27 + + Manage Addresses + + + Export All Transactions + + src/app/pages/member/pages/activity/activity.page.html + 202 + + Export All Transactions + + + Request Verification + + src/app/pages/member/pages/activity/activity.page.html + 227 + + + src/app/pages/space/pages/manage/manage.page.html + 85 + + Request Verification + + + Pending + + src/app/pages/member/pages/awards/awards.page.html + 10,11 + + 待處理 + + + Issued + + src/app/pages/member/pages/awards/awards.page.html + 18,19 + + 已發行 + + + No Awards + + src/app/pages/member/pages/awards/awards.page.html + 34,35 + + + src/app/pages/space/pages/awards/awards.page.html + 63,64 + + 沒有獎勵 + + + Discover Awards + + src/app/pages/member/pages/awards/awards.page.html + 44,45 + + Discover Awards + + + Reputation + + src/app/pages/member/pages/badges/badges.page.html + 2 + + + src/app/pages/member/pages/member/member.page.ts + 63 + + 聲望 + + + Spaces + + src/app/pages/member/pages/badges/badges.page.html + 21,22 + + Spaces + + + Awards + + src/app/pages/member/pages/badges/badges.page.html + 27,28 + + Awards + + + Total Rewards + + src/app/pages/member/pages/badges/badges.page.html + 33,34 + + Total Rewards + + + My profile + + src/app/pages/member/pages/member/member.page.html + 13 + + 個人檔案 + + + Profile + + src/app/pages/member/pages/member/member.page.html + 15 + + 個人資料 + + + Profile info + + src/app/pages/member/pages/member/member.page.html + 27,28 + + Profile info + + + Joined + + src/app/pages/member/pages/member/member.page.html + 49 + + 已加入 + + + Member - + + src/app/pages/member/pages/member/member.page.ts + 83 + + 成員 - + + + Activity + + src/app/pages/member/pages/member/member.page.ts + 145 + + 活動 + + + Transactions + + src/app/pages/member/pages/member/member.page.ts + 147 + + + src/app/pages/member/pages/transactions/transactions.page.html + 18 + + 交易 + + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + src/app/pages/member/pages/nfts/nfts.page.html + 25,26 + + Bring NFT from other network to Soonaverse and unlock it’s trading options. + + + Deposit NFT + + src/app/pages/member/pages/nfts/nfts.page.html + 29,30 + + Deposit NFT + + + No NFTs + + src/app/pages/member/pages/nfts/nfts.page.html + 59,60 + + + src/app/pages/nft/pages/nft/nft.page.html + 744,745 + + 無NFTs + + + Tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 11,12 + + Tokens + + + Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 20,21 + + Staking + + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + src/app/pages/member/pages/tokens/tokens.page.html + 32,34 + + Here you will only find tokens that are available to claim or that have not been minted. Minted tokens will always appear in your associated Firefly or TanglePay wallet. + + + Item + + src/app/pages/member/pages/tokens/tokens.page.html + 57 + + + src/app/pages/member/pages/tokens/tokens.page.html + 324 + + + src/app/pages/member/pages/transactions/transactions.page.html + 23 + + 項目 + + + Total + + src/app/pages/member/pages/tokens/tokens.page.html + 59 + + + src/app/pages/token/pages/trade/trade.page.html + 204 + + + src/app/pages/token/pages/trade/trade.page.html + 278 + + + src/app/pages/token/pages/trade/trade.page.html + 367 + + + src/app/pages/token/pages/trade/trade.page.html + 668 + + 總共 + + + Owned + + src/app/pages/member/pages/tokens/tokens.page.html + 87 + + + src/app/pages/member/pages/tokens/tokens.page.html + 170 + + + src/app/pages/nft/pages/nft/nft.page.html + 17 + + 擁有 + + + Airdropped + + src/app/pages/member/pages/tokens/tokens.page.html + 118 + + + src/app/pages/member/pages/tokens/tokens.page.html + 172 + + 已空投 + + + from + + src/app/pages/member/pages/tokens/tokens.page.html + 120 + + + + + Deposit for purchase + + src/app/pages/member/pages/tokens/tokens.page.html + 215 + + 支付購買的押金 + + + No tokens + + src/app/pages/member/pages/tokens/tokens.page.html + 258,259 + + 沒有代幣 + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 297 + + Active Staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 300 + + Expired Staking + + + Active Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 307,308 + + Active Staking + + + Expired Staking + + src/app/pages/member/pages/tokens/tokens.page.html + 310,311 + + Expired Staking + + + Staked From + + src/app/pages/member/pages/tokens/tokens.page.html + 326 + + Staked From + + + Staked Until + + src/app/pages/member/pages/tokens/tokens.page.html + 327 + + Staked Until + + + Multiplier + + src/app/pages/member/pages/tokens/tokens.page.html + 329 + + Multiplier + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 330 + + Staked Value + + + Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 380 + + Stakes + + + No Stakes + + src/app/pages/member/pages/tokens/tokens.page.html + 403,404 + + No Stakes + + + Staked from - to + + src/app/pages/member/pages/tokens/tokens.page.html + 432,433 + + Staked from - to + + + Amount (Multiplier) + + src/app/pages/member/pages/tokens/tokens.page.html + 445,446 + + Amount (Multiplier) + + + Staked Value + + src/app/pages/member/pages/tokens/tokens.page.html + 457,458 + + Staked Value + + + Claim + + src/app/pages/member/pages/tokens/tokens.page.ts + 57 + + 認領 + + + Refund + + src/app/pages/member/pages/tokens/tokens.page.ts + 58 + + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 19 + + 退款 + + + Export CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 9 + + 匯出CSV檔案 + + + Exporting CSV + + src/app/pages/member/pages/transactions/transactions.page.html + 13 + + 匯出CSV檔案 + + + No transactions + + src/app/pages/member/pages/transactions/transactions.page.html + 120,121 + + 無交易記錄 + + + Some files have not been uploaded + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 40 + + 部份檔案未有上傳 + + + Please only use a-z, A-Z, _, -, 0-9 characters. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 51,52 + + Please only use a-z, A-Z, _, -, 0-9 characters. + + + Uploaded CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 61 + + 已上傳的CSV + + + Some of the NFTs are faulty! + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 67 + + Some of the NFTs are faulty! + + + Filename + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 73 + + 檔案名稱 + + + Error + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 101 + + 錯誤 + + + Upload existing CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 160 + + 上傳現有的CSV + + + Upload back once you generate below + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 162 + + 當您生成下方後,請重新上傳 + + + You have to upload images first. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 193,194 + + 您需要先上傳圖片。 + + + Generate CSV + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 211 + + 生成CSV檔案 + + + Publish NFTs + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 212 + + 發布NFT + + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + src/app/pages/nft/pages/new/multiple/multiple.page.html + 224,225 + + To create multiple classic NFTs, you have to use the web version of Soonaverse. + + + Single + + src/app/pages/nft/pages/new/new.page.ts + 18 + + 單個 + + + Multiple + + src/app/pages/nft/pages/new/new.page.ts + 19 + + 多個 + + + NFT info + + src/app/pages/nft/pages/new/single/single.page.html + 14 + + NFT 資訊 + + + Name and description will be included on the NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 16 + + 名字和說明將包含在NFT內。 + + + Name is required. + + src/app/pages/nft/pages/new/single/single.page.html + 22 + + 姓名是必要項目 + + + Description is required. + + src/app/pages/nft/pages/new/single/single.page.html + 34 + + + src/app/pages/proposal/pages/new/new.page.html + 77 + + 必須填寫說明。 + + + All times are reflected in user's timezone. For generated NFT and SFT the price is set per collection and cannot be changed here. + + src/app/pages/nft/pages/new/single/single.page.html + 53 + + 所有時間都對應在使用者所屬的時區。對於生成的 NFT 與 SFT,價格是按照收藏設定的,不能在這裡變更。 + + + Properties show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 92 + + 特性顯示在你的項目下方。 + + + Property name (E.g. Character) + + src/app/pages/nft/pages/new/single/single.page.html + 102 + + 屬性名稱(E.g. Character) + + + Value (E.g. Soonanaut) + + src/app/pages/nft/pages/new/single/single.page.html + 103 + + 數值(E.g. Soonanaut) + + + Property name + + src/app/pages/nft/pages/new/single/single.page.html + 115 + + + src/app/pages/nft/pages/new/single/single.page.html + 151 + + + src/app/pages/nft/pages/new/single/single.page.html + 158 + + 屬性名稱 + + + Value + + src/app/pages/nft/pages/new/single/single.page.html + 126,125 + + + src/app/pages/nft/pages/new/single/single.page.html + 163 + + + src/app/pages/nft/pages/new/single/single.page.html + 171,170 + + + src/app/pages/nft/pages/new/single/single.page.html + 228,227 + + + src/app/pages/nft/pages/new/single/single.page.html + 266 + + + src/app/pages/nft/pages/new/single/single.page.html + 272,271 + + + + + Property + + src/app/pages/nft/pages/new/single/single.page.html + 142 + + 屬性 + + + Add property + + src/app/pages/nft/pages/new/single/single.page.html + 185 + + 增加屬性 + + + Stats show up underneath your item. + + src/app/pages/nft/pages/new/single/single.page.html + 194 + + 狀態顯示在你的項目下方。 + + + Stats name (E.g. Stamina) + + src/app/pages/nft/pages/new/single/single.page.html + 204 + + 狀態名稱(例:體力) + + + Value (E.g. 10, 1/10 , etc.) + + src/app/pages/nft/pages/new/single/single.page.html + 205 + + 值(例如:10,1/10 ,等等...) + + + Stat name + + src/app/pages/nft/pages/new/single/single.page.html + 217 + + + src/app/pages/nft/pages/new/single/single.page.html + 254 + + + src/app/pages/nft/pages/new/single/single.page.html + 261 + + 屬性名稱 + + + Stat + + src/app/pages/nft/pages/new/single/single.page.html + 245 + + 屬性 + + + Add stat + + src/app/pages/nft/pages/new/single/single.page.html + 287 + + 增加屬性 + + + Upload image of your NFT. File types supported: PNG, JPEG, WEBP, MP4. Max size: 100 MB. + + src/app/pages/nft/pages/new/single/single.page.html + 303 + + 上傳你的 NFT 圖像。支援的檔案類型:PNG,JPEG,WEBP,MP4。檔案大小上限:100 MB。 + + + Media is required + + src/app/pages/nft/pages/new/single/single.page.html + 333 + + 需要媒體 + + + Select one of your collections to display this NFT. + + src/app/pages/nft/pages/new/single/single.page.html + 348 + + 從您的收藏品中選擇一個來顯示此NFT。 + + + Create NFT + + src/app/pages/nft/pages/new/single/single.page.html + 383,384 + + 創造NFT + + + Preview NFT + + src/app/pages/nft/pages/new/single/single.page.html + 393,394 + + 預覽NFT + + + File name is not valid + + src/app/pages/nft/pages/new/single/single.page.ts + 168 + + 文件名稱無效 + + + NFT + + src/app/pages/nft/pages/nft/nft.page.html + 7 + + NFT + + + Check out nft + + src/app/pages/nft/pages/nft/nft.page.html + 48 + + + src/app/pages/nft/pages/nft/nft.page.html + 516 + + 查看NFT + + + Current highest bid + + src/app/pages/nft/pages/nft/nft.page.html + 109 + + 當前最高出價 + + + Sale ended + + src/app/pages/nft/pages/nft/nft.page.html + 165 + + Sale ended + + + Sale hasn't started yet + + src/app/pages/nft/pages/nft/nft.page.html + 173 + + Sale hasn't started yet + + + NFT is pending other member's transaction + + src/app/pages/nft/pages/nft/nft.page.html + 181 + + NFT is pending other member's transaction + + + Collection pending approval + + src/app/pages/nft/pages/nft/nft.page.html + 190 + + Collection pending approval + + + Collection rejected! + + src/app/pages/nft/pages/nft/nft.page.html + 198 + + Collection rejected! + + + Sell NFT + + src/app/pages/nft/pages/nft/nft.page.html + 213 + + 出售NFT + + + Change Fixed Price + + src/app/pages/nft/pages/nft/nft.page.html + 218 + + 更改固定價格 + + + Change Auction + + src/app/pages/nft/pages/nft/nft.page.html + 223 + + 更改拍賣 + + + Place bid + + src/app/pages/nft/pages/nft/nft.page.html + 240,241 + + 出價 + + + Buy now + + src/app/pages/nft/pages/nft/nft.page.html + 263,264 + + 立刻購買 + + + Bidding + + src/app/pages/nft/pages/nft/nft.page.html + 281 + + 出價 + + + Current Bids + + src/app/pages/nft/pages/nft/nft.page.html + 290 + + 當前出價 + + + Past bids + + src/app/pages/nft/pages/nft/nft.page.html + 298 + + 出價記錄 + + + My biddings + + src/app/pages/nft/pages/nft/nft.page.html + 307 + + 我的出價 + + + Member + + src/app/pages/nft/pages/nft/nft.page.html + 321 + + 成員 + + + Bidded on + + src/app/pages/nft/pages/nft/nft.page.html + 322 + + 出價於 + + + There are no current bids + + src/app/pages/nft/pages/nft/nft.page.html + 369,370 + + There are no current bids + + + There are no past bids + + src/app/pages/nft/pages/nft/nft.page.html + 419,420 + + There are no past bids + + + There are no records. + + src/app/pages/nft/pages/nft/nft.page.html + 469,470 + + There are no records. + + + Withdraw NFT + + src/app/pages/nft/pages/nft/nft.page.html + 509,510 + + 提領 NFT + + + History + + src/app/pages/nft/pages/nft/nft.page.html + 522 + + 歷史 + + + Minting in Progress + + src/app/pages/nft/pages/nft/nft.page.html + 556 + + 鑄造中 + + + Available for specific Member Only + + src/app/pages/nft/pages/nft/nft.page.html + 619 + + 專屬於特定成員 + + + View all of the transaction details of this NFT on the Tangle + + src/app/pages/nft/pages/nft/nft.page.html + 647 + + 查看此NFT在Tangle的所有交易記錄 + + + About the collection + + src/app/pages/nft/pages/nft/nft.page.html + 685 + + 關於專輯 + + + Show + + src/app/pages/nft/pages/nft/nft.page.html + 694 + + 顯示 + + + collection + + src/app/pages/nft/pages/nft/nft.page.html + 695 + + 專輯 + + + by + + src/app/pages/nft/pages/nft/nft.page.html + 707,706 + + 透過 + + + Firefly does not support NFTs yet! + + src/app/pages/nft/pages/nft/nft.page.html + 799 + + Firefly 尚未支援 NFT! + + + Are you sure you want to withdraw NFT from Soonaverse? + + src/app/pages/nft/pages/nft/nft.page.html + 802 + + Are you sure you want to withdraw NFT from Soonaverse? + + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + src/app/pages/nft/pages/nft/nft.page.html + 804 + + Once the NFT is withdrawn it won’t be available within Soonaverse and it will appear only in your wallet. You can always bring the NFT back to Soonaverse later. + + + Confirm with Metamask + + src/app/pages/nft/pages/nft/nft.page.html + 806 + + 在小狐狸錢包上進行確認 + + + View + + src/app/pages/nft/pages/nft/nft.page.ts + 82 + + 檢視 + + + NFT Withdrawn. + + src/app/pages/nft/pages/nft/nft.page.ts + 686 + + 提領 NFT + + + Oops, it's in another universe + + src/app/pages/nft/pages/not-found/not-found.page.html + 8 + + Oops, it's in another universe + + + NFT you are looking for no longer exists on Soonaverse. + + src/app/pages/nft/pages/not-found/not-found.page.html + 12,14 + + 你尋找的 NFT 不再存在於 Soonaverse。 + + + Back to Marketplace + + src/app/pages/nft/pages/not-found/not-found.page.html + 22,24 + + 回到市場 + + + Auction Starts + + src/app/pages/nft/services/helper.service.ts + 145 + + 拍賣開始 + + + Auction Ends + + src/app/pages/nft/services/helper.service.ts + 148 + + 拍賣結束 + + + Pool by + + src/app/pages/pool/pages/market/pool.page.html + 3,12 + + Pool by + + + What is Pool? + + src/app/pages/pool/pages/market/pool.page.html + 20,21 + + What is Pool? + + + See Pool on iotabee + + src/app/pages/pool/pages/market/pool.page.html + 37,39 + + See Pool on iotabee + + + What is iotabee? + + src/app/pages/pool/pages/market/pool.page.html + 49 + + + src/app/pages/swap/pages/market/swap.page.html + 49 + + What is iotabee? + + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + src/app/pages/pool/pages/market/pool.page.html + 51,54 + + + src/app/pages/swap/pages/market/swap.page.html + 51,54 + + Iotabee is a combination of a decentralized peer-to-peer DEX protocol and a semi-centralized crosschain SWAP that people can use to create liquidity and trade tokens on IOTA, Shimmer, Shimmer EVM and other EVM chains like BSC. + + + iotabee.com + + src/app/pages/pool/pages/market/pool.page.html + 61,62 + + + src/app/pages/swap/pages/market/swap.page.html + 61,62 + + iotabee.com + + + New Proposal + + src/app/pages/proposal/pages/new/new.page.html + 2 + + 新提案 + + + Proposal info + + src/app/pages/proposal/pages/new/new.page.html + 17 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 3 + + 提案資料 + + + Title and description will be included on the Proposal. Start and end dates determine the duration of the Proposal. + + src/app/pages/proposal/pages/new/new.page.html + 19 + + 標題和描述將包含在提案內。起始與結束時間將決定提案持續時間。 + + + Start + + src/app/pages/proposal/pages/new/new.page.html + 39 + + + src/app/pages/proposal/pages/new/new.page.html + 50,49 + + 開始 + + + Start Date is required. + + src/app/pages/proposal/pages/new/new.page.html + 40 + + 起始日期為必填。 + + + Question Info + + src/app/pages/proposal/pages/new/new.page.html + 93 + + 提問資訊 + + + Title and description will only be displayed for this question. + + src/app/pages/proposal/pages/new/new.page.html + 95 + + 標題和描述將僅顯示於此問題。 + + + Question Title is required. + + src/app/pages/proposal/pages/new/new.page.html + 104 + + 提問標題是必須的 + + + Text and description for each individual answer. + + src/app/pages/proposal/pages/new/new.page.html + 143 + + 每個回答的文本與描述。 + + + Answer Text is required. + + src/app/pages/proposal/pages/new/new.page.html + 157 + + 選項內容是必須的 + + + Add Choice + + src/app/pages/proposal/pages/new/new.page.html + 192 + + 增加選擇 + + + This is the space that will list the proposal. + + src/app/pages/proposal/pages/new/new.page.html + 207 + + 將由此空間刊出提案。 + + + Proposal Setup + + src/app/pages/proposal/pages/new/new.page.html + 259 + + 提案設定 + + + Defines who has access to the proposal and what is the voting method. + + src/app/pages/proposal/pages/new/new.page.html + 261 + + 確認誰有此提案的訪問權限,以及投票方法。 + + + Target Participants + + src/app/pages/proposal/pages/new/new.page.html + 269 + + 目標參與者 + + + All Guardians + + src/app/pages/proposal/pages/new/new.page.html + 276 + + 所有管理員 + + + Only guardians can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 283 + + 僅管理員可對此提案投票 + + + All Members + + src/app/pages/proposal/pages/new/new.page.html + 289 + + 所有成員 + + + All members can vote on this proposal + + src/app/pages/proposal/pages/new/new.page.html + 296 + + 所有成員可對此提案投票 + + + Space's Native Token + + src/app/pages/proposal/pages/new/new.page.html + 302 + + + src/app/pages/proposal/services/helper.service.ts + 23 + + Space's Native Token + + + You must have minted token linked to your space first! + + src/app/pages/proposal/pages/new/new.page.html + 313 + + You must have minted token linked to your space first! + + + All token holders can vote. + + src/app/pages/proposal/pages/new/new.page.html + 321 + + All token holders can vote. + + + Create Proposal + + src/app/pages/proposal/pages/new/new.page.html + 343,344 + + 建立提案 + + + Proposal - New + + src/app/pages/proposal/pages/new/new.page.ts + 136 + + + src/app/pages/proposal/pages/new/new.page.ts + 151 + + 提案 - 新增 + + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + src/app/pages/proposal/pages/new/new.page.ts + 137 + + + src/app/pages/proposal/pages/new/new.page.ts + 152 + + Create and vote on proposals that help shape the future of DAOs and the metaverse. Instant 1-click set up. Join today. + + + Choice + + src/app/pages/proposal/pages/new/new.page.ts + 321 + + 選擇 + + + badge + + src/app/pages/proposal/pages/new/new.page.ts + 328 + + 徽章 + + + id + + src/app/pages/proposal/pages/new/new.page.ts + 332 + + id + + + Final Results + + src/app/pages/proposal/pages/overview/overview.page.html + 5 + + 最終結果 + + + Proposal Description + + src/app/pages/proposal/pages/overview/overview.page.html + 74 + + 提案說明 + + + Proposal - + + src/app/pages/proposal/pages/overview/overview.page.ts + 59 + + Proposal - + + + Voted + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 21 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 49 + + + src/app/pages/proposal/pages/participants/participants.page.ts + 156 + + 已投票 + + + Vote Now + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 32 + + 立刻投票 + + + Voting starts + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 43 + + 開始投票 + + + You are not part of the vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 56 + + 您並非投票的一員 + + + In order to vote, you must be part of the space before proposal was created. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 60 + + 您必須在提案建立前加入空間,才能投票。 + + + Log in to vote + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 69 + + 登入投票 + + + In order to vote, you must login first. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 73 + + 您必須先登入,才能投票。 + + + Pending Guardian Approval + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 84 + + 等待管理員批准 + + + This proposal has not been approved by any Guardian yet. + + src/app/pages/proposal/pages/overview/proposal-vote-action/proposal-vote-action.component.html + 88 + + 這個提案尚未被任何管理員批准。 + + + Weight + + src/app/pages/proposal/pages/participants/participants.page.html + 102 + + 權重 + + + Pending Vote + + src/app/pages/proposal/pages/participants/participants.page.ts + 48 + + 待表決 + + + Proposal - Participants + + src/app/pages/proposal/pages/participants/participants.page.ts + 83 + + 提案 - 參與者 + + + See all participants within the proposal + + src/app/pages/proposal/pages/participants/participants.page.ts + 84 + + 查看提案中所有參與者 + + + joined soonaverse on + + src/app/pages/proposal/pages/participants/participants.page.ts + 151 + + 加入Soonaverse於 + + + Approve + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 12,13 + + 通過 + + + Decline + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 23,24 + + 拒絕 + + + Voting Type of this proposal. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 67 + + 這個提議的投票類別 + + + Total weight within this proposal for all participants. + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.html + 75 + + 本提案中所有參與者的總權重。 + + + Current Milestone + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 22 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 22 + + 當前里程碑 + + + Commence Date + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 23 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 23 + + 啟始日期 + + + Voting Type + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 26 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 26 + + 投票類別 + + + Total Weight + + src/app/pages/proposal/pages/proposal/proposal-info/proposal-info.component.ts + 27 + + + src/app/pages/proposal/pages/votes/votes.page.ts + 27 + + 總權重 + + + Check out proposal + + src/app/pages/proposal/pages/proposal/proposal.page.html + 79 + + + src/app/pages/proposal/pages/proposal/proposal.page.html + 148 + + 查看提案 + + + Current Results + + src/app/pages/proposal/pages/proposal/proposal.page.html + 87 + + 目前結果 + + + Selected Badges + + src/app/pages/proposal/pages/proposal/proposal.page.html + 120 + + 選定的徽章 + + + Votes + + src/app/pages/proposal/pages/proposal/proposal.page.ts + 36 + + Votes + + + Voter + + src/app/pages/proposal/pages/votes/votes.page.html + 14 + + 投票者 + + + Option (Weight) + + src/app/pages/proposal/pages/votes/votes.page.html + 16 + + Option (Weight) + + + Expired On + + src/app/pages/proposal/pages/votes/votes.page.html + 18 + + Expired On + + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + src/app/pages/proposal/pages/votes/votes.page.html + 24 + + Once refunded token output is consumed your vote expires and proportional weight is applied. You will have to vote again to cast your vote. + + + One Member One Vote + + src/app/pages/proposal/services/helper.service.ts + 25 + + One Member One Vote + + + XP Reputation - Space + + src/app/pages/proposal/services/helper.service.ts + 27 + + XP 聲望值 - 空間 + + + XP Reputation - Selected Badges + + src/app/pages/proposal/services/helper.service.ts + 29 + + XP 聲望 - 選定的徽章 + + + Staking + + src/app/pages/soon-staking/pages/staking/staking.page.html + 3,4 + + Staking + + + How much I earn? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 13 + + How much I earn? + + + How it works? + + src/app/pages/soon-staking/pages/staking/staking.page.html + 135 + + How it works? + + + Stake your tokens to earn rewards and unlock new features. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 137,139 + + Stake your tokens to earn rewards and unlock new features. + + + Unique Perks for stakers + + src/app/pages/soon-staking/pages/staking/staking.page.html + 160 + + Unique Perks for stakers + + + Rewards + + src/app/pages/soon-staking/pages/staking/staking.page.html + 167,168 + + Rewards + + + Trading Bonuses + + src/app/pages/soon-staking/pages/staking/staking.page.html + 180 + + 交易獎勵 + + + Unique Features + + src/app/pages/soon-staking/pages/staking/staking.page.html + 193 + + 唯一的特點 + + + Earn more er than you think + + src/app/pages/soon-staking/pages/staking/staking.page.html + 209 + + Earn more er than you think + + + The more you hold, the more rewards you get. + + src/app/pages/soon-staking/pages/staking/staking.page.html + 214,215 + + The more you hold, the more rewards you get. + + + New + + src/app/pages/space/pages/awards/awards.page.html + 43 + + + src/app/pages/space/pages/collections/collections.page.html + 49 + + + src/app/pages/space/pages/proposals/proposals.page.html + 42 + + 新的 + + + award + + src/app/pages/space/pages/awards/awards.page.html + 44 + + 獎勵 + + + Active + + src/app/pages/space/pages/awards/awards.page.ts + 31 + + + src/app/pages/space/pages/members/members.page.html + 45 + + + src/app/pages/space/pages/proposals/proposals.page.ts + 31 + + 進行中 + + + Space - Awards + + src/app/pages/space/pages/awards/awards.page.ts + 54 + + 空間 - 獎勵 + + + Space's awards + + src/app/pages/space/pages/awards/awards.page.ts + 55 + + 空間的獎勵 + + + No Collections + + src/app/pages/space/pages/collections/collections.page.html + 70,71 + + 無收藏 + + + Space - Collections + + src/app/pages/space/pages/collections/collections.page.ts + 65 + + 空間 - 收藏 + + + Space's collections + + src/app/pages/space/pages/collections/collections.page.ts + 66 + + 空間的收藏 + + + Space Options + + src/app/pages/space/pages/manage/manage.page.html + 2 + + Space Options + + + Token Options + + src/app/pages/space/pages/manage/manage.page.html + 6 + + Token Options + + + Edit Space + + src/app/pages/space/pages/manage/manage.page.html + 21 + + Edit Space + + + Manage Guardians + + src/app/pages/space/pages/manage/manage.page.html + 38 + + Manage Guardians + + + Export Current Members + + src/app/pages/space/pages/manage/manage.page.html + 44 + + Export Current Members + + + Create New Award + + src/app/pages/space/pages/manage/manage.page.html + 57 + + Create New Award + + + Create New Proposal + + src/app/pages/space/pages/manage/manage.page.html + 68 + + Create New Proposal + + + Create New Collection + + src/app/pages/space/pages/manage/manage.page.html + 79 + + Create New Collection + + + Edit Token + + src/app/pages/space/pages/manage/manage.page.html + 105 + + Edit Token + + + Create Airdrop + + src/app/pages/space/pages/manage/manage.page.html + 127 + + Create Airdrop + + + Staking Reward Schedule + + src/app/pages/space/pages/manage/manage.page.html + 135 + + Staking Reward Schedule + + + Export Current Stakers + + src/app/pages/space/pages/manage/manage.page.html + 141 + + Export Current Stakers + + + Active + + src/app/pages/space/pages/members/members.page.html + 18,19 + + 上線 + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 35,36 + + 已封鎖 + + + Blocked + + src/app/pages/space/pages/members/members.page.html + 52 + + 已封鎖 + + + Find Member + + src/app/pages/space/pages/members/members.page.html + 67 + + + src/app/pages/space/pages/members/members.page.html + 82 + + 尋找成員 + + + No Members + + src/app/pages/space/pages/members/members.page.html + 110,111 + + 沒有成員 + + + joined space on + + src/app/pages/space/pages/members/members.page.html + 118 + + 加入空間於 + + + Remove Guardian + + src/app/pages/space/pages/members/members.page.html + 161,162 + + Remove Guardian + + + Make Guardian + + src/app/pages/space/pages/members/members.page.html + 174,175 + + Make Guardian + + + Block Member + + src/app/pages/space/pages/members/members.page.html + 184,185 + + Block Member + + + Accept Member + + src/app/pages/space/pages/members/members.page.html + 187,188 + + Accept Member + + + Unblock Member + + src/app/pages/space/pages/members/members.page.html + 190,191 + + Unblock Member + + + Space - Members + + src/app/pages/space/pages/members/members.page.ts + 76 + + 空間 - 成員 + + + Space's members + + src/app/pages/space/pages/members/members.page.ts + 77 + + 空間的成員 + + + Upcoming Sale + + src/app/pages/space/pages/overview/overview.page.html + 7 + + 即將發售 + + + Live Token Sale + + src/app/pages/space/pages/overview/overview.page.html + 9 + + Live Token Sale + + + Space - + + src/app/pages/space/pages/overview/overview.page.ts + 55 + + 空間 - + + + proposal + + src/app/pages/space/pages/proposals/proposals.page.html + 43 + + 提案 + + + No Proposals + + src/app/pages/space/pages/proposals/proposals.page.html + 62,63 + + 沒有提案 + + + Space - Proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 54 + + 空間 - 提案 + + + Space's proposals + + src/app/pages/space/pages/proposals/proposals.page.ts + 55 + + 空間的提案 + + + Check out space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 34 + + 查看空間 + + + pending + + src/app/pages/space/pages/space/space-about/space-about.component.html + 153 + + 待處理 + + + Export members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 168 + + 匯出成員 + + + Exporting members + + src/app/pages/space/pages/space/space-about/space-about.component.html + 172 + + 匯出成員 + + + Open to join instantly + + src/app/pages/space/pages/space/space-about/space-about.component.html + 180 + + 公開可立即加入 + + + Requires approval to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 183 + + 需經同意才能加入 + + + Requires + + src/app/pages/space/pages/space/space-about/space-about.component.html + 187 + + Requires + + + staked value to join + + src/app/pages/space/pages/space/space-about/space-about.component.html + 193 + + staked value to join + + + Related Links + + src/app/pages/space/pages/space/space-about/space-about.component.html + 201 + + + src/app/pages/token/pages/token/token-info/token-info.component.html + 92 + + 相關鏈接 + + + Claim ownership + + src/app/pages/space/pages/space/space-about/space-about.component.html + 259,260 + + Claim ownership + + + Space's Wallet Addresses + + src/app/pages/space/pages/space/space-about/space-about.component.html + 290 + + Space's Wallet Addresses + + + Leave Space + + src/app/pages/space/pages/space/space-about/space-about.component.html + 321 + + 離開此空間 + + + About space + + src/app/pages/space/pages/space/space.page.html + 3 + + 關於空間 + + + Join Space + + src/app/pages/space/pages/space/space.page.html + 55,56 + + + src/app/pages/space/pages/space/space.page.html + 118,119 + + 加入空間 + + + Pending Request + + src/app/pages/space/pages/space/space.page.html + 68 + + + src/app/pages/space/pages/space/space.page.html + 131 + + 請求待處理 + + + Ask to join Space + + src/app/pages/space/pages/space/space.page.html + 70 + + + src/app/pages/space/pages/space/space.page.html + 133 + + Ask to join Space + + + Edit Space + + src/app/pages/space/pages/space/space.page.html + 82,83 + + + src/app/pages/space/pages/space/space.page.html + 160,161 + + 修改空間 + + + Stake + + src/app/pages/space/pages/space/space.page.html + 144 + + Stake + + + to Join + + src/app/pages/space/pages/space/space.page.html + 147 + + to Join + + + Add new space + + src/app/pages/space/pages/upsert/upsert.page.html + 2 + + 新增空間 + + + Edit space + + src/app/pages/space/pages/upsert/upsert.page.html + 3 + + 修改空間 + + + Space info + + src/app/pages/space/pages/upsert/upsert.page.html + 17 + + 空間資訊 + + + Title and description will be included on the Space. + + src/app/pages/space/pages/upsert/upsert.page.html + 19 + + 標題和說明將包含在空間內。 + + + Links will be included on the Space detail. Use account usernames for Github, Twitter and Discord (name#id). + + src/app/pages/space/pages/upsert/upsert.page.html + 56 + + 鏈接將涵括在空間細節中。帳戶名字用於Github, 推特和 Discord (name#id)。 + + + Only discord invite code supported (i.e. RBHqpkKC) + + src/app/pages/space/pages/upsert/upsert.page.html + 97 + + 只支持Discord邀請碼 (如 RBHqpkKC) + + + Type your Discord invite code + + src/app/pages/space/pages/upsert/upsert.page.html + 104 + + 輸入你的Discord邀請碼 + + + Space Type + + src/app/pages/space/pages/upsert/upsert.page.html + 125 + + 空間類型 + + + Each type has different characteristics. + + src/app/pages/space/pages/upsert/upsert.page.html + 127 + + 各種類別有不同的特性 + + + Open for anyone to join instantly + + src/app/pages/space/pages/upsert/upsert.page.html + 137,138 + + 容許立刻加入 + + + Requires a member approval + + src/app/pages/space/pages/upsert/upsert.page.html + 142 + + 需要會員核准 + + + Requires stake value (in space's token) + + src/app/pages/space/pages/upsert/upsert.page.html + 146 + + Requires stake value (in space's token) + + + Avatar is mandatory + + src/app/pages/space/pages/upsert/upsert.page.html + 174 + + 必須有頭像 + + + Create space + + src/app/pages/space/pages/upsert/upsert.page.html + 243,244 + + 創立空間 + + + Save space + + src/app/pages/space/pages/upsert/upsert.page.html + 256,257 + + 儲存空間 + + + Space - New + + src/app/pages/space/pages/upsert/upsert.page.ts + 76 + + 空間 - 新增 + + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + src/app/pages/space/pages/upsert/upsert.page.ts + 77 + + Sign up in minutes with our 1-click set up DAO-on-Demand. Fee-less on chain voting, Discover all of the amazing DAO's on the Soonaverse. + + + Upload new to replace existing. + + src/app/pages/space/pages/upsert/upsert.page.ts + 210 + + + src/app/pages/space/pages/upsert/upsert.page.ts + 216 + + 上傳更新以替換現有。 + + + Your brand is key. + + src/app/pages/space/pages/upsert/upsert.page.ts + 211 + + 您的品牌是關鍵。 + + + Make it personal. + + src/app/pages/space/pages/upsert/upsert.page.ts + 217 + + 設為個人。 + + + Swap by + + src/app/pages/swap/pages/market/swap.page.html + 3,12 + + Swap by + + + What is Swap? + + src/app/pages/swap/pages/market/swap.page.html + 20,21 + + What is Swap? + + + See Swap on iotabee + + src/app/pages/swap/pages/market/swap.page.html + 37,39 + + See Swap on iotabee + + + Create airdrop + + src/app/pages/token/pages/airdrops/airdrops.page.html + 8,9 + + Create airdrop + + + You can create a governance token airdrop for your members. To do this, upload a .csv file containing user addresses and allocation details. + + src/app/pages/token/pages/airdrops/airdrops.page.html + 17,19 + + 您可建立空投治理代幣給成員。上傳帶有成員地址與分配資料的csv檔案,即可執行。 + + + Some rows have been removed + + src/app/pages/token/pages/airdrops/airdrops.page.html + 92 + + 部分行列被移除 + + + Submit airdrop + + + src/app/pages/token/pages/airdrops/airdrops.page.html + 118,119 + + 提交空投 + + + + row is not valid + + src/app/pages/token/pages/airdrops/airdrops.page.ts + 73 + + 行列無效 + + + Breakdown + + src/app/pages/token/pages/metrics/metrics.page.html + 1 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 284 + + Breakdown + + + Token distribution + + src/app/pages/token/pages/metrics/metrics.page.html + 5 + + 代幣分發 + + + Total token supply + + src/app/pages/token/pages/metrics/metrics.page.ts + 56 + + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 96 + + 代幣總量 + + + Launchpad price per token + + src/app/pages/token/pages/metrics/metrics.page.ts + 67 + + Launchpad price per token + + + Initial Cap + + src/app/pages/token/pages/metrics/metrics.page.ts + 74 + + Initial Cap + + + Total melted tokens + + src/app/pages/token/pages/metrics/metrics.page.ts + 82 + + Total melted tokens + + + You can create only ONE token per space and it can never be changed. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 14,15 + + 您只能在每個空間只能創造一種代幣,且永遠不能更改。 + + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 23,26 + + Important information for creating a token on Soonaverse: Please read the instructions and fill out an application form available on this screen if you want to do public sale or make you token available on Soonaverse exchange. + + + Continue + + src/app/pages/token/pages/new/introduction/introduction.component.html + 38,39 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 191,192 + + + src/app/pages/token/pages/new/overview/overview.component.html + 104,105 + + 繼續 + + + Token Sale Requirements + + src/app/pages/token/pages/new/introduction/introduction.component.html + 50 + + Token Sale Requirements + + + To create a public sale or use the Token Exchange you must complete our KYC process. + + src/app/pages/token/pages/new/introduction/introduction.component.html + 52 + + To create a public sale or use the Token Exchange you must complete our KYC process. + + + Begin Process + + src/app/pages/token/pages/new/introduction/introduction.component.html + 58 + + Begin Process + + + Continue + + + src/app/pages/token/pages/new/introduction/introduction.component.html + 73,74 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 330,331 + + + src/app/pages/token/pages/new/overview/overview.component.html + 231,232 + + Continue + + + + Token info + + src/app/pages/token/pages/new/metrics/metrics.component.html + 9 + + + src/app/pages/token/pages/new/summary/summary.component.html + 14 + + + src/app/pages/token/pages/token/token.page.html + 3 + + Token info + + + Name is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 16 + + Name is invalid. + + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + src/app/pages/token/pages/new/metrics/metrics.component.html + 33 + + Symbol is invalid (Length must be 3 - 5 and letters must be A-Z). + + + Token supply + + src/app/pages/token/pages/new/metrics/metrics.component.html + 47 + + + src/app/pages/token/pages/new/summary/summary.component.html + 53 + + Token supply + + + Price per token (MIOTA) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 53 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 58 + + Price per token (MIOTA) + + + Price is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 54 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 38 + + Price is invalid. + + + Total token supply (up to 6 decimals are supported) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 68 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 74 + + Total token supply (up to 6 decimals are supported) + + + Total supply is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 69 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 107 + + Total supply is invalid. + + + Allocation title + + src/app/pages/token/pages/new/metrics/metrics.component.html + 111 + + Allocation title + + + % of tokens for sale + + src/app/pages/token/pages/new/metrics/metrics.component.html + 121 + + % of tokens for sale + + + Percentage of tokens is invalid. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 122 + + Percentage of tokens is invalid. + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 126 + + % of tokens for sale (Default 100%) + + + Only 1 of the allocations can be public + + src/app/pages/token/pages/new/metrics/metrics.component.html + 149 + + Only 1 of the allocations can be public + + + Sum of the percentages must be 100 + + src/app/pages/token/pages/new/metrics/metrics.component.html + 155 + + + src/app/pages/token/pages/new/metrics/metrics.component.html + 166 + + Sum of the percentages must be 100 + + + Invalid sum of percentages + + src/app/pages/token/pages/new/metrics/metrics.component.html + 160 + + Invalid sum of percentages + + + Add allocation + + src/app/pages/token/pages/new/metrics/metrics.component.html + 179 + + Add allocation + + + Token icon + + src/app/pages/token/pages/new/metrics/metrics.component.html + 221 + + + src/app/pages/token/pages/new/summary/summary.component.html + 265 + + Token icon + + + (Recomended size: 400 x 400px) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 223 + + (Recomended size: 400 x 400px) + + + Icon is mandatory + + src/app/pages/token/pages/new/metrics/metrics.component.html + 232 + + Icon is mandatory + + + Token price + + src/app/pages/token/pages/new/metrics/metrics.component.html + 264 + + + src/app/pages/token/pages/new/summary/summary.component.html + 283 + + Token price + + + Distribution of the token happens after the token offering end date. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 266 + + + src/app/pages/token/pages/new/summary/summary.component.html + 285 + + Distribution of the token happens after the token offering end date. + + + Configure the token supply first to see breakdown. + + src/app/pages/token/pages/new/metrics/metrics.component.html + 288 + + Configure the token supply first to see breakdown. + + + Token terms and conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 298 + + + src/app/pages/token/pages/new/summary/summary.component.html + 324 + + Token terms and conditions + + + Provide link for Terms and Conditions + + src/app/pages/token/pages/new/metrics/metrics.component.html + 300 + + Provide link for Terms and Conditions + + + Terms and Conditions link is invalid. (Start with http:// or https://) + + src/app/pages/token/pages/new/metrics/metrics.component.html + 306 + + Terms and Conditions link is invalid. (Start with http:// or https://) + + + Token allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 75 + + + src/app/pages/token/pages/new/summary/summary.component.html + 165 + + 代幣分配 + + + Allocation + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 76 + + + src/app/pages/token/pages/new/summary/summary.component.ts + 30 + + 分配 + + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + src/app/pages/token/pages/new/metrics/metrics.component.ts + 81,82 + + Please make sure that there is only one allocation marked for public sale as this could be later sold on Soonaverse. + You can initiate a public sale once the token is created and approved. + + + Create token + + src/app/pages/token/pages/new/new.page.html + 2 + + 創立代幣 + + + Introduction + + src/app/pages/token/pages/new/new.page.ts + 32 + + 簡介 + + + Metrics + + src/app/pages/token/pages/new/new.page.ts + 33 + + + src/app/pages/token/pages/token/token.page.ts + 38 + + Metrics + + + Summary + + src/app/pages/token/pages/new/new.page.ts + 35 + + 概要 + + + New Token + + src/app/pages/token/pages/new/new.page.ts + 72 + + 新增代幣 + + + Start your own crypto project on the secure, fee-less Shimmer network. Create your token today. + + src/app/pages/token/pages/new/new.page.ts + 73 + + 在安全且無須費用的 Shimmer 網路上啟動你的加密專案。今天就創建你的代幣。 + + + Token description + + src/app/pages/token/pages/new/overview/overview.component.html + 12 + + + src/app/pages/token/pages/new/summary/summary.component.html + 93 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 6 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 27 + + 代幣描述 + + + This text will be displayed on the main token page. + + src/app/pages/token/pages/new/overview/overview.component.html + 14 + + This text will be displayed on the main token page. + + + Title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 23 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 10 + + 標題無效 + + + Description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 38 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 22 + + Description is invalid. + + + Short description + + src/app/pages/token/pages/new/overview/overview.component.html + 55 + + + src/app/pages/token/pages/new/summary/summary.component.html + 129 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 49 + + 簡短說明 + + + Short description of the token which will be displayed on the token trading page. + + src/app/pages/token/pages/new/overview/overview.component.html + 57 + + Short description of the token which will be displayed on the token trading page. + + + Short title is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 66 + + Short title is invalid. + + + Short description is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 81 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 68 + + Short description is invalid. + + + Overview graphics + + src/app/pages/token/pages/new/overview/overview.component.html + 121 + + Overview graphics + + + Token introductory video / image + + src/app/pages/token/pages/new/overview/overview.component.html + 123 + + 代幣介紹影片/圖像 + + + Introductionary media is invalid. + + src/app/pages/token/pages/new/overview/overview.component.html + 132 + + 無效的介紹媒體 + + + Invalid URL. (Start with http:// or https://) + + src/app/pages/token/pages/new/overview/overview.component.html + 168 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 84 + + 網址無效(需以http:// 或 https://開頭) + + + Add link + + src/app/pages/token/pages/new/overview/overview.component.html + 191 + + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 107 + + 添加鏈接 + + + Trading Options + + src/app/pages/token/pages/new/overview/overview.component.html + 203 + + Trading Options + + + Enable trading + + src/app/pages/token/pages/new/overview/overview.component.html + 207 + + Enable trading + + + Edit + + src/app/pages/token/pages/new/summary/summary.component.html + 22,23 + + + src/app/pages/token/pages/new/summary/summary.component.html + 61,62 + + + src/app/pages/token/pages/new/summary/summary.component.html + 101,102 + + + src/app/pages/token/pages/new/summary/summary.component.html + 137,138 + + + src/app/pages/token/pages/new/summary/summary.component.html + 173,174 + + 編輯 + + + Name + + src/app/pages/token/pages/new/summary/summary.component.html + 30,31 + + 名稱 + + + Symbol + + src/app/pages/token/pages/new/summary/summary.component.html + 41,42 + + 符號 + + + Total token supply + + src/app/pages/token/pages/new/summary/summary.component.html + 80,81 + + 總供應量 + + + Description title + + src/app/pages/token/pages/new/summary/summary.component.html + 109,110 + + Description title + + + Description + + src/app/pages/token/pages/new/summary/summary.component.html + 120,121 + + 說明 + + + Short description title + + src/app/pages/token/pages/new/summary/summary.component.html + 145,146 + + Short description title + + + Short description + + src/app/pages/token/pages/new/summary/summary.component.html + 156,157 + + Short description + + + Allocation title + + src/app/pages/token/pages/new/summary/summary.component.html + 187,188 + + Allocation title + + + % of tokens for sale (Default 100%) + + src/app/pages/token/pages/new/summary/summary.component.html + 198,199 + + % of tokens for sale (Default 100%) + + + Submit token + + src/app/pages/token/pages/new/summary/summary.component.html + 227,228 + + 遞交代幣 + + + (Recommended size: 400 x 400px) + + src/app/pages/token/pages/new/summary/summary.component.html + 267 + + (建議尺寸: 400 x 400px) + + + Some description + + src/app/pages/token/pages/new/summary/summary.component.html + 326 + + 部分描述 + + + Terms&conditions + + src/app/pages/token/pages/new/summary/summary.component.html + 340 + + Terms&conditions + + + Submit token + + + src/app/pages/token/pages/new/summary/summary.component.html + 356,357 + + 遞交代幣 + + + + Trade token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 15,16 + + 交易代幣 + + + Buy Tokens + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 28,29 + + 購買代幣 + + + Schedule public sale + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 42,43 + + 規劃公開發售日程 + + + Allow Trading + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 57,58 + + Allow Trading + + + Edit token info + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 86 + + 編輯代幣資訊 + + + Check out token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 100 + + 檢視代幣 + + + Mint Token + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 132,133 + + Mint Token + + + Minting in progress + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 144,145 + + 鑄造中 + + + Token was not made available on decentralised network yet. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 150 + + Token was not made available on decentralised network yet. + + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/token/pages/token/token-buy/token-buy.component.html + 153,154 + + Token is not yet migrated to the decentralized network. Make sure you know what you are buying. + + + Trading enabled. + + src/app/pages/token/pages/token/token-buy/token-buy.component.ts + 86 + + Trading enabled. + + + Short description title is invalid. + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 56 + + Short description title is invalid. + + + Short description title + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 61 + + Short description title + + + Short token description + + src/app/pages/token/pages/token/token-edit/token-edit.component.html + 73 + + Short token description + + + Sale Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 4 + + Sale Info + + + Sale schedule + + src/app/pages/token/pages/token/token-info/token-info.component.html + 10 + + Sale schedule + + + During cooldown period you are able to trigger refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 41 + + During cooldown period you are able to trigger refund. + + + No Cooldown. Participants can't refund. + + src/app/pages/token/pages/token/token-info/token-info.component.html + 75,76 + + No Cooldown. Participants can't refund. + + + Token Info + + src/app/pages/token/pages/token/token-info/token-info.component.html + 80 + + + src/app/pages/token/pages/trade/trade.page.html + 57 + + + src/app/pages/token/pages/trade/trade.page.html + 624 + + 代幣資訊 + + + My purchased tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 4 + + 購入的代幣 + + + + + + + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 78,80 + + + + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + src/app/pages/token/pages/token/token-progress/token-progress.component.html + 90,92 + + Token sale goal reached! Token distribution will be fairly calculated and overages will be refunded. + + + Your Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 21 + + Your Deposit + + + Potential Tokens + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 22 + + Potential Tokens + + + Token Owned + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 23 + + Token Owned + + + Total Deposit + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 24 + + Total Deposit + + + Total Participants + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 25 + + Total Participants + + + Sale ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 45 + + 販售將結束於 + + + Cooldown in progress + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 62 + + 冷卻中 + + + Sale starts in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 69 + + 開始販售於 + + + Cooldown ends in + + src/app/pages/token/pages/token/token-progress/token-progress.component.ts + 73 + + 冷卻時間結束於 + + + + + + + src/app/pages/token/pages/token/token.page.html + 47,48 + + + + + Airdrops + + src/app/pages/token/pages/token/token.page.ts + 41 + + 空投 + + + Buy, sell, and trade SOON and Shimmer tokens on a non-custodial, secure L1 exchange. Get started in minutes. Join today. + + src/app/pages/token/pages/token/token.page.ts + 100 + + + src/app/pages/token/pages/trade/trade.page.ts + 275 + + 在一個非監管且安全的 L1 交易所上購買、銷售交易 SOON 代幣。幾分鐘內即可完成。今天就加入。 + + + Ongoing Sale + + src/app/pages/token/pages/token/token.page.ts + 248 + + 販售進行中 + + + Scheduled + + src/app/pages/token/pages/token/token.page.ts + 250 + + 已排程 + + + Cooldown + + src/app/pages/token/pages/token/token.page.ts + 252 + + 冷卻 + + + Processing + + src/app/pages/token/pages/token/token.page.ts + 254 + + 處理中 + + + Order book + + src/app/pages/token/pages/trade/trade.page.html + 94 + + + src/app/pages/token/pages/trade/trade.page.html + 644 + + Order book + + + Token chart + + src/app/pages/token/pages/trade/trade.page.html + 102 + + + src/app/pages/token/pages/trade/trade.page.html + 795 + + 代幣圖表 + + + My trading + + src/app/pages/token/pages/trade/trade.page.html + 158 + + My trading + + + Open buy orders + + src/app/pages/token/pages/trade/trade.page.html + 166 + + Open buy orders + + + Open sell orders + + src/app/pages/token/pages/trade/trade.page.html + 174 + + Open sell orders + + + Order history + + src/app/pages/token/pages/trade/trade.page.html + 182 + + Order history + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 213 + + + src/app/pages/token/pages/trade/trade.page.html + 287 + + 已完成 + + + There are no buys + + src/app/pages/token/pages/trade/trade.page.html + 257,258 + + There are no buys + + + Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 321,322 + + + src/app/pages/token/pages/trade/trade.page.html + 416,417 + + 已取消 + + + Expired + + src/app/pages/token/pages/trade/trade.page.html + 324,325 + + + src/app/pages/token/pages/trade/trade.page.html + 422,423 + + 已截止 + + + There are no sells + + src/app/pages/token/pages/trade/trade.page.html + 345,346 + + There are no sells + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 388 + + + src/app/pages/token/pages/trade/trade.page.html + 1213 + + Sell + + + Fulfilled + + src/app/pages/token/pages/trade/trade.page.html + 404,405 + + Fulfilled + + + Partially Fulfilled / Cancelled + + src/app/pages/token/pages/trade/trade.page.html + 410,411 + + Partially Fulfilled / Cancelled + + + Fulfilled / Cancelled (unfulfillable) + + src/app/pages/token/pages/trade/trade.page.html + 419,420 + + Fulfilled / Cancelled (unfulfillable) + + + There is no order history + + src/app/pages/token/pages/trade/trade.page.html + 434,435 + + There is no order history + + + Sell + + src/app/pages/token/pages/trade/trade.page.html + 477,478 + + + src/app/pages/token/pages/trade/trade.page.html + 488,489 + + + src/app/pages/token/pages/trade/trade.page.html + 919,920 + + Sell + + + Available + + src/app/pages/token/pages/trade/trade.page.html + 530,531 + + Available + + + Current Price + + src/app/pages/token/pages/trade/trade.page.html + 542 + + 目前價格 + + + Change 24h + + src/app/pages/token/pages/trade/trade.page.html + 564,565 + + 24小時變化 + + + ( ~ ) + + src/app/pages/token/pages/trade/trade.page.html + 729,732 + + ( ~ ) + + + current price + + src/app/pages/token/pages/trade/trade.page.html + 737,738 + + current price + + + There is no activity yet + + src/app/pages/token/pages/trade/trade.page.html + 788,789 + + There is no activity yet + + + Trade history + + src/app/pages/token/pages/trade/trade.page.html + 829,830 + + 交易歷史 + + + There is no trade history + + src/app/pages/token/pages/trade/trade.page.html + 894,895 + + There is no trade history + + + You don’t have enough tokens + + src/app/pages/token/pages/trade/trade.page.html + 928 + + You don’t have enough tokens + + + Amount to + + src/app/pages/token/pages/trade/trade.page.html + 935,936 + + Amount to + + + Balance + + src/app/pages/token/pages/trade/trade.page.html + 979 + + Balance + + + Set your price per 1 + + src/app/pages/token/pages/trade/trade.page.html + 998,1000 + + Set your price per 1 + + + LIMIT PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1009,1010 + + LIMIT PRICE + + + MARKET PRICE + + src/app/pages/token/pages/trade/trade.page.html + 1017,1018 + + MARKET PRICE + + + ~ + + src/app/pages/token/pages/trade/trade.page.html + 1038,1041 + + + src/app/pages/token/pages/trade/trade.page.html + 1145,1148 + + ~ + + + Set Current Price + + src/app/pages/token/pages/trade/trade.page.html + 1069 + + Set Current Price + + + Set BID + + src/app/pages/token/pages/trade/trade.page.html + 1093,1104 + + Set BID + + + The bid price is the highest price that a particular buyer is willing to pay. + + src/app/pages/token/pages/trade/trade.page.html + 1100 + + The bid price is the highest price that a particular buyer is willing to pay. + + + Set ASK + + src/app/pages/token/pages/trade/trade.page.html + 1109,1120 + + Set ASK + + + The asking price is the minimum price that an individual would be willing to sell their asset. + + src/app/pages/token/pages/trade/trade.page.html + 1116 + + The asking price is the minimum price that an individual would be willing to sell their asset. + + + You will spend + + src/app/pages/token/pages/trade/trade.page.html + 1129,1130 + + 你將花費 + + + Minimum total has to be at least + + src/app/pages/token/pages/trade/trade.page.html + 1163 + + Minimum total has to be at least + + + Soonaverse treasury receive 2.5% of the sale price. There are no other hidden fees. Buying tokens is free. + + src/app/pages/token/pages/trade/trade.page.html + 1179 + + Soonaverse 國庫會收到售價的 2.5%。沒有其他隱藏費用。購買 tokens 是無須費用的。 + + + 1h + + src/app/pages/token/pages/trade/trade.page.ts + 118 + + 1小時 + + + 4h + + src/app/pages/token/pages/trade/trade.page.ts + 119 + + 4小時 + + + 1d + + src/app/pages/token/pages/trade/trade.page.ts + 120 + + 1 天 + + + 1w + + src/app/pages/token/pages/trade/trade.page.ts + 121 + + 1 週 + + + Bids + + src/app/pages/token/pages/trade/trade.page.ts + 563 + + 出價 + + + Asks + + src/app/pages/token/pages/trade/trade.page.ts + 567 + + 委賣價 + + + Cancelled + + src/app/pages/token/services/helper.service.ts + 201 + + Cancelled + + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + src/app/pages/tokens/pages/all-tokens/all-tokens.page.ts + 42 + + Explore the top Shimmer, IOTA, and SOON cryptocurrencies. Price charts, crypto profiles, on a non-custodial, secure L1 exchange! Sign up today. + + + Go to trading pairs to add your favourite tokens. + + src/app/pages/tokens/pages/favourites/favourites.page.html + 47,48 + + Go to trading pairs to add your favourite tokens. + + + Add favourites + + src/app/pages/tokens/pages/favourites/favourites.page.html + 56,57 + + Add favourites + + + Tokens - Favourite + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 52 + + 代幣 - 我的最愛 + + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + src/app/pages/tokens/pages/favourites/favourites.page.ts + 53 + + Buy, trade, and hold your favorite Shimmer, IOTA, and SOON tokens. Our non-custodial, secure L1 exchange is ready for you! Sign up today. + + + Tokens - Launchpad + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 41 + + 代幣 - 啟動台 + + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + src/app/pages/tokens/pages/launchpad/launchpad.page.ts + 42 + + Raise funds, build your following, grow your audience, and LAUNCH your Shimmer tokens with the Soonaverse Launchpad. Join today. + + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + src/app/pages/tokens/pages/tokens/tokens.page.html + 11,13 + + Some tokens may not yet be migrated to the decentralized network. Make sure you know what you are buying. + + + Highlighted Token + + src/app/pages/tokens/pages/tokens/tokens.page.html + 49 + + Highlighted Token + + + Favorites + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 17 + + Favorites + + + All tokens + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 20 + + All tokens + + + Trading pairs + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 21 + + Trading pairs + + + Launchpad + + src/app/pages/tokens/pages/tokens/tokens.page.ts + 22 + + Launchpad + + + Tokens - Trading Pairs + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 43 + + 代幣 - 交易對 + + + The most complete listing of Shimmer projects, SOON currency pairs and markets, on a non-custodial, secure L1 exchange. Sign up today! + + src/app/pages/tokens/pages/trading-pairs/trading-pairs.page.ts + 44 + + 最完整的 Shimmer 專案列表,SOON 交易對和市場,非監管且安全的 L1 交易所。今天就註冊! + + + AuditOne Validation + + src/app/service-modules/audit-one/components/modal/modal.component.html + 3 + + AuditOne Validation + + + Requested On + + src/app/service-modules/audit-one/components/modal/modal.component.html + 22 + + Requested On + + + Last Update + + src/app/service-modules/audit-one/components/modal/modal.component.html + 23 + + Last Update + + + There are no records. + + src/app/service-modules/audit-one/components/modal/modal.component.html + 52 + + 沒有記錄 + + + AuditOne + + src/app/service-modules/audit-one/components/widget/widget.component.html + 11 + + AuditOne + + + Verified + + src/app/service-modules/audit-one/components/widget/widget.component.html + 47 + + Verified + + + See more + + src/app/service-modules/audit-one/components/widget/widget.component.html + 52 + + See more + + + + diff --git a/src/main.server.ts b/src/main.server.ts new file mode 100644 index 0000000..92f4697 --- /dev/null +++ b/src/main.server.ts @@ -0,0 +1,13 @@ +import '@angular/localize/init'; +import '@angular/platform-server/init'; + +import { enableProdMode } from '@angular/core'; + +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +export { renderModule } from '@angular/platform-server'; +export { AppServerModule } from './app/app.server.module'; diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..821126b --- /dev/null +++ b/src/main.ts @@ -0,0 +1,21 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +// Let's load. +function bootstrap() { + platformBrowserDynamic() + .bootstrapModule(AppModule) + .catch((err) => console.error(err)); +} + +if (document.readyState === 'complete') { + bootstrap(); +} else { + document.addEventListener('DOMContentLoaded', bootstrap); +} diff --git a/src/maintenance.html b/src/maintenance.html new file mode 100644 index 0000000..739acf8 --- /dev/null +++ b/src/maintenance.html @@ -0,0 +1,13 @@ + + + + + Soonaverse + + + + + + SOON + + diff --git a/src/polyfills.ts b/src/polyfills.ts new file mode 100644 index 0000000..d7b2002 --- /dev/null +++ b/src/polyfills.ts @@ -0,0 +1,4 @@ +import '@angular/localize/init'; +import 'zone.js'; +// js-big-decimal fix +(window as any).global = window; diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 0000000..885a66b --- /dev/null +++ b/src/test.ts @@ -0,0 +1,27 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files +import 'zone.js/testing'; +// organize-imports-disable-next-line +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting, +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context( + path: string, + deep?: boolean, + filter?: RegExp, + ): { + (id: string): T; + keys(): string[]; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); + +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/src/theme/.gitkeep b/src/theme/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/theme/01-base/.gitkeep b/src/theme/01-base/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/theme/01-base/document.less b/src/theme/01-base/document.less new file mode 100644 index 0000000..9d73f82 --- /dev/null +++ b/src/theme/01-base/document.less @@ -0,0 +1,20 @@ +@import '../light.less'; +@import '../dark.less'; + +html, +body { + @apply h-full; +} + +body { + @apply text-foregrounds-primary bg-backgrounds-secondary; + + &.dark { + @apply text-foregrounds-primary-dark bg-backgrounds-secondary-dark; + } +} + +html { + width: 100vw; + overflow-x: hidden; +} diff --git a/src/theme/01-base/font.less b/src/theme/01-base/font.less new file mode 100644 index 0000000..2eef6e6 --- /dev/null +++ b/src/theme/01-base/font.less @@ -0,0 +1,8 @@ +body { + @apply font-display; + @apply font-light; + + font-smooth: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/src/theme/01-base/headings.less b/src/theme/01-base/headings.less new file mode 100644 index 0000000..ffd964c --- /dev/null +++ b/src/theme/01-base/headings.less @@ -0,0 +1,81 @@ +h1, +.h1, +h2, +.h2, +h3, +.h3, +h4, +.h4, +h5, +.h5, +h6, +.h6, +.display-1, +.display-2, +.display-3, +.display-4 { + @apply font-display; + @apply font-bold; + @apply mt-0; + @apply text-foregrounds-primary dark:text-foregrounds-primary-dark; +} + +h1, +.h1 { + @apply text-4xl; + @apply mb-10; +} + +h2, +.h2 { + @apply text-3xl; + @apply mb-8; +} + +h3, +.h3 { + @apply text-2xl; + @apply mb-6; +} + +h4, +.h4 { + @apply text-xl; + @apply mb-6; +} + +h5, +.h5 { + @apply text-lg; + @apply mb-4; +} + +h6, +.h6 { + @apply text-base; + @apply mb-2; +} + +.display-1 { + @apply text-8xl; + @apply mb-32; +} + +.display-2 { + @apply text-7xl; + @apply mb-24; +} + +.display-3 { + @apply text-6xl; + @apply mb-20; +} + +.display-4 { + @apply text-5xl; + @apply mb-16; +} + +.ant-modal-title { + @apply font-bold; +} diff --git a/src/theme/02-components/.gitkeep b/src/theme/02-components/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/theme/02-components/alert.less b/src/theme/02-components/alert.less new file mode 100644 index 0000000..3e3adbc --- /dev/null +++ b/src/theme/02-components/alert.less @@ -0,0 +1,15 @@ +.ant-alert { + @apply bg-alerts-warning dark:bg-alerts-warning-dark; + + .ant-alert-icon { + @apply text-icons-primary dark:text-icons-primary-dark; + } + + .ant-alert-message { + @apply text-foregrounds-primary dark:text-foregrounds-on-primary-dark font-bold text-lg; + } + + .ant-alert-description { + @apply text-foregrounds-primary dark:text-foregrounds-tertiary-dark font-medium text-base; + } +} diff --git a/src/theme/02-components/avatar.less b/src/theme/02-components/avatar.less new file mode 100644 index 0000000..84b5a5b --- /dev/null +++ b/src/theme/02-components/avatar.less @@ -0,0 +1,3 @@ +.wen-avatar-background { + @apply bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark border-tags-border dark:border-tags-border-dark; +} diff --git a/src/theme/02-components/button.less b/src/theme/02-components/button.less new file mode 100644 index 0000000..13ac59d --- /dev/null +++ b/src/theme/02-components/button.less @@ -0,0 +1,170 @@ +.ant-btn:disabled { + opacity: 0.5; +} + +.ant-dropdown-trigger > .anticon.anticon-down, +.ant-dropdown-link > .anticon.anticon-down, +.ant-dropdown-button > .anticon.anticon-down { + font-size: @font-size-lg; + vertical-align: baseline; +} + +.ant-dropdown-menu-item:hover, +.ant-dropdown-menu-submenu-title:hover { + background-color: @select-item-active-bg; +} + +.ant-btn > .anticon { + vertical-align: baseline; +} + +.ant-btn { + font-size: @font-size-lg; + @apply inline-flex place-items-center justify-center bg-buttons-secondary-background dark:bg-buttons-secondary-background-dark dark:border-none min-w-max; + + > * { + @apply text-inherit; + } + + &:not([nztype='default']) { + @apply text-buttons-text dark:text-buttons-text-dark; + } +} + +.ant-btn.ant-btn-block { + @apply flex; +} + +.ant-btn-primary { + @apply bg-buttons-primary-enabled dark:bg-buttons-primary-enabled-dark text-foregrounds-on-primary; + + &:hover { + @apply bg-buttons-primary-on-hover dark:bg-buttons-primary-on-hover-dark text-foregrounds-on-primary; + } + + &:active, + &:focus { + @apply bg-buttons-primary-pressed dark:bg-buttons-primary-pressed-dark border-buttons-primary-pressed; + } +} + +a.ant-btn { + -webkit-appearance: none; + @apply py-0; +} + +a.ant-btn&:not([nztype='default']) { + @apply text-textlink-enabled dark:text-textlink-enabled-dark; + + &:hover { + @apply text-textlink-on-hover; + } + + &:active, + &:focus { + @apply text-textlink-pressed; + } + + &:not(.ant-btn-block) { + @apply bg-transparent dark:bg-transparent; + } +} + +.ant-btn-lg { + border-radius: @border-radius-lg; +} + +.ant-btn-dangerous { + border-color: transparent; + @apply border-transparent bg-buttons-destructive dark:bg-buttons-destructive; + + &:hover { + @apply bg-buttons-destructive dark:bg-buttons-destructive; + } +} + +.wen-secondary { + @apply text-buttons-secondary-enabled dark:text-buttons-secondary-enabled-dark bg-buttons-secondary-background dark:bg-buttons-secondary-background-dark border-none !important; + + &:hover { + @apply text-buttons-secondary-on-hover dark:text-buttons-secondary-on-hover-dark !important; + } + + &:active, + &:focus { + @apply text-buttons-secondary-pressed dark:text-buttons-secondary-pressed-dark !important; + + // path { + // stroke: white; + // } + } + + &.selected { + @apply bg-accent-primary dark:bg-accent-primary-dark border-accent-primary dark:border-accent-primary-dark text-white !important; + } + + &.ant-btn-dangerous { + @apply text-buttons-secondary-destructive dark:text-buttons-secondary-destructive-dark !important; + } +} + +// sort by button +.wen-sort-button { + .ant-select-selector { + border: none !important; + } + + .ant-select-selection-item { + justify-content: space-between; + display: flex; + align-items: center; + } +} + +.ant-select-dropdown { + .cdk-virtual-scroll-viewport { + min-height: 100px; + } +} + +.wen-header-button { + @apply text-foregrounds-primary dark:text-foregrounds-primary-dark hover:border-accent-primary dark:border-accent-primary-dark border border-solid hover:text-foregrounds-primary dark:text-foregrounds-primary-dark; + + outline: @input-hover-border-color; + + &:focus { + @apply border-accent-primary dark:border-accent-primary-dark text-foregrounds-primary dark:text-foregrounds-primary-dark; + + outline: 1px solid @input-hover-border-color; + } +} + +.isMember { + .wen-header-button { + @apply bg-backgrounds-secondary dark:bg-backgrounds-secondary-dark hover:bg-backgrounds-secondary dark:bg-backgrounds-secondary-dark; + } +} + +.ant-popover-inner-content { + @apply text-accent-secondary dark:text-accent-secondary-dark font-medium text-xs leading-4 px-2 py-1; +} + +.ant-btn-sm { + @apply text-sm; +} + +.ant-btn-circle { + @apply aspect-square p-0; +} + +.wen-btn-underline { + @apply font-medium text-buttons-primary-enabled dark:text-buttons-primary-enabled-dark cursor-pointer; +} + +.wen-btn-link { + @apply text-buttons-primary-enabled dark:text-buttons-primary-enabled-dark cursor-pointer; +} + +.wen-btn-max { + @apply w-max !important; +} diff --git a/src/theme/02-components/card.less b/src/theme/02-components/card.less new file mode 100644 index 0000000..2077295 --- /dev/null +++ b/src/theme/02-components/card.less @@ -0,0 +1,35 @@ +.ant-card { + @apply bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark text-foregrounds-primary dark:text-foregrounds-primary-dark; +} + +.ant-card-head-title { + @apply font-bold pb-0 text-foregrounds-primary dark:text-foregrounds-primary-dark; +} + +.ant-card-meta-title { + @apply font-bold text-xl text-foregrounds-primary dark:text-foregrounds-primary-dark; +} + +.ant-card-meta-description { + @apply font-medium text-sm; +} + +.wen-card { + @apply filter transition-all drop-shadow-none; +} + +.wen-cards-wrapper { + @apply w-full grid justify-between items-center gap-6 grid-cols-1 md:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4 3xl:grid-cols-5 4xl:grid-cols-6; +} + +.wen-cards-wrapper-light { + @apply w-full grid justify-between items-center gap-6 grid-cols-1 md:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-3 3xl:grid-cols-4 4xl:grid-cols-4; +} + +.wen-card:hover { + @apply drop-shadow-card; +} + +.wen-card-highlight-title { + @apply ml-2 text-xs font-medium text-foregrounds-secondary dark:text-foregrounds-secondary-dark; +} diff --git a/src/theme/02-components/checkbox.less b/src/theme/02-components/checkbox.less new file mode 100644 index 0000000..9d2b592 --- /dev/null +++ b/src/theme/02-components/checkbox.less @@ -0,0 +1,27 @@ +.ant-checkbox { + .ant-checkbox-inner { + @apply w-6 h-6 rounded-lg border-2 border-inputs-border dark:border-inputs-border-dark; + + &:after { + @apply w-2 h-3 left-1/4; + } + } +} + +.ant-checkbox-checked { + .ant-checkbox-inner { + @apply bg-accent-primary dark:bg-accent-primary-dark border-accent-primary dark:border-accent-primary-dark; + } +} + +.ant-checkbox { + @apply text-foregrounds-primary dark:text-foregrounds-primary-dark; +} + +.ant-checkbox-wrapper { + @apply text-foregrounds-primary dark:text-foregrounds-primary-dark; + + .ant-checkbox-disabled + span { + @apply text-foregrounds-secondary dark:text-foregrounds-secondary-dark; + } +} diff --git a/src/theme/02-components/datepicker.less b/src/theme/02-components/datepicker.less new file mode 100644 index 0000000..3949a1c --- /dev/null +++ b/src/theme/02-components/datepicker.less @@ -0,0 +1,42 @@ +.ant-picker { + @apply bg-inputs-background dark:bg-inputs-background-dark; + + .ant-picker-input { + input { + @apply text-foregrounds-primary dark:text-foregrounds-primary-dark font-medium text-base; + } + } +} + +.ant-picker-panel-container { + @apply bg-inputs-background dark:bg-inputs-background-dark; + + .ant-picker-cell-disabled, + .ant-picker-header-view, + .ant-picker-content th, + .ant-picker-time-panel-cell-inner { + @apply text-foregrounds-secondary dark:text-foregrounds-secondary-dark font-medium !important; + } + + .ant-picker-time-panel-cell { + .ant-picker-time-panel-cell-inner:hover { + @apply bg-accent-primary dark:bg-accent-primary-dark !important; + } + } + + .ant-picker-time-panel-cell-selected { + .ant-picker-time-panel-cell-inner { + @apply bg-accent-primary dark:bg-accent-primary-dark !important; + } + } + + .ant-picker-cell-inner { + &:hover { + @apply bg-accent-primary dark:bg-accent-primary-dark !important; + } + } + + .ant-picker-cell-in-view { + @apply text-foregrounds-primary dark:text-foregrounds-primary-dark font-medium; + } +} diff --git a/src/theme/02-components/drawer.less b/src/theme/02-components/drawer.less new file mode 100644 index 0000000..4577d26 --- /dev/null +++ b/src/theme/02-components/drawer.less @@ -0,0 +1,40 @@ +.ant-drawer-title { + @apply text-4xl font-bold mt-2; +} + +.ant-drawer-close { + @apply px-12 py-16; +} + +.ant-drawer-right { + .ant-drawer-content, + .ant-drawer-content-wrapper { + @apply lg:rounded-l-large; + } +} + +.ant-drawer-left { + .ant-drawer-content, + .ant-drawer-content-wrapper { + @apply lg:rounded-r-3xl; + } +} + +.ant-drawer-bottom { + .ant-drawer-content, + .ant-drawer-content-wrapper { + @apply rounded-t-3xl; + } +} + +.ant-drawer-header, +.ant-drawer-body { + @apply bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark; +} + +.ant-drawer-content-wrapper.secondary { + .ant-drawer-header, + .ant-drawer-body { + @apply bg-backgrounds-secondary dark:bg-backgrounds-secondary-dark; + } +} diff --git a/src/theme/02-components/dropdown.less b/src/theme/02-components/dropdown.less new file mode 100644 index 0000000..7434b08 --- /dev/null +++ b/src/theme/02-components/dropdown.less @@ -0,0 +1,11 @@ +.ant-dropdown-menu { + @apply bg-backgrounds-secondary dark:bg-backgrounds-secondary-dark; +} + +.ant-dropdown-menu-item { + @apply text-foregrounds-primary dark:text-foregrounds-primary-dark; +} + +.ant-dropdown-menu-item:hover { + @apply bg-accent-selected dark:bg-accent-selected-dark; +} diff --git a/src/theme/02-components/form.less b/src/theme/02-components/form.less new file mode 100644 index 0000000..4ff3096 --- /dev/null +++ b/src/theme/02-components/form.less @@ -0,0 +1,48 @@ +.ant-input, +.ant-input-affix-wrapper, +.ant-input-number, +.ant-picker-input > input, +.ant-select-selector { + outline-color: @input-hover-border-color; +} + +.ant-input:focus, +.ant-input-focused, +.ant-input-affix-wrapper:focus, +.ant-input-affix-wrapper-focused, +.ant-input-number:focus, +.ant-input-number-focused, +.ant-input-number:focus-within, +.ant-picker:focus-within, +.ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) + .ant-select-selector { + border-color: @input-hover-border-color; + border-width: 1px !important; + outline: 1px solid @input-hover-border-color; + box-shadow: none; +} + +.ant-input-affix-wrapper > input.ant-input, +.ant-picker-input > input { + border-radius: 0; +} + +.outline-0 { + outline: 0 !important; +} + +.ant-radio-wrapper { + @apply leading-10; +} + +.ant-radio { + @apply font-medium; +} + +.ant-tooltip-inner { + @apply px-4 py-6; +} + +.ant-input-group-addon { + @apply px-2; +} diff --git a/src/theme/02-components/input.less b/src/theme/02-components/input.less new file mode 100644 index 0000000..da4e6ff --- /dev/null +++ b/src/theme/02-components/input.less @@ -0,0 +1,85 @@ +.ant-input, +.ant-input-search, +.ant-input-affix-wrapper, +.ant-input-number-input { + @apply bg-inputs-background dark:bg-inputs-background-dark text-foregrounds-primary dark:text-foregrounds-primary-dark text-base font-medium; + + &:disabled { + @apply bg-[#f5f5f5] dark:bg-inputs-background-dark dark:border-tags-border-dark; + } + + &.ant-input-status-error { + @apply dark:bg-inputs-background-dark; + background: inherit !important; + } +} + +.ant-input-group-addon { + @apply bg-inputs-background dark:bg-inputs-background-dark text-foregrounds-primary dark:text-foregrounds-primary-dark; +} + +input::placeholder, +textarea::placeholder { + @apply text-foregrounds-placeholder dark:text-foregrounds-placeholder-dark; +} + +.floating-title { + .ant-form-item-label { + display: none; + opacity: 0; + } + + .ant-input, + .ant-picker, + .ant-input-number-input { + padding-top: 16px; + padding-bottom: 16px; + } + + &.value { + .ant-form-item-label { + position: absolute; + z-index: 1; + margin-left: 24px; + pointer-events: none; + display: block; + opacity: 1; + + label { + font-size: 12px; + color: grey; + } + } + + .ant-input, + .ant-picker, + .ant-input-number-input { + line-height: 24px; + padding-bottom: 8px; + padding-top: 24px; + } + } +} + +.floating-title:focus-within { + .ant-form-item-label { + position: absolute; + z-index: 1; + margin-left: 24px; + pointer-events: none; + display: block; + opacity: 1; + + label { + font-size: 12px; + color: grey; + } + } + + .ant-input, + .ant-picker, + .ant-input-number-input { + padding-bottom: 8px; + padding-top: 24px; + } +} diff --git a/src/theme/02-components/link.less b/src/theme/02-components/link.less new file mode 100644 index 0000000..ef008e4 --- /dev/null +++ b/src/theme/02-components/link.less @@ -0,0 +1,12 @@ +a.link { + @apply inline-block; + @apply font-semibold; + @apply text-sm; + @apply text-red-400; + + &:hover, + &:active, + &:focus { + @apply underline; + } +} diff --git a/src/theme/02-components/menu.less b/src/theme/02-components/menu.less new file mode 100644 index 0000000..501242b --- /dev/null +++ b/src/theme/02-components/menu.less @@ -0,0 +1,48 @@ +.ant-menu-horizontal > [nz-menu-item] { + @apply inline-flex items-center justify-center py-5 px-0; +} + +[nz-menu] > .ant-menu-item::after { + border-bottom: 0; +} + +[nz-menu] > .ant-menu-item-selected { + @apply text-tabs-text-selected dark:text-tabs-text-selected-dark bg-tabs-selected dark:bg-tabs-selected-dark; +} + +[nz-menu] > .ant-menu-item:hover:not(.ant-menu-item-selected) { + @apply text-tabs-text-on-hover dark:text-tabs-text-on-hover-dark; +} + +.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-selected { + @apply text-tabs-text-selected dark:text-tabs-text-selected-dark !important; +} + +.ant-menu-item:active, +.ant-menu-submenu-title:active { + @apply text-tabs-text-selected dark:text-tabs-text-selected-dark bg-tabs-selected dark:bg-tabs-selected-dark; +} + +.ant-menu-item { + @apply text-foregrounds-primary dark:text-foregrounds-primary-dark !important; +} + +.ant-menu-horizontal > .ant-menu-item { + @apply lg:text-icons-primary dark:text-tabs-text-selected-dark lg:dark:text-icons-primary-dark; +} + +.ant-menu-vertical { + @apply bg-transparent text-foregrounds-primary dark:text-foregrounds-primary-dark dark:bg-backgrounds-primary-dark; + + .ant-menu-submenu { + @apply h-12 p-0 text-current lg:w-10 lg:h-10 rounded-3xl my-1; + } + + .ant-menu-submenu-title { + @apply flex items-center justify-center p-0 rounded-3xl; + } + + .ant-menu-submenu-arrow { + display: none; + } +} diff --git a/src/theme/02-components/modal.less b/src/theme/02-components/modal.less new file mode 100644 index 0000000..582a03b --- /dev/null +++ b/src/theme/02-components/modal.less @@ -0,0 +1,31 @@ +.ant-modal-content { + @apply bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark text-foregrounds-primary dark:text-foregrounds-primary-dark; +} + +.wen-transaction-select-container { + @apply flex flex-col justify-between h-full mt-10 lg:items-center lg:justify-start; +} + +.wen-transaction-active-container { + @apply flex flex-col items-center justify-between h-full mt-10 lg:justify-start; +} + +.wen-transaction-wait-container { + @apply flex flex-col items-center justify-between h-full lg:justify-start; +} + +.wen-modal-block-title { + @apply px-5 pt-3 pb-2 text-sm font-bold border-b; +} + +.wen-modal-history-log { + @apply h-32 px-5 pt-4 pb-2 mr-2 overflow-y-scroll; +} + +.wen-modal-history-log-item { + @apply relative flex items-center my-1; +} + +.wen-modal-tabs { + @apply absolute bottom-0 w-full top-56 lg:static; +} diff --git a/src/theme/02-components/notification.less b/src/theme/02-components/notification.less new file mode 100644 index 0000000..5921e52 --- /dev/null +++ b/src/theme/02-components/notification.less @@ -0,0 +1,9 @@ +.ant-notification { + .ant-notification-notice { + @apply bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark; + + .ant-notification-notice-message { + @apply text-foregrounds-primary dark:text-foregrounds-primary-dark; + } + } +} diff --git a/src/theme/02-components/progress.less b/src/theme/02-components/progress.less new file mode 100644 index 0000000..42df6f3 --- /dev/null +++ b/src/theme/02-components/progress.less @@ -0,0 +1,11 @@ +.ant-progress-inner { + @apply bg-backgrounds-secondary dark:bg-backgrounds-secondary-dark; +} + +.ant-progress-bg { + @apply bg-accent-primary dark:bg-accent-primary-dark; +} + +.ant-progress-text { + @apply text-foregrounds-secondary dark:text-foregrounds-secondary-dark; +} diff --git a/src/theme/02-components/range-slider.less b/src/theme/02-components/range-slider.less new file mode 100644 index 0000000..030d527 --- /dev/null +++ b/src/theme/02-components/range-slider.less @@ -0,0 +1,72 @@ +.ais-RangeSlider .noUi-target { + background-color: rgba(65, 66, 71, 0.08); + border-radius: 3px; + direction: ltr; + height: 3px; + margin-top: 35px; + position: relative; + width: calc(100% - 10px); +} + +.ais-RangeSlider .noUi-base { + cursor: pointer; + height: 100%; + width: 100%; + z-index: 1; +} + +.ais-RangeSlider .noUi-origin, +.ais-RangeSlider .noUi-origin * { + outline: none; +} + +.ais-RangeSlider .noUi-origin, +.ais-RangeSlider .noUi-connect { + position: absolute; +} + +.ais-RangeSlider .noUi-connect { + background-color: #e2a400; + border-radius: 3px; + height: 3px; +} + +.ais-RangeSlider .noUi-handle { + background-image: linear-gradient(to top, #f5f5fa, #fff); + border-radius: 50%; + box-shadow: 0 4px 11px 0 rgba(37, 44, 97, 0.15), 0 2px 3px 0 rgba(93, 100, 148, 0.2); + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + height: 14px; + position: relative; + top: -6px; + width: 14px; +} + +.ais-RangeSlider .noUi-handle .noUi-tooltip::before { + color: #e2a400; + content: ''; + font-size: 0.6; + margin-right: 4px; + position: relative; +} + +.ais-RangeSlider .noUi-handle .noUi-tooltip { + cursor: grab; + display: flex; + font-size: 0.75rem; + font-weight: bold; + left: 50%; + position: absolute; + top: -23px; + transform: translate(-50%, 0); +} + +@media (max-width: 899px) { + .ais-RangeSlider .noUi-handle { + height: 24px; + left: -12px; + top: -12px; + width: 24px; + } +} diff --git a/src/theme/02-components/select.less b/src/theme/02-components/select.less new file mode 100644 index 0000000..042e02b --- /dev/null +++ b/src/theme/02-components/select.less @@ -0,0 +1,39 @@ +.ant-select-selector { + @apply min-h-10 bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark !important; + + .ant-select-selection-search { + @apply flex justify-center items-center; + } + + .ant-select-selection-placeholder { + @apply font-medium text-base; + } + + .ant-select-selection-item { + @apply flex items-center lg:mr-3 text-foregrounds-primary dark:text-foregrounds-primary-dark; + } +} + +.ant-select-dropdown { + @apply bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark; + + .ant-select-item-option { + @apply text-foregrounds-primary dark:text-foregrounds-primary-dark; + } + + .ant-select-item-option-selected, + .ant-select-item-option:hover, + .ant-select-item-option-active:not(.ant-select-item-option-disabled) { + @apply bg-accent-selected dark:bg-accent-selected-dark; + } +} + +.wen-select-min-height { + .cdk-virtual-scroll-viewport { + min-height: 100px; + } +} + +.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector { + @apply bg-[#f5f5f5] dark:bg-inputs-background-dark dark:border-tags-border-dark !important; +} diff --git a/src/theme/02-components/sider.less b/src/theme/02-components/sider.less new file mode 100644 index 0000000..6b56022 --- /dev/null +++ b/src/theme/02-components/sider.less @@ -0,0 +1,7 @@ +.ant-layout-sider-light { + @apply bg-inherit; +} + +.ant-layout-sider-dark { + @apply bg-inherit; +} diff --git a/src/theme/02-components/slider.less b/src/theme/02-components/slider.less new file mode 100644 index 0000000..e28e4d1 --- /dev/null +++ b/src/theme/02-components/slider.less @@ -0,0 +1,14 @@ +.ant-slider, +.ant-slider:hover { + .ant-slider-rail { + @apply bg-foregrounds-separator dark:bg-foregrounds-separator-dark; + } + + .ant-slider-track { + @apply bg-foregrounds-tertiary dark:bg-foregrounds-tertiary-dark; + } + + .ant-slider-handle { + @apply bg-buttons-primary-enabled dark:bg-buttons-primary-enabled-dark border-buttons-primary-enabled dark:border-buttons-primary-enabled-dark; + } +} diff --git a/src/theme/02-components/table.less b/src/theme/02-components/table.less new file mode 100644 index 0000000..4d9aa12 --- /dev/null +++ b/src/theme/02-components/table.less @@ -0,0 +1,68 @@ +.ant-table-content { + @apply bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark text-foregrounds-primary dark:text-foregrounds-primary-dark; + + .ant-table-thead > tr > th { + @apply text-foregrounds-secondary dark:text-foregrounds-secondary-dark; + } + + .ant-table-thead > tr > th, + .ant-table-tbody > tr > td { + @apply border-b-foregrounds-separator dark:border-b-foregrounds-separator-dark; + + &.right { + @apply text-right !important; + } + + &.padding-left-0 { + @apply pl-0 !important; + } + + &.padding-left-5 { + @apply pl-5 !important; + } + + &.padding-right-0 { + @apply pr-0 !important; + } + } + + .ant-table-tbody > tr > td { + @apply text-foregrounds-primary dark:text-foregrounds-primary-dark font-medium; + } + + .ant-table-tbody .ant-table-row:hover .ant-table-cell { + @apply bg-accent-selected dark:bg-accent-selected-dark !important; + } + + .ant-table-placeholder:hover { + .ant-table-cell { + @apply bg-inherit; + } + } +} + +.ant-table-pagination { + @apply flex justify-center; + + ul { + @apply flex justify-center; + } + + .ant-pagination-item, + .ant-pagination-prev .ant-pagination-item-link, + .ant-pagination-next .ant-pagination-item-link { + @apply flex justify-center items-center border-0 font-medium text-sm bg-transparent; + + a { + @apply text-foregrounds-primary dark:text-foregrounds-primary-dark; + } + } + + .ant-pagination-item-active { + @apply bg-accent-primary dark:bg-accent-primary-dark; + + a { + @apply text-foregrounds-on-primary dark:text-foregrounds-on-primary-dark; + } + } +} diff --git a/src/theme/02-components/tag.less b/src/theme/02-components/tag.less new file mode 100644 index 0000000..8e8da6a --- /dev/null +++ b/src/theme/02-components/tag.less @@ -0,0 +1,25 @@ +.ant-tag-checkable { + @apply h-10 rounded-3xl bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark text-base font-semibold px-4 mr-4 border-3 text-foregrounds-primary dark:text-foregrounds-primary-dark; + line-height: 2.125rem; // 2.5rem height - 2 * 3px border +} + +.ant-tag-checkable:active, +.ant-tag-checkable-checked { + @apply border-tabs-selected dark:border-tabs-selected-dark bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark text-tabs-selected dark:text-tabs-selected-dark; +} + +.ant-tag-checkable:not(.ant-tag-checkable-checked):hover { + @apply text-tabs-text-on-hover dark:text-tabs-text-on-hover-dark; +} + +.wen-status-tag { + @apply px-2 py-1 font-medium text-xs text-foregrounds-primary dark:text-foregrounds-primary-dark rounded-lg h-6 leading-none; + + &.text-white { + color: @white; + } +} + +.wen-xp-tag { + @apply font-medium text-sm px-3 py-2 rounded-3xl text-foregrounds-primary dark:text-foregrounds-primary-dark bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark border-backgrounds-secondary dark:border-backgrounds-secondary-dark border-2; +} diff --git a/src/theme/02-components/tooltip.less b/src/theme/02-components/tooltip.less new file mode 100644 index 0000000..91e1ed5 --- /dev/null +++ b/src/theme/02-components/tooltip.less @@ -0,0 +1,3 @@ +.ant-tooltip-inner { + @apply text-foregrounds-primary dark:text-foregrounds-primary-dark bg-backgrounds-tertiary dark:bg-backgrounds-tertiary-dark font-medium text-sm px-4 py-2.5; +} diff --git a/src/theme/02-components/upload.less b/src/theme/02-components/upload.less new file mode 100644 index 0000000..d733d31 --- /dev/null +++ b/src/theme/02-components/upload.less @@ -0,0 +1,42 @@ +.ant-upload.ant-upload-drag { + @apply border-0; +} + +.ant-upload.ant-upload-btn { + @apply bg-inputs-background dark:bg-inputs-background-dark text-icons-primary dark:text-icons-primary-dark + border-2 border-dashed border-inputs-border dark:border-inputs-border-dark transition-colors rounded-2xl; + + &:hover { + @apply border-buttons-primary-on-hover dark:border-buttons-primary-on-hover-dark; + } +} + +.ant-upload-list-item { + @apply bg-backgrounds-primary dark:bg-backgrounds-primary-dark text-foregrounds-primary dark:text-foregrounds-primary-dark !important; + + .ant-btn { + @apply bg-transparent; + } +} + +.wen-avatar-uploader, +.wen-icon-uploader { + .ant-upload, + .ant-upload-list-picture-card-container { + @apply rounded-full w-32 h-32; + + .ant-upload-list-item, + .ant-upload-list-item-image, + .ant-upload-list-item-info, + .ant-upload-list-picture-card .ant-upload-list-item-info::before { + @apply rounded-full; + } + } +} + +.wen-banner { + .ant-upload, + .ant-upload-list-picture-card-container { + @apply h-28 w-full; + } +} diff --git a/src/theme/03-utilities/.gitkeep b/src/theme/03-utilities/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/theme/dark.less b/src/theme/dark.less new file mode 100644 index 0000000..02a3d7e --- /dev/null +++ b/src/theme/dark.less @@ -0,0 +1,84 @@ +@import './light.less'; + +/** + * WARNINGDark: This is not real dark mode color system + * It's just copy of light mode with some changes + */ +@accentPrimaryDark: #f39200; +@accentSecondaryDark: #333; +@accentSelectedDark: #092934; + +@backgroundsPrimaryDark: #141412; +@backgroundsSecondaryDark: #1b1a18; +@backgroundsTertiaryDark: #141412; + +@foregroundsPrimaryDark: #d6d3cc; +@foregroundsSecondaryDark: #6a6962; +@foregroundsTertiaryDark: #3d3b34; +@foregroundsPlaceholderDark: #32302a; +@foregroundsSeparatorDark: #272521; +@foregroundsOnPrimaryDark: #141412; + +@buttonsPrimaryEnabledDark: #008af2; +@buttonsPrimaryOnHoverDark: #24a1ff; +@buttonsPrimaryPressedDark: #0069b8; +// 50% fade out is made by setting opacity on element, not color +@buttonsPrimaryDisabledDark: @buttonsPrimaryEnabledDark; +@buttonsTextDark: #fff; +@buttonsDestructiveDark: #f2550c; + +@buttonsSecondaryEnabledDark: #008af2; +@buttonsSecondaryOnHoverDark: #24a1ff; +@buttonsSecondaryPressedDark: #0080e0; +// 50% fade out is made by setting opacity on element, not color +@buttonsSecondaryDisabledDark: @buttonsSecondaryEnabledDark; +@buttonsSecondaryBackgroundDark: #2b2a26; +@buttonsSecondaryDestructiveDark: #f2550c; + +@buttonsTertiaryEnabledDark: #2b2a26; +@buttonsTertiaryOnHoverDark: #363430; +@buttonsTertiaryPressedDark: #201f1d; +@buttonsTertiaryTextDark: #fff; +@buttonsTertiaryDestructiveDark: #f2550c; + +@textlinkEnabledDark: #008af2; +@textlinkOnHoverDark: #24a1ff; +@textlinkPressedDark: #0080e0; + +@tabsBackgroundDark: #141412; +@tabsSelectedDark: #f39200; +@tabsTextEnabledDark: #f3f3f1; +@tabsTextSelectedDark: #fff; +@tabsTextOnHoverDark: #008af2; + +@inputsBackgroundDark: #141412; +@inputsBorderDark: #44433e; +@inputsBorderFocusDark: #ffc670; +@inputsErrorDark: #ff392d; + +@iconsPrimaryDark: #65645d; +@iconsSecondaryDark: #504f4a; +@iconsTertiaryDark: #d8d8d8; +@iconsDestructiveDark: #f2550c; + +@tagsCommencingDark: #768e9c; +@tagsAvailableDark: #3a5430; +@tagsClosedDark: #6e3a22; +@tagsRegularDark: #48463e; +@tagsBorderDark: #383733; +@tagsPendingDark: #827500; +@tagsGuardianDark: #cc7b00; +@tagsMemberDark: #016cbc; + +@alertsErrorDark: #d94b08; +@alertsSuccessDark: #8fe46c; +@alertsWarningDark: #fae312; +@alertsInfoDark: #363636; + +// Unofficial (not in design system tokens, but required) +@backgroundsItemHoverDark: #edf8fc; + +@graphOffersDark: #2e4c36; +@graphRequestsDark: #523528; + +@saleOngoingDark: #3d7349; diff --git a/src/theme/light.less b/src/theme/light.less new file mode 100644 index 0000000..47c427a --- /dev/null +++ b/src/theme/light.less @@ -0,0 +1,79 @@ +@accentPrimary: #f39200; +@accentSecondary: #333; +@accentSelected: #edf8fc; + +@backgroundsPrimary: #fff; +@backgroundsSecondary: #f6f5f0; +@backgroundsTertiary: #fff; + +@foregroundsPrimary: #333; +@foregroundsSecondary: #9f9d93; +@foregroundsTertiary: #e4e1d2; +@foregroundsPlaceholder: #dbd9d2; +@foregroundsSeparator: #f0f0f0; +@foregroundsOnPrimary: #fff; + +@buttonsPrimaryEnabled: #008af2; +@buttonsPrimaryOnHover: #24a1ff; +@buttonsPrimaryPressed: #0080e0; +// 50% fade out is made by setting opacity on element, not color +@buttonsPrimaryDisabled: @buttonsPrimaryEnabled; +@buttonsText: #ffffff; +@buttonsDestructive: #f2550c; + +@buttonsSecondaryEnabled: #008af2; +@buttonsSecondaryOnHover: #24a1ff; +@buttonsSecondaryPressed: #0080e0; +// 50% fade out is made by setting opacity on element, not color +@buttonsSecondaryDisabled: @buttonsSecondaryEnabled; +@buttonsSecondaryBackground: #fff; +@buttonsSecondaryDestructive: #f2550c; + +@buttonsTertiaryEnabled: #fff; +@buttonsTertiaryOnHover: #fafafa; +@buttonsTertiaryPressed: #fff; +@buttonsTertiaryText: #333; +@buttonsTertiaryDestructive: #f2550c; + +@textlinkEnabled: #008af2; +@textlinkOnHover: #24a1ff; +@textlinkPressed: #0080e0; + +@tabsBackground: #fff; +@tabsSelected: #f39200; +@tabsTextEnabled: #333; +@tabsTextSelected: #fff; +@tabsTextOnHover: #008af2; + +@inputsBackground: #fff; +@inputsBorder: #cac8bd; +@inputsBorderFocus: #ffc670; +@inputsError: #ff392d; + +@iconsPrimary: #333; +@iconsSecondary: #9f9d93; +@iconsTertiary: #d8d8d8; +@iconsDestructive: #f2550c; + +@tagsCommencing: #dceff9; +@tagsAvailable: #def7d4; +@tagsClosed: #f9ded2; +@tagsRegular: #f6f5f0; +@tagsBorder: #e4e1d2; +@tagsPending: #fdf39b; +@tagsGuardian: #f39200; +@tagsMember: #008af2; + +@alertsError: #d94b08; +@alertsSuccess: #8fe46c; +@alertsWarning: #fae312; +@alertsInfo: #363636; +@alertsPrimary: #f39200; + +// Unofficial (not in design system tokens, but required) +@backgroundsItemHover: #edf8fc; + +@graphOffers: #e6f9eb; +@graphRequests: #fbe4da; + +@saleOngoing: #f3ffee; diff --git a/src/theme/styles.less b/src/theme/styles.less new file mode 100644 index 0000000..6548586 --- /dev/null +++ b/src/theme/styles.less @@ -0,0 +1,263 @@ +@import './light.less'; + +// Custom Theming for NG-ZORRO, see https://ng.ant.design/docs/customize-theme/en +// We want to use tailwindcss as base. +@root-entry-name: default; +@import '../../node_modules/ng-zorro-antd/style/entry.less'; /* Import base styles */ +@import '../../node_modules/ng-zorro-antd/button/style/entry.less'; /* Import one component's styles */ +@import '../../node_modules/ng-zorro-antd/layout/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/menu/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/avatar/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/dropdown/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/popover/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/input/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/input-number/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/form/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/grid/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/card/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/skeleton/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/upload/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/typography/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/statistic/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/drawer/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/date-picker/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/notification/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/progress/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/table/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/modal/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/divider/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/timeline/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/select/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/badge/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/alert/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/slider/style/entry.less'; +@import '../../node_modules/ng-zorro-antd/switch/style/entry.less'; + +// I think you should just stick to ng-zorro. +@import 'tailwindcss/base'; +@import 'tailwindcss/components'; +@import 'tailwindcss/utilities'; + +// View all variables: https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/components/style/themes/default.less + +// Default color +@primary-color: @accentPrimary; + +@white: #ffffff; + +@processing-color: @accentPrimary; + +@component-background: @backgroundsPrimary; +@body-background: @backgroundsSecondary; +@border-color-base: @inputsBorder; + +@text-color: @foregroundsPrimary; +// TODO - dark mode +// @text-color-dark: ; +@text-color-secondary: @foregroundsSecondary; +// TODO - dark mode +// @text-color-secondary-dark: ; +@text-color-tertiary: @foregroundsTertiary; + +@icon-color: @iconsPrimary; +// TODO - not found in design system +// @icon-color-hover: ; + +@heading-color: @foregroundsPrimary; + +@border-radius-base: 24px; +@border-radius-lg: 32px; + +@layout-body-background: @body-background; + +@height-base: 40px; +@height-lg: 56px; +@height-sm: 32px; + +@font-size-base: 16px; +@font-size-lg: @font-size-base + 2px; +@font-size-sm: 14px; + +@padding-md: 20px; // small containers and buttons +@padding-lg: 38px; // containers + +@btn-primary-color: @buttonsText; +@btn-primary-bg: @buttonsPrimaryEnabled; +@btn-disable-bg: @buttonsPrimaryDisabled; +@btn-disable-color: @buttonsText; +@btn-disable-border: @buttonsPrimaryDisabled; + +@btn-padding-horizontal-base: @padding-md; +@btn-font-weight: 600; +@btn-font-size: @font-size-lg; + +@btn-default-color: @buttonsSecondaryEnabled; +@btn-default-bg: @buttonsSecondaryBackground; +@btn-default-border: @buttonsSecondaryBackground; + +@select-single-item-height-lg: @height-lg; +@select-item-active-bg: @backgroundsItemHover; + +@btn-padding-horizontal-lg: @padding-lg; + +@control-padding-horizontal: @padding-md + 4; + +/** + * Input + */ +@input-height: @height-lg; +@input-bg: @inputsBackground; +@input-placeholder-color: @foregroundsPlaceholder; +@input-hover-border-color: @inputsBorderFocus; +// @input-disabled-bg: @disabled-bg; +// @input-icon-hover-color: fade(@foregroundsPrimary, 85%); +// @input-disabled-color: @disabled-color; + +@border-color-split: transparent; + +@avatar-size-base: 40px; +@avatar-size-lg: 120px; +@avatar-size-sm: 32px; + +/* + * Dropdown + */ +@dropdown-font-size: @font-size-lg; +@dropdown-line-height: 28px; +@dropdown-edge-child-vertical-padding: 14px; +@dropdown-vertical-padding: 11px; +// According to the design system, there is no color for selected color +@dropdown-selected-color: transparent; + +@card-head-font-size: @font-size-lg + 2; + +/* + * Card + */ +@card-head-padding: 24px; +@card-shadow: none; + +/* + * Progress + */ +@progress-default-color: @processing-color; +@progress-remaining-color: @foregroundsTertiary; +@progress-text-font-size: 12px; + +/* + * Table + */ +@table-header-bg: transparent; +@table-header-color: @text-color-secondary; +@table-row-hover-bg: @backgroundsItemHover; +@table-padding-vertical: 16px; +@table-padding-horizontal: 16px; +@table-border-color: @foregroundsSeparator; +@table-border-radius-base: 0; +@table-font-size: @font-size-sm; +@table-header-cell-split-color: transparent; + +/* + * Drawer + */ +@drawer-header-padding: 48px 48px; +@drawer-body-padding: 48px; +@drawer-header-close-size: 78px; + +/* + * Radio + */ +@radio-border-width: 2px; +@radio-size: 24px; +@radio-dot-size: 12px; +@radio-dot-color: @foregroundsOnPrimary; + +/* + * Tooltip + */ +@tooltip-max-width: 370px; +@tooltip-color: @foregroundsPrimary; +@tooltip-bg: @backgroundsPrimary; +@tooltip-arrow-width: 0; + +/* + * Modal + */ +@modal-header-padding-vertical: @padding-lg; +@modal-header-padding-horizontal: @padding-lg; +@modal-body-padding: 0 @padding-lg 0 @padding-lg; +@modal-header-title-line-height: 32px; +@modal-header-title-font-size: 24px; +@modal-footer-padding-vertical: @padding-lg; +@modal-footer-padding-horizontal: @padding-lg; + +// Disabled use of layers as it's problematic in prod build. +// @layer base { +@import '01-base/font.less'; +@import '01-base/document.less'; +@import '01-base/headings.less'; +// } + +// @layer components { +@import '02-components/avatar.less'; +@import '02-components/link.less'; +@import '02-components/button.less'; +@import '02-components/form.less'; +@import '02-components/card.less'; +@import '02-components/sider.less'; +@import '02-components/tag.less'; +@import '02-components/upload.less'; +@import '02-components/drawer.less'; +@import '02-components/checkbox.less'; +@import '02-components/select.less'; +@import '02-components/input.less'; +@import '02-components/dropdown.less'; +@import '02-components/menu.less'; +@import '02-components/datepicker.less'; +@import '02-components/table.less'; +@import '02-components/progress.less'; +@import '02-components/tooltip.less'; +@import '02-components/modal.less'; +@import '02-components/alert.less'; +@import '02-components/notification.less'; +@import '02-components/range-slider.less'; +@import '02-components/slider.less'; + +// } + +// @layer utilities { +// } + +/* Algolia Containers */ +ais-instantsearch { + .container { + display: flex; + margin: 0 auto; + padding: 2rem 1rem; + } + + .container-options { + border-bottom: 1px solid #ebecf3; + display: flex; + justify-content: flex-end; + margin-bottom: 30px; + padding: 30px 0; + } + + .container-options .container-option:not(:first-child) { + margin-left: 48px; + } + + .container-options select { + min-width: 100px; + } + + .container-results { + flex: 1 1 auto; + } + + .container-filters { + width: 230px; + flex: 0 0 auto; + } +} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..6319b01 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,128 @@ +const fs = require('fs'); +const lessToJs = require('less-vars-to-js'); +const { kebabCase, mapKeys } = require('lodash'); + +const lessOptions = { + resolveVariables: true, + stripPrefix: true, +}; + +const lightThemeLess = fs.readFileSync('src/theme/light.less').toString(); +const lightTheme = lessToJs(lightThemeLess, lessOptions); + +const darkThemeLess = fs.readFileSync('src/theme/dark.less').toString(); +const darkTheme = lessToJs(darkThemeLess, lessOptions); + +const normalizeNames = (theme) => mapKeys(theme, (_, name) => kebabCase(name)); + +module.exports = { + prefix: '', + content: ['./src/**/*.{html,ts}', './projects/**/*.{html,ts}'], + darkMode: 'class', + theme: { + fontFamily: { + display: ['Poppins', 'sans-serif'], + }, + container: { + center: true, + }, + extend: { + colors: { + inherit: 'inherit', + // Modern definition - shared with less variables used in ng-zorro + ...normalizeNames(lightTheme), + ...normalizeNames(darkTheme), + }, + screens: { + xs: '314px', + '2xl': '1440px', + '3xl': '1680px', + '4xl': '1920px', + 'h-break': { raw: '(max-height: 830px)' }, + }, + spacing: { + 18: '4.5rem', + 30: '7.5rem', + 75: '18.75rem', + 420: '420px', + }, + minWidth: { + 6: '1.5rem', + 8: '2rem', + 10: '2.5rem', + 12: '3rem', + 24: '6rem', + 30: '7.5rem', + 32: '8rem', + 40: '10rem', + 60: '15rem', + 76: '19rem', + 100: '25rem', + 120: '30rem', + }, + maxWidth: { + fit: 'fit-content', + 20: '5rem', + 24: '6rem', + 40: '10rem', + 80: '20rem', + 128: '32rem', + 160: '40rem', + '1/2': '50%', + '1/3': '33%', + '2/3': '66%', + 450: '450px', + 1136: '1136px', + 1296: '1296px', + 1776: '1776px', + }, + width: { + header: '500px', + 76: '19rem', + '3/10': '30%', + }, + minHeight: { + 6: '1.5rem', + 8: '2rem', + 10: '2.5rem', + 14: '3.5rem', + 20: '5rem', + 24: '6rem', + 76: '19rem', + 180: '45rem', + }, + maxHeight: { + 56: '14rem', + 80: '20rem', + 128: '32rem', + }, + height: { + 76: '19rem', + 99: '24.75rem', + }, + borderRadius: { + 9: '2.25rem', + 10: '2.5rem', + large: '3rem', + 40: '10rem', + }, + borderWidth: { + 3: '3px', + }, + dropShadow: { + card: '0px 0px 12px rgba(0, 0, 0, 0.08)', + }, + boxShadow: { + header: '0px 2px 3px #E6E5DE', + modal: '0px 2px 32px rgba(0, 0, 0, 0.16)', + }, + fontSize: { + xxs: '0.625rem', + }, + flex: { + 2: '2 2 0%', + }, + }, + }, + plugins: [require('@tailwindcss/line-clamp')], +}; diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..29f5f58 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": ["src/main.ts", "src/polyfills.ts"], + "include": ["src/**/*.d.ts"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..0b94d6a --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,45 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "sourceMap": true, + "declaration": false, + "strictNullChecks": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictFunctionTypes": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "useUnknownInCatchVariables": true, + "downlevelIteration": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "es2017", + "module": "es2020", + "lib": ["es2018", "dom"], + "paths": { + "@api/*": ["src/app/@api/*"], + "@core/*": ["src/app/@core/*"], + "@shell/*": ["src/app/@shell/*"], + "@components/*": ["src/app/components/*"], + "@pages/*": ["src/app/pages/*"], + "@env/*": ["src/environments/*"], + "@algolia/*": ["src/app/components/algolia/*"] + } + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/tsconfig.server.json b/tsconfig.server.json new file mode 100644 index 0000000..59eb717 --- /dev/null +++ b/tsconfig.server.json @@ -0,0 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.app.json", + "compilerOptions": { + "outDir": "./out-tsc/server", + "target": "es2019", + "types": ["node"] + }, + "files": ["src/main.server.ts", "server.ts"] +} diff --git a/tsconfig.spec.json b/tsconfig.spec.json new file mode 100644 index 0000000..7e34508 --- /dev/null +++ b/tsconfig.spec.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": ["node", "jasmine"], + "module": "commonjs", + "emitDecoratorMetadata": true, + "allowJs": true + }, + "files": ["src/test.ts", "src/polyfills.ts"], + "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] +}